about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--html/000organization.cc.html13
-rw-r--r--html/001help.cc.html52
-rw-r--r--html/002test.cc.html190
-rw-r--r--html/003trace.cc.html677
-rw-r--r--html/003trace.test.cc.html88
-rw-r--r--html/010vm.cc.html1756
-rw-r--r--html/011load.cc.html710
-rw-r--r--html/012transform.cc.html10
-rw-r--r--html/013update_operation.cc.html6
-rw-r--r--html/014literal_string.cc.html28
-rw-r--r--html/015literal_noninteger.cc.html6
-rw-r--r--html/016dilated_reagent.cc.html30
-rw-r--r--html/017parse_tree.cc.html10
-rw-r--r--html/018constant.cc.html129
-rw-r--r--html/019type_abbreviations.cc.html (renamed from html/018type_abbreviations.cc.html)78
-rw-r--r--html/020run.cc.html761
-rw-r--r--html/021check_instruction.cc.html368
-rw-r--r--html/022arithmetic.cc.html1492
-rw-r--r--html/023boolean.cc.html244
-rw-r--r--html/024jump.cc.html310
-rw-r--r--html/025compare.cc.html830
-rw-r--r--html/026call.cc.html53
-rw-r--r--html/027call_ingredient.cc.html142
-rw-r--r--html/028call_return.cc.html22
-rw-r--r--html/029tools.cc.html36
-rw-r--r--html/030container.cc.html1432
-rw-r--r--html/031merge.cc.html37
-rw-r--r--html/032array.cc.html825
-rw-r--r--html/033exclusive_container.cc.html841
-rw-r--r--html/034address.cc.html732
-rw-r--r--html/035lookup.cc.html984
-rw-r--r--html/036abandon.cc.html199
-rw-r--r--html/038new_text.cc.html411
-rw-r--r--html/040brace.cc.html46
-rw-r--r--html/041jump_target.cc.html28
-rw-r--r--html/042name.cc.html593
-rw-r--r--html/043space.cc.html556
-rw-r--r--html/044space_surround.cc.html116
-rw-r--r--html/045closure_name.cc.html295
-rw-r--r--html/046check_type_by_name.cc.html337
-rw-r--r--html/050scenario.cc.html1418
-rw-r--r--html/051scenario_test.mu.html2
-rw-r--r--html/052tangle.cc.html74
-rw-r--r--html/053recipe_header.cc.html102
-rw-r--r--html/054static_dispatch.cc.html925
-rw-r--r--html/055shape_shifting_container.cc.html1330
-rw-r--r--html/056shape_shifting_recipe.cc.html2179
-rw-r--r--html/057immutable.cc.html432
-rw-r--r--html/058to_text.cc.html9
-rw-r--r--html/059to_text.mu.html2
-rw-r--r--html/060rewrite_literal_string.cc.html111
-rw-r--r--html/061text.mu.html40
-rw-r--r--html/062convert_ingredients_to_text.cc.html36
-rw-r--r--html/063array.mu.html6
-rw-r--r--html/064list.mu.html56
-rw-r--r--html/065duplex_list.mu.html1469
-rw-r--r--html/066stream.mu.html16
-rw-r--r--html/068random.mu.html12
-rw-r--r--html/069hash.cc.html44
-rw-r--r--html/070table.mu.html6
-rw-r--r--html/072recipe.cc.html94
-rw-r--r--html/073scheduler.cc.html50
-rw-r--r--html/074wait.cc.html704
-rw-r--r--html/075channel.mu.html18
-rw-r--r--html/076continuation.cc.html78
-rw-r--r--html/080display.cc.html51
-rw-r--r--html/081print.mu.html68
-rw-r--r--html/082scenario_screen.cc.html562
-rw-r--r--html/083scenario_screen_test.mu.html2
-rw-r--r--html/084console.mu.html14
-rw-r--r--html/085scenario_console.cc.html44
-rw-r--r--html/086scenario_console_test.mu.html2
-rw-r--r--html/087file.cc.html65
-rw-r--r--html/088file.mu.html20
-rw-r--r--html/089scenario_filesystem.cc.html112
-rw-r--r--html/090scenario_filesystem_test.mu.html2
-rw-r--r--html/091socket.cc.html79
-rw-r--r--html/092socket.mu.html10
-rw-r--r--html/099hardware_checks.cc.html4
-rw-r--r--html/100trace_browser.cc.html20
-rw-r--r--html/101run_sandboxed.cc.html1203
-rw-r--r--html/999spaces.cc.html2
-rw-r--r--html/channel.mu.html2
-rw-r--r--html/chessboard.mu.html66
-rw-r--r--html/console.mu.html2
-rw-r--r--html/continuation1.mu.html2
-rw-r--r--html/continuation2.mu.html8
-rw-r--r--html/continuation3.mu.html2
-rw-r--r--html/continuation4.mu.html8
-rw-r--r--html/continuation5.mu.html8
-rw-r--r--html/edit/001-editor.mu.html754
-rw-r--r--html/edit/002-typing.mu.html108
-rw-r--r--html/edit/003-shortcuts.mu.html3291
-rw-r--r--html/edit/004-programming-environment.mu.html52
-rw-r--r--html/edit/005-sandbox.mu.html102
-rw-r--r--html/edit/006-sandbox-copy.mu.html44
-rw-r--r--html/edit/007-sandbox-delete.mu.html36
-rw-r--r--html/edit/008-sandbox-edit.mu.html38
-rw-r--r--html/edit/009-sandbox-test.mu.html14
-rw-r--r--html/edit/010-sandbox-trace.mu.html16
-rw-r--r--html/edit/011-errors.mu.html64
-rw-r--r--html/edit/012-editor-undo.mu.html54
-rw-r--r--html/exception1.mu.html8
-rw-r--r--html/exception2.mu.html6
-rw-r--r--html/factorial.mu.html4
-rw-r--r--html/filesystem.mu.html6
-rw-r--r--html/fork.mu.html2
-rw-r--r--html/http-client.mu.html8
-rw-r--r--html/http-server.mu.html2
-rw-r--r--html/lambda-to-mu.mu.html38
-rw-r--r--html/nqueens.mu.html10
-rw-r--r--html/same-fringe.mu.html10
-rw-r--r--html/screen.mu.html38
-rw-r--r--html/subx/000organization.cc.html78
-rw-r--r--html/subx/001help.cc.html477
-rw-r--r--html/subx/002test.cc.html197
-rw-r--r--html/subx/003trace.cc.html626
-rw-r--r--html/subx/003trace.test.cc.html88
-rw-r--r--html/subx/010vm.cc.html296
-rw-r--r--html/subx/011run.cc.html325
-rw-r--r--html/subx/012direct_addressing.cc.html464
-rw-r--r--html/subx/013indirect_addressing.cc.html657
-rw-r--r--html/subx/014immediate_addressing.cc.html544
-rw-r--r--html/subx/015index_addressing.cc.html191
-rw-r--r--html/subx/016jump_relative.cc.html535
-rw-r--r--html/subx/017jump_relative.cc.html360
-rw-r--r--html/subx/018functions.cc.html155
-rw-r--r--html/subx/019syscalls.cc.html98
-rw-r--r--html/subx/020elf.cc.html217
-rw-r--r--html/subx/021translate.cc.html226
-rw-r--r--html/subx/022check_instruction.cc.html750
-rw-r--r--html/subx/023check_operand_bounds.cc.html141
-rw-r--r--html/subx/024pack_operands.cc.html277
-rw-r--r--html/subx/025non_code_segment.cc.html94
-rw-r--r--html/subx/026labels.cc.html226
-rw-r--r--html/tangle.mu.html4
-rw-r--r--index.html2
137 files changed, 22050 insertions, 16727 deletions
diff --git a/html/000organization.cc.html b/html/000organization.cc.html
index f951a49d..5216ea42 100644
--- a/html/000organization.cc.html
+++ b/html/000organization.cc.html
@@ -15,14 +15,13 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.Delimiter { color: #800080; }
+.Constant { color: #00a0a0; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.Constant { color: #00a0a0; }
+.Delimiter { color: #800080; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 -->
 </style>
 
@@ -153,16 +152,16 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr"> 94 </span><span class="Comment">// Types</span>
 <span id="L95" class="LineNr"> 95 </span><span class="Comment">// End Types</span>
 <span id="L96" class="LineNr"> 96 </span>
-<span id="L97" class="LineNr"> 97 </span><span class="Comment">// Function prototypes are auto-generated in the 'build' script; define your</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Comment">// Function prototypes are auto-generated in the 'build*' scripts; define your</span>
 <span id="L98" class="LineNr"> 98 </span><span class="Comment">// functions in any order. Just be sure to declare each function header all on</span>
 <span id="L99" class="LineNr"> 99 </span><span class="Comment">// one line, ending with the '{'. Our auto-generation scripts are too minimal</span>
 <span id="L100" class="LineNr">100 </span><span class="Comment">// and simple-minded to handle anything else.</span>
-<span id="L101" class="LineNr">101 </span><span class="PreProc">#include </span><span class="Constant">&quot;function_list&quot;</span>  <span class="Comment">// by convention, files ending with '_list' are auto-generated</span>
+<span id="L101" class="LineNr">101 </span><span class="Comment">#include &quot;function_list&quot;  // by convention, files ending with '_list' are auto-generated</span>
 <span id="L102" class="LineNr">102 </span>
 <span id="L103" class="LineNr">103 </span><span class="Comment">// Globals</span>
 <span id="L104" class="LineNr">104 </span><span class="Comment">//</span>
 <span id="L105" class="LineNr">105 </span><span class="Comment">// All statements in this section should always define a single variable on a</span>
-<span id="L106" class="LineNr">106 </span><span class="Comment">// single line. The 'build' script will simple-mindedly auto-generate extern</span>
+<span id="L106" class="LineNr">106 </span><span class="Comment">// single line. The 'build*' scripts will simple-mindedly auto-generate extern</span>
 <span id="L107" class="LineNr">107 </span><span class="Comment">// declarations for them. Remember to define (not just declare) constants with</span>
 <span id="L108" class="LineNr">108 </span><span class="Comment">// extern linkage in this section, since C++ global constants have internal</span>
 <span id="L109" class="LineNr">109 </span><span class="Comment">// linkage by default.</span>
@@ -185,7 +184,7 @@ if ('onhashchange' in window) {
 <span id="L126" class="LineNr">126 </span>
 <span id="L127" class="LineNr">127 </span><span class="Comment">//: our first directive; insert the following header at the start of the program</span>
 <span id="L128" class="LineNr">128 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L129" class="LineNr">129 </span><span class="PreProc">#include </span><span class="Constant">&lt;stdlib.h&gt;</span>
+<span id="L129" class="LineNr">129 </span><span class="Comment">#include &lt;stdlib.h&gt;</span>
 <span id="L130" class="LineNr">130 </span>
 <span id="L131" class="LineNr">131 </span><span class="Comment">//: Without directives or with the :(code) directive, lines get added at the</span>
 <span id="L132" class="LineNr">132 </span><span class="Comment">//: end.</span>
diff --git a/html/001help.cc.html b/html/001help.cc.html
index e8f19b3e..9cccd867 100644
--- a/html/001help.cc.html
+++ b/html/001help.cc.html
@@ -80,7 +80,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span>       &lt;&lt; <span class="Constant">&quot;Examples:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L19" class="LineNr"> 19 </span>       &lt;&lt; <span class="Constant">&quot;  To load files and run 'main':</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L20" class="LineNr"> 20 </span>       &lt;&lt; <span class="Constant">&quot;    mu file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L21" class="LineNr"> 21 </span>       &lt;&lt; <span class="Constant">&quot;  To run 'main' and <a href='003trace.cc.html#L120'>dump</a> a <a href='003trace.cc.html#L167'>trace</a> of all operations at the <a href='003trace.cc.html#L203'>end</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L21" class="LineNr"> 21 </span>       &lt;&lt; <span class="Constant">&quot;  To run 'main' and dump a <a href='003trace.cc.html#L190'>trace</a> of all operations at the <a href='003trace.cc.html#L226'>end</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L22" class="LineNr"> 22 </span>       &lt;&lt; <span class="Constant">&quot;    mu --trace file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L23" class="LineNr"> 23 </span>       &lt;&lt; <span class="Constant">&quot;  To run all tests:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L24" class="LineNr"> 24 </span>       &lt;&lt; <span class="Constant">&quot;    mu test</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
@@ -88,7 +88,7 @@ if ('onhashchange' in window) {
 <span id="L26" class="LineNr"> 26 </span>       &lt;&lt; <span class="Constant">&quot;    mu test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L27" class="LineNr"> 27 </span>       &lt;&lt; <span class="Constant">&quot;  To run a single Mu <a href='050scenario.cc.html#L57'>scenario</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L28" class="LineNr"> 28 </span>       &lt;&lt; <span class="Constant">&quot;    mu test file1.mu file2.mu ... <a href='050scenario.cc.html#L57'>scenario</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L29" class="LineNr"> 29 </span>       &lt;&lt; <span class="Constant">&quot;  To run a single Mu <a href='050scenario.cc.html#L57'>scenario</a> and <a href='003trace.cc.html#L120'>dump</a> a <a href='003trace.cc.html#L167'>trace</a> at the <a href='003trace.cc.html#L203'>end</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L29" class="LineNr"> 29 </span>       &lt;&lt; <span class="Constant">&quot;  To run a single Mu <a href='050scenario.cc.html#L57'>scenario</a> and dump a <a href='003trace.cc.html#L190'>trace</a> at the <a href='003trace.cc.html#L226'>end</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L30" class="LineNr"> 30 </span>       &lt;&lt; <span class="Constant">&quot;    mu --trace test file1.mu file2.mu ... <a href='050scenario.cc.html#L57'>scenario</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L31" class="LineNr"> 31 </span>       &lt;&lt; <span class="Constant">&quot;  To load files and run only the tests in explicitly loaded files (for apps):</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L32" class="LineNr"> 32 </span>       &lt;&lt; <span class="Constant">&quot;    mu --test-only-app test file1.mu file2.mu ...</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
@@ -102,7 +102,7 @@ if ('onhashchange' in window) {
 <span id="L40" class="LineNr"> 40 </span>       &lt;&lt; <span class="Constant">&quot;    mu --profile file_or_dir1 file_or_dir2 ...</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L41" class="LineNr"> 41 </span>       &lt;&lt; <span class="Constant">&quot;  this slices and dices time spent in various profile.* output files</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L42" class="LineNr"> 42 </span>       &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L43" class="LineNr"> 43 </span>       &lt;&lt; <span class="Constant">&quot;  To browse a <a href='003trace.cc.html#L167'>trace</a> generated by a previous run:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L43" class="LineNr"> 43 </span>       &lt;&lt; <span class="Constant">&quot;  To browse a <a href='003trace.cc.html#L190'>trace</a> generated by a previous run:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L44" class="LineNr"> 44 </span>       &lt;&lt; <span class="Constant">&quot;    mu browse-trace file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L45" class="LineNr"> 45 </span>       <span class="Delimiter">;</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
@@ -129,7 +129,7 @@ if ('onhashchange' in window) {
 <span id="L67" class="LineNr"> 67 </span><span class="Comment">//: anywhere we like as long as we format the function header in a specific</span>
 <span id="L68" class="LineNr"> 68 </span><span class="Comment">//: way: put it all on a single line without indent, end the line with ') {'</span>
 <span id="L69" class="LineNr"> 69 </span><span class="Comment">//: and no trailing whitespace. As long as functions uniformly start this</span>
-<span id="L70" class="LineNr"> 70 </span><span class="Comment">//: way, our 'build' script contains a little command to automatically</span>
+<span id="L70" class="LineNr"> 70 </span><span class="Comment">//: way, our 'build*' scripts contain a little command to automatically</span>
 <span id="L71" class="LineNr"> 71 </span><span class="Comment">//: generate declarations for them.</span>
 <span id="L72" class="LineNr"> 72 </span><span class="Delimiter">:(code)</span>
 <span id="L73" class="LineNr"> 73 </span><span class="Normal">bool</span> <a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span><span class="Normal">char</span>* s<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span>* lit<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -138,9 +138,9 @@ if ('onhashchange' in window) {
 <span id="L76" class="LineNr"> 76 </span>
 <span id="L77" class="LineNr"> 77 </span><span class="Normal">bool</span> <a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; pat<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L78" class="LineNr"> 78 </span>  string::const_iterator a=s<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> b=pat<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  a!=s<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> &amp;&amp; b!=pat<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++a<span class="Delimiter">,</span> ++b<span class="Delimiter">)</span>
-<span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*a != *b<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Identifier">return</span> b == pat<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  a!=s<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> &amp;&amp; b!=pat<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++a<span class="Delimiter">,</span> ++b<span class="Delimiter">)</span>
+<span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*a != *b<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Identifier">return</span> b == pat<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
 <span id="L83" class="LineNr"> 83 </span>
 <span id="L84" class="LineNr"> 84 </span><span class="Comment">//: I'll throw some style conventions here for want of a better place for them.</span>
@@ -200,7 +200,7 @@ if ('onhashchange' in window) {
 <span id="L138" class="LineNr">138 </span><span class="Comment">//: since multiplying two integers seems like a more common situation to end</span>
 <span id="L139" class="LineNr">139 </span><span class="Comment">//: up in than integer overflow.</span>
 <span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L141" class="LineNr">141 </span><span class="PreProc">#define SIZE(X) (assert((X)</span><span class="Delimiter">.</span><span class="PreProc">size() &lt; (</span><span class="Constant">1LL</span><span class="PreProc">&lt;&lt;(</span><span class="Normal">sizeof</span><span class="PreProc">(</span><span class="Normal">int</span><span class="PreProc">)*</span><span class="Constant">8</span><span class="PreProc">-</span><span class="Constant">2</span><span class="PreProc">)))</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Normal">static_cast</span><span class="PreProc">&lt;</span><span class="Normal">int</span><span class="PreProc">&gt;((X)</span><span class="Delimiter">.</span><span class="PreProc">size()))</span>
+<span id="L141" class="LineNr">141 </span><span class="Comment">#define SIZE(X) (assert((X).size() &lt; (1LL&lt;&lt;(sizeof(int)*8-2))), static_cast&lt;int&gt;((X).size()))</span>
 <span id="L142" class="LineNr">142 </span>
 <span id="L143" class="LineNr">143 </span><span class="Comment">//: 5. Integer overflow is guarded against at runtime using the -ftrapv flag</span>
 <span id="L144" class="LineNr">144 </span><span class="Comment">//: to the compiler, supported by Clang (GCC version only works sometimes:</span>
@@ -219,7 +219,7 @@ if ('onhashchange' in window) {
 <span id="L157" class="LineNr">157 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGABRT</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// assert() failure or integer overflow on linux (with -ftrapv)</span>
 <span id="L158" class="LineNr">158 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGILL</span><span class="Delimiter">,</span>  &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// integer overflow on OS X (with -ftrapv)</span>
 <span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
-<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>vestigial</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>vestigial</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='001help.cc.html#L160'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> siginfo_t* <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">,</span> <span class="Normal">void</span>* <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L161" class="LineNr">161 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L162" class="LineNr">162 </span>    <span class="Normal">case</span> <span class="Constant">SIGABRT</span>:
 <span id="L163" class="LineNr">163 </span><span class="PreProc">      #ifndef __APPLE__</span>
@@ -238,7 +238,7 @@ if ('onhashchange' in window) {
 <span id="L176" class="LineNr">176 </span>  <span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
 <span id="L178" class="LineNr">178 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L179" class="LineNr">179 </span><span class="PreProc">#include </span><span class="Constant">&lt;signal.h&gt;</span>
+<span id="L179" class="LineNr">179 </span><span class="Comment">#include &lt;signal.h&gt;</span>
 <span id="L180" class="LineNr">180 </span>
 <span id="L181" class="LineNr">181 </span><span class="Comment">//: For good measure we'll also enable SIGFPE.</span>
 <span id="L182" class="LineNr">182 </span><span class="Delimiter">:(before &quot;atexit(reset)&quot;)</span>
@@ -250,9 +250,9 @@ if ('onhashchange' in window) {
 <span id="L188" class="LineNr">188 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε: &quot; &lt;&lt; smallest_subnormal_f &lt;&lt; '\n';</span>
 <span id="L189" class="LineNr">189 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε/2: &quot; &lt;&lt; smallest_subnormal_f/2 &lt;&lt; &quot; (underflow)\n&quot;;  // test SIGFPE</span>
 <span id="L190" class="LineNr">190 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L191" class="LineNr">191 </span><span class="PreProc">#include </span><span class="Constant">&lt;fenv.h&gt;</span>
+<span id="L191" class="LineNr">191 </span><span class="Comment">#include &lt;fenv.h&gt;</span>
 <span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
-<span id="L193" class="LineNr">193 </span><span class="PreProc">#ifdef __APPLE__</span>
+<span id="L193" class="LineNr">193 </span><span class="Comment">#ifdef __APPLE__</span>
 <span id="L194" class="LineNr">194 </span><span class="Comment">// Public domain polyfill for feenableexcept on OS X</span>
 <span id="L195" class="LineNr">195 </span><span class="Comment">// <a href="http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c">http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c</a></span>
 <span id="L196" class="LineNr">196 </span><span class="Normal">int</span> <a href='001help.cc.html#L196'>feenableexcept</a><span class="Delimiter">(</span><span class="Normal">unsigned</span> <span class="Normal">int</span> excepts<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -265,19 +265,19 @@ if ('onhashchange' in window) {
 <span id="L203" class="LineNr">203 </span>  fenv<span class="Delimiter">.</span>__mxcsr &amp;= ~<span class="Delimiter">(</span>new_excepts &lt;&lt; <span class="Constant">7</span><span class="Delimiter">);</span>
 <span id="L204" class="LineNr">204 </span>  <span class="Identifier">return</span> fesetenv<span class="Delimiter">(</span>&amp;fenv<span class="Delimiter">)</span> ? -<span class="Constant">1</span> : old_excepts<span class="Delimiter">;</span>
 <span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
-<span id="L206" class="LineNr">206 </span><span class="PreProc">#endif</span>
+<span id="L206" class="LineNr">206 </span><span class="Comment">#endif</span>
 <span id="L207" class="LineNr">207 </span>
 <span id="L208" class="LineNr">208 </span><span class="Comment">//: 6. Map's operator[] being non-const is fucking evil.</span>
 <span id="L209" class="LineNr">209 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>  <span class="Comment">// can't generate prototypes for these</span>
 <span id="L210" class="LineNr">210 </span><span class="Comment">// from <a href="http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map">http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map</a></span>
 <span id="L211" class="LineNr">211 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; get<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Normal">typename</span> T::iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
-<span id="L213" class="LineNr">213 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
+<span id="L213" class="LineNr">213 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
 <span id="L214" class="LineNr">214 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L215" class="LineNr">215 </span><span class="Delimiter">}</span>
 <span id="L216" class="LineNr">216 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; get<span class="Delimiter">(</span><span class="Normal">const</span> T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L217" class="LineNr">217 </span>  <span class="Normal">typename</span> T::const_iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
-<span id="L218" class="LineNr">218 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
+<span id="L218" class="LineNr">218 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
 <span id="L219" class="LineNr">219 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
 <span id="L221" class="LineNr">221 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -285,8 +285,8 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span>  map<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>std::make_pair<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">)).</span>first<span class="Delimiter">-&gt;</span>second = value<span class="Delimiter">;</span>
 <span id="L224" class="LineNr">224 </span>  <span class="Identifier">return</span> value<span class="Delimiter">;</span>
 <span id="L225" class="LineNr">225 </span><span class="Delimiter">}</span>
-<span id="L226" class="LineNr">226 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> contains_key<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L226" class="LineNr">226 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L228" class="LineNr">228 </span><span class="Delimiter">}</span>
 <span id="L229" class="LineNr">229 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L230" class="LineNr">230 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
@@ -303,26 +303,24 @@ if ('onhashchange' in window) {
 <span id="L241" class="LineNr">241 </span><span class="Delimiter">}</span>
 <span id="L242" class="LineNr">242 </span>
 <span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L244" class="LineNr">244 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
+<span id="L244" class="LineNr">244 </span><span class="Comment">#include &lt;assert.h&gt;</span>
 <span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
+<span id="L246" class="LineNr">246 </span><span class="Comment">#include &lt;iostream&gt;</span>
 <span id="L247" class="LineNr">247 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
 <span id="L248" class="LineNr">248 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
 <span id="L249" class="LineNr">249 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
 <span id="L250" class="LineNr">250 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
 <span id="L251" class="LineNr">251 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
 <span id="L252" class="LineNr">252 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
-<span id="L253" class="LineNr">253 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
+<span id="L253" class="LineNr">253 </span><span class="Comment">#include &lt;iomanip&gt;</span>
 <span id="L254" class="LineNr">254 </span>
-<span id="L255" class="LineNr">255 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
-<span id="L256" class="LineNr">256 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
+<span id="L255" class="LineNr">255 </span><span class="Comment">#include &lt;string.h&gt;</span>
+<span id="L256" class="LineNr">256 </span><span class="Comment">#include &lt;string&gt;</span>
 <span id="L257" class="LineNr">257 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
 <span id="L258" class="LineNr">258 </span>
-<span id="L259" class="LineNr">259 </span><span class="PreProc">#define vestigial  __attribute__((unused))</span>
-<span id="L260" class="LineNr">260 </span>
-<span id="L261" class="LineNr">261 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
-<span id="L262" class="LineNr">262 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
-<span id="L263" class="LineNr">263 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span><span class="Comment">#include &lt;algorithm&gt;</span>
+<span id="L260" class="LineNr">260 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
+<span id="L261" class="LineNr">261 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/002test.cc.html b/html/002test.cc.html
index 99c08114..bfc90b4a 100644
--- a/html/002test.cc.html
+++ b/html/002test.cc.html
@@ -59,92 +59,110 @@ if ('onhashchange' in window) {
 </head>
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
-<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: A simple test harness. To create new tests, define functions starting with</span>
-<span id="L2" class="LineNr"> 2 </span><span class="Comment">//: 'test_'. To run all tests so defined, run:</span>
-<span id="L3" class="LineNr"> 3 </span><span class="Comment">//:   $ ./mu test</span>
-<span id="L4" class="LineNr"> 4 </span><span class="Comment">//:</span>
-<span id="L5" class="LineNr"> 5 </span><span class="Comment">//: Every layer should include tests, and can reach into previous layers.</span>
-<span id="L6" class="LineNr"> 6 </span><span class="Comment">//: However, it seems like a good idea never to reach into tests from previous</span>
-<span id="L7" class="LineNr"> 7 </span><span class="Comment">//: layers. Every test should be a contract that always passes as originally</span>
-<span id="L8" class="LineNr"> 8 </span><span class="Comment">//: written, regardless of any later layers. Avoid writing 'temporary' tests</span>
-<span id="L9" class="LineNr"> 9 </span><span class="Comment">//: that are only meant to work until some layer.</span>
-<span id="L10" class="LineNr">10 </span>
-<span id="L11" class="LineNr">11 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L12" class="LineNr">12 </span><span class="Normal">typedef</span> <span class="Normal">void</span> <span class="Delimiter">(</span>*test_fn<span class="Delimiter">)(</span><span class="Normal">void</span><span class="Delimiter">);</span>
-<span id="L13" class="LineNr">13 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
-<span id="L14" class="LineNr">14 </span><span class="Comment">// move a global ahead into types that we can't generate an extern declaration for</span>
-<span id="L15" class="LineNr">15 </span><span class="Normal">const</span> <a href='002test.cc.html#L12'>test_fn</a> Tests[] = <span class="Delimiter">{</span>
-<span id="L16" class="LineNr">16 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_list&quot;</span>  <span class="Comment">// auto-generated; see 'build' script</span>
-<span id="L17" class="LineNr">17 </span><span class="Delimiter">};</span>
-<span id="L18" class="LineNr">18 </span>
-<span id="L19" class="LineNr">19 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L20" class="LineNr">20 </span><span class="Normal">bool</span> Run_tests = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L21" class="LineNr">21 </span><span class="Normal">bool</span> Passed = <span class="Constant">true</span><span class="Delimiter">;</span>  <span class="Comment">// set this to false inside any test to indicate failure</span>
-<span id="L22" class="LineNr">22 </span>
-<span id="L23" class="LineNr">23 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L24" class="LineNr">24 </span><span class="PreProc">#define CHECK(X) \</span>
-<span id="L25" class="LineNr">25 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; !(X)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L26" class="LineNr">26 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): &quot;</span><span class="PreProc"> &lt;&lt; #X &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L27" class="LineNr">27 </span><span class="PreProc">    Passed = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L28" class="LineNr">28 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L29" class="LineNr">29 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L30" class="LineNr">30 </span>
-<span id="L31" class="LineNr">31 </span><span class="PreProc">#define CHECK_EQ(X</span><span class="Delimiter">,</span><span class="PreProc"> Y) \</span>
-<span id="L32" class="LineNr">32 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; (X) != (Y)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L33" class="LineNr">33 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): &quot;</span><span class="PreProc"> &lt;&lt; #X &lt;&lt; </span><span class="Constant">&quot; == &quot;</span><span class="PreProc"> &lt;&lt; #Y &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L34" class="LineNr">34 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;  got &quot;</span><span class="PreProc"> &lt;&lt; (X) &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> BEWARE: multiple eval </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L35" class="LineNr">35 </span><span class="PreProc">    Passed = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L36" class="LineNr">36 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L37" class="LineNr">37 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L38" class="LineNr">38 </span>
-<span id="L39" class="LineNr">39 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L40" class="LineNr">40 </span>Passed = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L41" class="LineNr">41 </span>
-<span id="L42" class="LineNr">42 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
-<span id="L43" class="LineNr">43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span> &amp;&amp; <a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;test&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L44" class="LineNr">44 </span>  Run_tests = <span class="Constant">true</span><span class="Delimiter">;</span>  --argc<span class="Delimiter">;</span>  ++argv<span class="Delimiter">;</span>  <span class="Comment">// shift 'test' out of commandline args</span>
-<span id="L45" class="LineNr">45 </span><span class="Delimiter">}</span>
-<span id="L46" class="LineNr">46 </span>
-<span id="L47" class="LineNr">47 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
-<span id="L48" class="LineNr">48 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr">49 </span>  <span class="Comment">// Test Runs</span>
-<span id="L50" class="LineNr">50 </span>  <span class="Comment">// we run some tests and then exit; assume no state need be maintained afterward</span>
-<span id="L51" class="LineNr">51 </span>
-<span id="L52" class="LineNr">52 </span>  <span class="Normal">long</span> num_failures = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L53" class="LineNr">53 </span>  <span class="Comment">// End Test Run Initialization</span>
-<span id="L54" class="LineNr">54 </span>  <span class="Normal">time_t</span> t<span class="Delimiter">;</span>  time<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
-<span id="L55" class="LineNr">55 </span>  cerr &lt;&lt; <span class="Constant">&quot;C tests: &quot;</span> &lt;&lt; ctime<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
-<span id="L56" class="LineNr">56 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests<span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr">57 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;running .build/test_list line &quot; &lt;&lt; (i+1) &lt;&lt; '\n';</span>
-<span id="L58" class="LineNr">58 </span>    <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L59" class="LineNr">59 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Passed<span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
-<span id="L60" class="LineNr">60 </span>    <span class="Normal">else</span> ++num_failures<span class="Delimiter">;</span>
-<span id="L61" class="LineNr">61 </span>  <span class="Delimiter">}</span>
-<span id="L62" class="LineNr">62 </span>  cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L63" class="LineNr">63 </span>  <span class="Comment">// End Tests</span>
-<span id="L64" class="LineNr">64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr">65 </span>    cerr &lt;&lt; num_failures &lt;&lt; <span class="Constant">&quot; failure&quot;</span>
-<span id="L66" class="LineNr">66 </span>         &lt;&lt; <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">1</span> ? <span class="Constant">&quot;s&quot;</span> : <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span>
-<span id="L67" class="LineNr">67 </span>         &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L68" class="LineNr">68 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr">69 </span>  <span class="Delimiter">}</span>
-<span id="L70" class="LineNr">70 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><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="Delimiter">:(code)</span>
-<span id="L74" class="LineNr">74 </span><span class="Normal">void</span> <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span><span class="Normal">size_t</span> i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L75" class="LineNr">75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests<span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr">76 </span>    cerr &lt;&lt; <span class="Constant">&quot;no test &quot;</span> &lt;&lt; i &lt;&lt; <span class="cSpecial">'\n'</span><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>  <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
-<span id="L80" class="LineNr">80 </span>  <span class="Comment">// End Test Setup</span>
-<span id="L81" class="LineNr">81 </span>  <span class="Delimiter">(</span>*Tests[i]<span class="Delimiter">)();</span>
-<span id="L82" class="LineNr">82 </span>  <span class="Comment">// End Test Teardown</span>
-<span id="L83" class="LineNr">83 </span><span class="Delimiter">}</span>
-<span id="L84" class="LineNr">84 </span>
-<span id="L85" class="LineNr">85 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L86" class="LineNr">86 </span><span class="PreProc">#include </span><span class="Constant">&lt;stdlib.h&gt;</span>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: A simple test harness. To create new tests, define functions starting with</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: 'test_'. To run all tests so defined, run:</span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//:   $ ./mu test</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//:</span>
+<span id="L5" class="LineNr">  5 </span><span class="Comment">//: Every layer should include tests, and can reach into previous layers.</span>
+<span id="L6" class="LineNr">  6 </span><span class="Comment">//: However, it seems like a good idea never to reach into tests from previous</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment">//: layers. Every test should be a contract that always passes as originally</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">//: written, regardless of any later layers. Avoid writing 'temporary' tests</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment">//: that are only meant to work until some layer.</span>
+<span id="L10" class="LineNr"> 10 </span>
+<span id="L11" class="LineNr"> 11 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Normal">typedef</span> <span class="Normal">void</span> <span class="Delimiter">(</span>*test_fn<span class="Delimiter">)(</span><span class="Normal">void</span><span class="Delimiter">);</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
+<span id="L14" class="LineNr"> 14 </span><span class="Comment">// move a global ahead into types that we can't generate an extern declaration for</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Normal">const</span> <a href='002test.cc.html#L12'>test_fn</a> Tests[] = <span class="Delimiter">{</span>
+<span id="L16" class="LineNr"> 16 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_list&quot;</span>  <span class="Comment">// auto-generated; see 'build*' scripts</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">};</span>
+<span id="L18" class="LineNr"> 18 </span>
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Normal">bool</span> Run_tests =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Normal">bool</span> Passed =<span class="Constant"> true</span><span class="Delimiter">;</span>  <span class="Comment">// set this to false inside any test to indicate failure</span>
+<span id="L22" class="LineNr"> 22 </span>
+<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">#define CHECK(X) \</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; !<span class="Delimiter">(</span>X<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L26" class="LineNr"> 26 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): &quot;</span> &lt;&lt; <span class="Comment">#X &lt;&lt; '\n'; \</span>
+<span id="L27" class="LineNr"> 27 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L28" class="LineNr"> 28 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L29" class="LineNr"> 29 </span>  <span class="Delimiter">}</span>
+<span id="L30" class="LineNr"> 30 </span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment">#define CHECK_EQ(X, Y) \</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; <span class="Delimiter">(</span>X<span class="Delimiter">)</span> != <span class="Delimiter">(</span>Y<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L33" class="LineNr"> 33 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): &quot;</span> &lt;&lt; <span class="Comment">#X &lt;&lt; &quot; == &quot; &lt;&lt; #Y &lt;&lt; '\n'; \</span>
+<span id="L34" class="LineNr"> 34 </span>    cerr &lt;&lt; <span class="Constant">&quot;  got &quot;</span> &lt;&lt; <span class="Delimiter">(</span>X<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> BEWARE: multiple eval </span><span class="Comment">*/</span> \
+<span id="L35" class="LineNr"> 35 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L36" class="LineNr"> 36 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L37" class="LineNr"> 37 </span>  <span class="Delimiter">}</span>
+<span id="L38" class="LineNr"> 38 </span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L40" class="LineNr"> 40 </span>Passed =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>
+<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span> &amp;&amp; <a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;test&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L44" class="LineNr"> 44 </span>  Run_tests =<span class="Constant"> true</span><span class="Delimiter">;</span>  --argc<span class="Delimiter">;</span>  ++argv<span class="Delimiter">;</span>  <span class="Comment">// shift 'test' out of commandline args</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// Test Runs</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Comment">// we run some tests and then exit; assume no state need be maintained afterward</span>
+<span id="L51" class="LineNr"> 51 </span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">long</span> num_failures = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Comment">// End Test Run Initialization</span>
+<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">time_t</span> t<span class="Delimiter">;</span>  time<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
+<span id="L55" class="LineNr"> 55 </span>  cerr &lt;&lt; <span class="Constant">&quot;C tests: &quot;</span> &lt;&lt; ctime<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests<span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L57" class="LineNr"> 57 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;running &quot; &lt;&lt; Test_names[i] &lt;&lt; '\n';</span>
+<span id="L58" class="LineNr"> 58 </span>    <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L59" class="LineNr"> 59 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Passed<span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span>    <span class="Normal">else</span> ++num_failures<span class="Delimiter">;</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr"> 62 </span>  cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// End Tests</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L65" class="LineNr"> 65 </span>    cerr &lt;&lt; num_failures &lt;&lt; <span class="Constant">&quot; failure&quot;</span>
+<span id="L66" class="LineNr"> 66 </span>         &lt;&lt; <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">1</span> ? <span class="Constant">&quot;s&quot;</span> : <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span>
+<span id="L67" class="LineNr"> 67 </span>         &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L68" class="LineNr"> 68 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Delimiter">}</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><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="Delimiter">:(code)</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Normal">void</span> <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span><span class="Normal">size_t</span> i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests<span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L76" class="LineNr"> 76 </span>    cerr &lt;&lt; <span class="Constant">&quot;no test &quot;</span> &lt;&lt; i &lt;&lt; <span class="cSpecial">'\n'</span><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>  <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Comment">// End Test Setup</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">(</span>*Tests[i]<span class="Delimiter">)();</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Comment">// End Test Teardown</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">}</span>
+<span id="L84" class="LineNr"> 84 </span>
+<span id="L85" class="LineNr"> 85 </span><span class="Comment">//: Convenience: run a single test</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
+<span id="L87" class="LineNr"> 87 </span><span class="Comment">// Names for each element of the 'Tests' global, respectively.</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Normal">const</span> string Test_names[] = <span class="Delimiter">{</span>
+<span id="L89" class="LineNr"> 89 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_name_list&quot;</span>  <span class="Comment">// auto-generated; see 'build*' scripts</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">};</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">:(after &quot;Test Runs&quot;)</span>
+<span id="L92" class="LineNr"> 92 </span>string maybe_single_test_to_run = argv[argc-<span class="Constant">1</span>]<span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>maybe_single_test_to_run<span class="Delimiter">,</span> <span class="Constant">&quot;test_&quot;</span><span class="Delimiter">))</span>
+<span id="L94" class="LineNr"> 94 </span>  maybe_single_test_to_run<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">&quot;test_&quot;</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests<span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Test_names[i] == maybe_single_test_to_run<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L97" class="LineNr"> 97 </span>    <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L98" class="LineNr"> 98 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Passed<span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><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 id="L103" class="LineNr">103 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L104" class="LineNr">104 </span><span class="Comment">#include &lt;stdlib.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/003trace.cc.html b/html/003trace.cc.html
index caf54354..5fd1ef5d 100644
--- a/html/003trace.cc.html
+++ b/html/003trace.cc.html
@@ -22,7 +22,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -105,7 +104,7 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr"> 45 </span><span class="Comment">//:</span>
 <span id="L46" class="LineNr"> 46 </span><span class="Comment">//: Between layers and domain-driven testing, programming starts to look like a</span>
 <span id="L47" class="LineNr"> 47 </span><span class="Comment">//: fundamentally different activity. Instead of a) superficial, b) local rules</span>
-<span id="L48" class="LineNr"> 48 </span><span class="Comment">//: on c) code [like say <a href="http://blog.bbv.ch/2013/06/05/clean-code-cheat-sheet">http://blog.bbv.ch/2013/06/05/clean-code-cheat-sheet</a></span>
+<span id="L48" class="LineNr"> 48 </span><span class="Comment">//: on c) code [like say <a href="http://blog.bbv.ch/2013/06/05/clean-code-cheat-sheet">http://blog.bbv.ch/2013/06/05/clean-code-cheat-sheet</a>],</span>
 <span id="L49" class="LineNr"> 49 </span><span class="Comment">//: we allow programmers to engage with the a) deep, b) global structure of the</span>
 <span id="L50" class="LineNr"> 50 </span><span class="Comment">//: c) domain. If you can systematically track discontinuities in the domain,</span>
 <span id="L51" class="LineNr"> 51 </span><span class="Comment">//: you don't care if the code used gotos as long as it passed the tests. If</span>
@@ -137,341 +136,361 @@ if ('onhashchange' in window) {
 <span id="L77" class="LineNr"> 77 </span><span class="Delimiter">};</span>
 <span id="L78" class="LineNr"> 78 </span>
 <span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Normal">bool</span> Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L81" class="LineNr"> 81 </span><span class="Normal">bool</span> Dump_trace = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L82" class="LineNr"> 82 </span>string Dump_label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Normal">bool</span> Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, don't print even error trace lines to screen</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Normal">bool</span> Dump_trace =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, print trace lines to screen</span>
+<span id="L82" class="LineNr"> 82 </span>string Dump_label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// if set, print trace lines matching a single label to screen</span>
 <span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L84" class="LineNr"> 84 </span>Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L85" class="LineNr"> 85 </span>Dump_trace = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span>Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>Dump_trace =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L86" class="LineNr"> 86 </span>Dump_label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
 <span id="L87" class="LineNr"> 87 </span>
-<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L89" class="LineNr"> 89 </span><span class="Comment">// Pre-define some global constants that trace_stream needs to know about.</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Comment">// Since they're in the Types section, they'll be included in any cleaved</span>
-<span id="L91" class="LineNr"> 91 </span><span class="Comment">// compilation units. So no extern linkage.</span>
-<span id="L92" class="LineNr"> 92 </span><span class="Normal">const</span> <span class="Normal">int</span> Max_depth = <span class="Constant">9999</span><span class="Delimiter">;</span>
-<span id="L93" class="LineNr"> 93 </span><span class="Normal">const</span> <span class="Normal">int</span> Error_depth = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// definitely always print errors</span>
-<span id="L94" class="LineNr"> 94 </span><span class="Normal">const</span> <span class="Normal">int</span> App_depth = <span class="Constant">2</span><span class="Delimiter">;</span>  <span class="Comment">// temporarily where all Mu code will trace to</span>
-<span id="L95" class="LineNr"> 95 </span>
-<span id="L96" class="LineNr"> 96 </span><span class="Normal">struct</span> trace_stream <span class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>  vector&lt;trace_line&gt; past_lines<span class="Delimiter">;</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Comment">// accumulator for current line</span>
-<span id="L99" class="LineNr"> 99 </span>  ostringstream* curr_stream<span class="Delimiter">;</span>
-<span id="L100" class="LineNr">100 </span>  string curr_label<span class="Delimiter">;</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Normal">int</span> curr_depth<span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Normal">int</span> callstack_depth<span class="Delimiter">;</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Normal">int</span> collect_depth<span class="Delimiter">;</span>
-<span id="L104" class="LineNr">104 </span>  ofstream null_stream<span class="Delimiter">;</span>  <span class="Comment">// never opens a file, so writes silently fail</span>
-<span id="L105" class="LineNr">105 </span>  trace_stream<span class="Delimiter">()</span> :curr_stream<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> curr_depth<span class="Delimiter">(</span>Max_depth<span class="Delimiter">),</span> callstack_depth<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> collect_depth<span class="Delimiter">(</span>Max_depth<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L106" class="LineNr">106 </span>  <a href='003trace.cc.html#L106'>~trace_stream</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr_stream<span class="Delimiter">)</span> <span class="Normal">delete</span> curr_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L107" class="LineNr">107 </span>
-<span id="L108" class="LineNr">108 </span>  ostream&amp; stream<span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L109" class="LineNr">109 </span>    <span class="Identifier">return</span> stream<span class="Delimiter">(</span>Max_depth<span class="Delimiter">,</span> label<span class="Delimiter">);</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Delimiter">}</span>
-<span id="L111" class="LineNr">111 </span>
-<span id="L112" class="LineNr">112 </span>  ostream&amp; stream<span class="Delimiter">(</span><span class="Normal">int</span> depth<span class="Delimiter">,</span> string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L113" class="LineNr">113 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>depth &gt; collect_depth<span class="Delimiter">)</span> <span class="Identifier">return</span> null_stream<span class="Delimiter">;</span>
-<span id="L114" class="LineNr">114 </span>    curr_stream = <span class="Normal">new</span> ostringstream<span class="Delimiter">;</span>
-<span id="L115" class="LineNr">115 </span>    curr_label = label<span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>    curr_depth = depth<span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>    <span class="Identifier">return</span> *curr_stream<span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Delimiter">}</span>
-<span id="L119" class="LineNr">119 </span>
-<span id="L120" class="LineNr">120 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L121" class="LineNr">121 </span>    ofstream fout<span class="Delimiter">(</span><span class="Constant">&quot;last_run&quot;</span><span class="Delimiter">);</span>
-<span id="L122" class="LineNr">122 </span>    fout &lt;&lt; <a href='003trace.cc.html#L149'>readable_contents</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L123" class="LineNr">123 </span>    fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Delimiter">}</span>
-<span id="L125" class="LineNr">125 </span>
-<span id="L126" class="LineNr">126 </span>  <span class="Comment">// be sure to call this before messing with curr_stream or curr_label</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">();</span>
-<span id="L128" class="LineNr">128 </span>  <span class="Comment">// useful for debugging</span>
-<span id="L129" class="LineNr">129 </span>  string <a href='003trace.cc.html#L149'>readable_contents</a><span class="Delimiter">(</span>string label<span class="Delimiter">);</span>  <span class="Comment">// empty label = show everything</span>
-<span id="L130" class="LineNr">130 </span><span class="Delimiter">};</span>
-<span id="L131" class="LineNr">131 </span>
-<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(code)</span>
-<span id="L133" class="LineNr">133 </span><span class="Normal">void</span> trace_stream::<a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L135" class="LineNr">135 </span>  string curr_contents = curr_stream<span class="Delimiter">-&gt;</span>str<span class="Delimiter">();</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>    past_lines<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span>curr_depth<span class="Delimiter">,</span> <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>curr_label<span class="Delimiter">),</span> curr_contents<span class="Delimiter">));</span>  <span class="Comment">// preserve indent in contents</span>
-<span id="L138" class="LineNr">138 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>!Hide_errors &amp;&amp; curr_label == <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span>
-<span id="L139" class="LineNr">139 </span>        || Dump_trace
-<span id="L140" class="LineNr">140 </span>        || <span class="Delimiter">(</span>!Dump_label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; curr_label == Dump_label<span class="Delimiter">))</span>
-<span id="L141" class="LineNr">141 </span>      cerr &lt;&lt; curr_label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr_contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Delimiter">}</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Normal">delete</span> curr_stream<span class="Delimiter">;</span>
-<span id="L144" class="LineNr">144 </span>  curr_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  curr_label<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L146" class="LineNr">146 </span>  curr_depth = Max_depth<span class="Delimiter">;</span>
-<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Comment">//: Support for tracing an entire run.</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Comment">//: Traces can have a lot of overhead, so only turn them on when asked.</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--trace&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  Save_trace =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">}</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L96" class="LineNr"> 96 </span>  cerr &lt;&lt; <span class="Constant">&quot;initializing <a href='003trace.cc.html#L190'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>  Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(code)</span>
+<span id="L100" class="LineNr">100 </span><span class="Normal">void</span> <a href='003trace.cc.html#L100'>cleanup_main</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span>
+<span id="L103" class="LineNr">103 </span>    Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>save</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">}</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L108" class="LineNr">108 </span>atexit<span class="Delimiter">(</span><a href='003trace.cc.html#L100'>cleanup_main</a><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">// Pre-define some global constants that trace_stream needs to know about.</span>
+<span id="L112" class="LineNr">112 </span><span class="Comment">// Since they're in the Types section, they'll be included in any cleaved</span>
+<span id="L113" class="LineNr">113 </span><span class="Comment">// compilation units. So no extern linkage.</span>
+<span id="L114" class="LineNr">114 </span><span class="Normal">const</span> <span class="Normal">int</span> Max_depth = <span class="Constant">9999</span><span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span><span class="Normal">const</span> <span class="Normal">int</span> Error_depth = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// definitely always print errors</span>
+<span id="L116" class="LineNr">116 </span><span class="Normal">const</span> <span class="Normal">int</span> App_depth = <span class="Constant">2</span><span class="Delimiter">;</span>  <span class="Comment">// temporarily where all Mu code will trace to</span>
+<span id="L117" class="LineNr">117 </span>
+<span id="L118" class="LineNr">118 </span><span class="Normal">struct</span> trace_stream <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>  vector&lt;trace_line&gt; past_lines<span class="Delimiter">;</span>
+<span id="L120" class="LineNr">120 </span>  <span class="Comment">// accumulator for current line</span>
+<span id="L121" class="LineNr">121 </span>  ostringstream* curr_stream<span class="Delimiter">;</span>
+<span id="L122" class="LineNr">122 </span>  string curr_label<span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">int</span> curr_depth<span class="Delimiter">;</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Normal">int</span> callstack_depth<span class="Delimiter">;</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Normal">int</span> collect_depth<span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  ofstream<span class="Constant"> null</span>_stream<span class="Delimiter">;</span>  <span class="Comment">// never opens a file, so writes silently fail</span>
+<span id="L127" class="LineNr">127 </span>  trace_stream<span class="Delimiter">()</span> :curr_stream<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> curr_depth<span class="Delimiter">(</span>Max_depth<span class="Delimiter">),</span> callstack_depth<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> collect_depth<span class="Delimiter">(</span>Max_depth<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L128" class="LineNr">128 </span>  <a href='003trace.cc.html#L128'>~trace_stream</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span>curr_stream<span class="Delimiter">)</span> <span class="Normal">delete</span> curr_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span>  ostream&amp; stream<span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L131" class="LineNr">131 </span>    <span class="Identifier">return</span> stream<span class="Delimiter">(</span>Max_depth<span class="Delimiter">,</span> label<span class="Delimiter">);</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span>
+<span id="L134" class="LineNr">134 </span>  ostream&amp; stream<span class="Delimiter">(</span><span class="Normal">int</span> depth<span class="Delimiter">,</span> string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>depth &gt; collect_depth<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> null</span>_stream<span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span>    curr_stream = <span class="Normal">new</span> ostringstream<span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>    curr_label = label<span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span>    curr_depth = depth<span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>    <span class="Identifier">return</span> *curr_stream<span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>
+<span id="L142" class="LineNr">142 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L142'>save</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L143" class="LineNr">143 </span>    cerr &lt;&lt; <span class="Constant">&quot;saving <a href='003trace.cc.html#L190'>trace</a> to 'last_run'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L144" class="LineNr">144 </span>    ofstream fout<span class="Delimiter">(</span><span class="Constant">&quot;last_run&quot;</span><span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>    fout &lt;&lt; <a href='003trace.cc.html#L172'>readable_contents</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L146" class="LineNr">146 </span>    fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
 <span id="L148" class="LineNr">148 </span>
-<span id="L149" class="LineNr">149 </span>string trace_stream::<a href='003trace.cc.html#L149'>readable_contents</a><span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L150" class="LineNr">150 </span>  ostringstream output<span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span>  label = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L153" class="LineNr">153 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L154" class="LineNr">154 </span>      output &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>depth &lt;&lt; <span class="Constant">' '</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>    <span class="Delimiter">}</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Identifier">return</span> output<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L157" class="LineNr">157 </span><span class="Delimiter">}</span>
-<span id="L158" class="LineNr">158 </span>
-<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L160" class="LineNr">160 </span>trace_stream* Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L161" class="LineNr">161 </span><span class="Normal">int</span> Trace_errors = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// used only when Trace_stream is NULL</span>
-<span id="L162" class="LineNr">162 </span>
-<span id="L163" class="LineNr">163 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L164" class="LineNr">164 </span><span class="PreProc">#define CLEAR_TRACE  </span><span class="Normal">delete</span><span class="PreProc"> Trace_stream</span><span class="Delimiter">,</span><span class="PreProc"> Trace_stream = </span><span class="Normal">new</span><span class="PreProc"> trace_stream</span><span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="Comment">// Top-level helper. IMPORTANT: can't nest</span>
-<span id="L167" class="LineNr">167 </span><span class="PreProc">#define trace(</span><span class="Delimiter">...</span><span class="PreProc">)  !Trace_stream ? cerr </span><span class="Comment">/*</span><span class="Comment">print nothing</span><span class="Comment">*/</span><span class="PreProc"> : Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">stream(__VA_ARGS__)</span>
-<span id="L168" class="LineNr">168 </span>
-<span id="L169" class="LineNr">169 </span><span class="Comment">// Just for debugging; 'git log' should never show any calls to 'dbg'.</span>
-<span id="L170" class="LineNr">170 </span><span class="PreProc">#define dbg trace(</span><span class="Constant">0</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">&quot;a&quot;</span><span class="PreProc">)</span>
-<span id="L171" class="LineNr">171 </span><span class="PreProc">#define DUMP(label)  </span><span class="Normal">if</span><span class="PreProc"> (Trace_stream) cerr &lt;&lt; Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">readable_contents(label)</span><span class="Delimiter">;</span>
-<span id="L172" class="LineNr">172 </span>
-<span id="L173" class="LineNr">173 </span><span class="Comment">// Errors are a special layer.</span>
-<span id="L174" class="LineNr">174 </span><span class="PreProc">#define raise  (!Trace_stream ? (scroll_to_bottom_and_close_console()</span><span class="Delimiter">,</span><span class="PreProc">++Trace_errors</span><span class="Delimiter">,</span><span class="PreProc">cerr) </span><span class="Comment">/*</span><span class="Comment">do print</span><span class="Comment">*/</span><span class="PreProc"> : Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">stream(Error_depth</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">&quot;error&quot;</span><span class="PreProc">))</span>
-<span id="L175" class="LineNr">175 </span><span class="Comment">// If we aren't yet sure how to deal with some corner case, use assert_for_now</span>
-<span id="L176" class="LineNr">176 </span><span class="Comment">// to indicate that it isn't an inviolable invariant.</span>
-<span id="L177" class="LineNr">177 </span><span class="PreProc">#define assert_for_now assert</span>
-<span id="L178" class="LineNr">178 </span>
-<span id="L179" class="LineNr">179 </span><span class="Comment">//: Automatically close the console in some situations.</span>
-<span id="L180" class="LineNr">180 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L181" class="LineNr">181 </span>atexit<span class="Delimiter">(</span><a href='003trace.cc.html#L183'>scroll_to_bottom_and_close_console</a><span class="Delimiter">);</span>
-<span id="L182" class="LineNr">182 </span><span class="Delimiter">:(code)</span>
-<span id="L183" class="LineNr">183 </span><span class="Normal">void</span> <a href='003trace.cc.html#L183'>scroll_to_bottom_and_close_console</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L184" class="LineNr">184 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L185" class="LineNr">185 </span>  <span class="Comment">// leave the screen in a relatively clean state</span>
-<span id="L186" class="LineNr">186 </span>  tb_set_cursor<span class="Delimiter">(</span>tb_width<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">,</span> tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L187" class="LineNr">187 </span>  cout &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\r\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L188" class="LineNr">188 </span>  tb_shutdown<span class="Delimiter">();</span>
-<span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
-<span id="L190" class="LineNr">190 </span>
-<span id="L191" class="LineNr">191 </span><span class="Comment">// Inside tests, fail any tests that displayed (unexpected) errors.</span>
-<span id="L192" class="LineNr">192 </span><span class="Comment">// Expected errors in tests should always be hidden and silently checked for.</span>
-<span id="L193" class="LineNr">193 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
-<span id="L194" class="LineNr">194 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; !Hide_errors &amp;&amp; <a href='003trace.cc.html#L198'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L195" class="LineNr">195 </span>  Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
-<span id="L197" class="LineNr">197 </span><span class="Delimiter">:(code)</span>
-<span id="L198" class="LineNr">198 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L198'>trace_contains_errors</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L199" class="LineNr">199 </span>  <span class="Identifier">return</span> Trace_errors &gt; <span class="Constant">0</span> || trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">}</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// be sure to call this before messing with curr_stream or curr_label</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">();</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Comment">// useful for debugging</span>
+<span id="L152" class="LineNr">152 </span>  string <a href='003trace.cc.html#L172'>readable_contents</a><span class="Delimiter">(</span>string label<span class="Delimiter">);</span>  <span class="Comment">// empty label = show everything</span>
+<span id="L153" class="LineNr">153 </span><span class="Delimiter">};</span>
+<span id="L154" class="LineNr">154 </span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(code)</span>
+<span id="L156" class="LineNr">156 </span><span class="Normal">void</span> trace_stream::<a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>  string curr_contents = curr_stream<span class="Delimiter">-&gt;</span>str<span class="Delimiter">();</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span>    past_lines<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span>curr_depth<span class="Delimiter">,</span> <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>curr_label<span class="Delimiter">),</span> curr_contents<span class="Delimiter">));</span>  <span class="Comment">// preserve indent in contents</span>
+<span id="L161" class="LineNr">161 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>!Hide_errors &amp;&amp; curr_label == <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span>
+<span id="L162" class="LineNr">162 </span>        || Dump_trace
+<span id="L163" class="LineNr">163 </span>        || <span class="Delimiter">(</span>!Dump_label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; curr_label == Dump_label<span class="Delimiter">))</span>
+<span id="L164" class="LineNr">164 </span>      cerr &lt;&lt; curr_label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr_contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Delimiter">}</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Normal">delete</span> curr_stream<span class="Delimiter">;</span>
+<span id="L167" class="LineNr">167 </span>  curr_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span>  curr_label<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L169" class="LineNr">169 </span>  curr_depth = Max_depth<span class="Delimiter">;</span>
+<span id="L170" class="LineNr">170 </span><span class="Delimiter">}</span>
+<span id="L171" class="LineNr">171 </span>
+<span id="L172" class="LineNr">172 </span>string trace_stream::<a href='003trace.cc.html#L172'>readable_contents</a><span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>  ostringstream output<span class="Delimiter">;</span>
+<span id="L174" class="LineNr">174 </span>  label = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L176" class="LineNr">176 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L177" class="LineNr">177 </span>      output &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>depth &lt;&lt; <span class="Constant">' '</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L178" class="LineNr">178 </span>    <span class="Delimiter">}</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Identifier">return</span> output<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
+<span id="L181" class="LineNr">181 </span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L183" class="LineNr">183 </span>trace_stream* Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">int</span> Trace_errors = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// used only when Trace_stream is NULL</span>
+<span id="L185" class="LineNr">185 </span>
+<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L187" class="LineNr">187 </span><span class="Comment">#define CLEAR_TRACE  delete Trace_stream, Trace_stream = new trace_stream;</span>
+<span id="L188" class="LineNr">188 </span>
+<span id="L189" class="LineNr">189 </span><span class="Comment">// Top-level helper. IMPORTANT: can't nest</span>
+<span id="L190" class="LineNr">190 </span><span class="Comment">#define trace(...)  !Trace_stream ? cerr /*print nothing*/ : Trace_stream-&gt;stream(__VA_ARGS__)</span>
+<span id="L191" class="LineNr">191 </span>
+<span id="L192" class="LineNr">192 </span><span class="Comment">// Just for debugging; 'git log' should never show any calls to 'dbg'.</span>
+<span id="L193" class="LineNr">193 </span><span class="Comment">#define dbg trace(0, &quot;a&quot;)</span>
+<span id="L194" class="LineNr">194 </span><span class="Comment">#define DUMP(label)  if (Trace_stream) cerr &lt;&lt; Trace_stream-&gt;readable_contents(label);</span>
+<span id="L195" class="LineNr">195 </span>
+<span id="L196" class="LineNr">196 </span><span class="Comment">// Errors are a special layer.</span>
+<span id="L197" class="LineNr">197 </span><span class="Comment">#define raise  (!Trace_stream ? (scroll_to_bottom_and_close_console(),++Trace_errors,cerr) /*do print*/ : Trace_stream-&gt;stream(Error_depth, &quot;error&quot;))</span>
+<span id="L198" class="LineNr">198 </span><span class="Comment">// If we aren't yet sure how to deal with some corner case, use assert_for_now</span>
+<span id="L199" class="LineNr">199 </span><span class="Comment">// to indicate that it isn't an inviolable invariant.</span>
+<span id="L200" class="LineNr">200 </span><span class="Comment">#define assert_for_now assert</span>
 <span id="L201" class="LineNr">201 </span>
-<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L203" class="LineNr">203 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L203'>end</a> <span class="Delimiter">{};</span>
-<span id="L204" class="LineNr">204 </span><span class="Delimiter">:(code)</span>
-<span id="L205" class="LineNr">205 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L259'>vestigial</a> <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L211" class="LineNr">211 </span><span class="Normal">bool</span> Save_trace = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>
-<span id="L213" class="LineNr">213 </span><span class="Comment">// Trace_stream is a resource, lease_tracer uses RAII to manage it.</span>
-<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L215" class="LineNr">215 </span><span class="Normal">struct</span> lease_tracer <span class="Delimiter">{</span>
-<span id="L216" class="LineNr">216 </span>  lease_tracer<span class="Delimiter">();</span>
-<span id="L217" class="LineNr">217 </span>  <a href='003trace.cc.html#L221'>~lease_tracer</a><span class="Delimiter">();</span>
-<span id="L218" class="LineNr">218 </span><span class="Delimiter">};</span>
-<span id="L219" class="LineNr">219 </span><span class="Delimiter">:(code)</span>
-<span id="L220" class="LineNr">220 </span>lease_tracer::lease_tracer<span class="Delimiter">()</span> <span class="Delimiter">{</span> Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L221" class="LineNr">221 </span>lease_tracer::<a href='003trace.cc.html#L221'>~lease_tracer</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// in case tests close Trace_stream</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">,</span> Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L225" class="LineNr">225 </span><span class="Delimiter">}</span>
-<span id="L226" class="LineNr">226 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L227" class="LineNr">227 </span><span class="PreProc">#define START_TRACING_UNTIL_END_OF_SCOPE  lease_tracer leased_tracer</span><span class="Delimiter">;</span>
-<span id="L228" class="LineNr">228 </span><span class="Delimiter">:(before &quot;End Test Setup&quot;)</span>
-<span id="L229" class="LineNr">229 </span><a href='003trace.cc.html#L227'>START_TRACING_UNTIL_END_OF_SCOPE</a>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L232" class="LineNr">232 </span><span class="PreProc">#define CHECK_TRACE_CONTENTS(</span><span class="Delimiter">...</span><span class="PreProc">)  check_trace_contents(__FUNCTION__</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">__FILE__</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">__LINE__</span><span class="Delimiter">,</span><span class="PreProc"> __VA_ARGS__)</span>
-<span id="L233" class="LineNr">233 </span>
-<span id="L234" class="LineNr">234 </span><span class="PreProc">#define CHECK_TRACE_CONTAINS_ERRORS()  CHECK(trace_contains_errors())</span>
-<span id="L235" class="LineNr">235 </span><span class="PreProc">#define CHECK_TRACE_DOESNT_CONTAIN_ERRORS() \</span>
-<span id="L236" class="LineNr">236 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; trace_contains_errors()) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L237" class="LineNr">237 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): unexpected errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L238" class="LineNr">238 </span><span class="PreProc">    DUMP(</span><span class="Constant">&quot;error&quot;</span><span class="PreProc">)</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L239" class="LineNr">239 </span><span class="PreProc">    Passed = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L240" class="LineNr">240 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L241" class="LineNr">241 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L242" class="LineNr">242 </span>
-<span id="L243" class="LineNr">243 </span><span class="PreProc">#define CHECK_TRACE_COUNT(label</span><span class="Delimiter">,</span><span class="PreProc"> count) \</span>
-<span id="L244" class="LineNr">244 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; trace_count(label) != (count)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L245" class="LineNr">245 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): trace_count of &quot;</span><span class="PreProc"> &lt;&lt; label &lt;&lt; </span><span class="Constant">&quot; should be &quot;</span><span class="PreProc"> &lt;&lt; count &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L246" class="LineNr">246 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;  got &quot;</span><span class="PreProc"> &lt;&lt; trace_count(label) &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> multiple eval </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L247" class="LineNr">247 </span><span class="PreProc">    DUMP(label)</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L248" class="LineNr">248 </span><span class="PreProc">    Passed = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L249" class="LineNr">249 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L250" class="LineNr">250 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L251" class="LineNr">251 </span>
-<span id="L252" class="LineNr">252 </span><span class="PreProc">#define CHECK_TRACE_DOESNT_CONTAIN(</span><span class="Delimiter">...</span><span class="PreProc">)  CHECK(trace_doesnt_contain(__VA_ARGS__))</span>
-<span id="L253" class="LineNr">253 </span>
-<span id="L254" class="LineNr">254 </span><span class="Delimiter">:(code)</span>
-<span id="L255" class="LineNr">255 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L255'>check_trace_contents</a><span class="Delimiter">(</span>string FUNCTION<span class="Delimiter">,</span> string <span class="Normal">FILE</span><span class="Delimiter">,</span> <span class="Normal">int</span> LINE<span class="Delimiter">,</span> string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L258" class="LineNr">258 </span>  vector&lt;string&gt; expected_lines = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;^D&quot;</span><span class="Delimiter">);</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
-<span id="L261" class="LineNr">261 </span>    ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L263" class="LineNr">263 </span>  string label<span class="Delimiter">,</span> contents<span class="Delimiter">;</span>
-<span id="L264" class="LineNr">264 </span>  <a href='003trace.cc.html#L287'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L266" class="LineNr">266 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L267" class="LineNr">267 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents != <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L268" class="LineNr">268 </span>    ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L269" class="LineNr">269 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
-<span id="L270" class="LineNr">270 </span>      ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L271" class="LineNr">271 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span>    <a href='003trace.cc.html#L287'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Delimiter">}</span>
-<span id="L274" class="LineNr">274 </span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L300'>line_exists_anywhere</a><span class="Delimiter">(</span>label<span class="Delimiter">,</span> contents<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L276" class="LineNr">276 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): line [&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;] out of order in <a href='003trace.cc.html#L167'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L277" class="LineNr">277 </span>    <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L278" class="LineNr">278 </span>  <span class="Delimiter">}</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L280" class="LineNr">280 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): missing [&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L167'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L281" class="LineNr">281 </span>    <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L282" class="LineNr">282 </span>  <span class="Delimiter">}</span>
-<span id="L283" class="LineNr">283 </span>  Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L285" class="LineNr">285 </span><span class="Delimiter">}</span>
-<span id="L286" class="LineNr">286 </span>
-<span id="L287" class="LineNr">287 </span><span class="Normal">void</span> <a href='003trace.cc.html#L287'>split_label_contents</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> string* label<span class="Delimiter">,</span> string* contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L288" class="LineNr">288 </span>  <span class="Normal">static</span> <span class="Normal">const</span> string delim<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Normal">size_t</span> pos = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L290" class="LineNr">290 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>pos == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L291" class="LineNr">291 </span>    *label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L292" class="LineNr">292 </span>    *contents = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L293" class="LineNr">293 </span>  <span class="Delimiter">}</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L295" class="LineNr">295 </span>    *label = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> pos<span class="Delimiter">));</span>
-<span id="L296" class="LineNr">296 </span>    *contents = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>pos+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">)));</span>
-<span id="L297" class="LineNr">297 </span>  <span class="Delimiter">}</span>
-<span id="L298" class="LineNr">298 </span><span class="Delimiter">}</span>
-<span id="L299" class="LineNr">299 </span>
-<span id="L300" class="LineNr">300 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L300'>line_exists_anywhere</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; label<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L301" class="LineNr">301 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L302" class="LineNr">302 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L303" class="LineNr">303 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents == <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L202" class="LineNr">202 </span><span class="Comment">//: Automatically close the console in some situations.</span>
+<span id="L203" class="LineNr">203 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L204" class="LineNr">204 </span>atexit<span class="Delimiter">(</span><a href='003trace.cc.html#L206'>scroll_to_bottom_and_close_console</a><span class="Delimiter">);</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(code)</span>
+<span id="L206" class="LineNr">206 </span><span class="Normal">void</span> <a href='003trace.cc.html#L206'>scroll_to_bottom_and_close_console</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L207" class="LineNr">207 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Comment">// leave the screen in a relatively clean state</span>
+<span id="L209" class="LineNr">209 </span>  tb_set_cursor<span class="Delimiter">(</span>tb_width<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">,</span> tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span>  cout &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\r\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L211" class="LineNr">211 </span>  tb_shutdown<span class="Delimiter">();</span>
+<span id="L212" class="LineNr">212 </span><span class="Delimiter">}</span>
+<span id="L213" class="LineNr">213 </span>
+<span id="L214" class="LineNr">214 </span><span class="Comment">// Inside tests, fail any tests that displayed (unexpected) errors.</span>
+<span id="L215" class="LineNr">215 </span><span class="Comment">// Expected errors in tests should always be hidden and silently checked for.</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
+<span id="L217" class="LineNr">217 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; !Hide_errors &amp;&amp; <a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L218" class="LineNr">218 </span>  Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span><span class="Delimiter">}</span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(code)</span>
+<span id="L221" class="LineNr">221 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Identifier">return</span> Trace_errors &gt; <span class="Constant">0</span> || trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L223" class="LineNr">223 </span><span class="Delimiter">}</span>
+<span id="L224" class="LineNr">224 </span>
+<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L226" class="LineNr">226 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L226'>end</a> <span class="Delimiter">{};</span>
+<span id="L227" class="LineNr">227 </span><span class="Delimiter">:(code)</span>
+<span id="L228" class="LineNr">228 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='003trace.cc.html#L226'>end</a> <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">();</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span>
+<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L234" class="LineNr">234 </span><span class="Normal">bool</span> Save_trace =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, write out trace to disk</span>
+<span id="L235" class="LineNr">235 </span>
+<span id="L236" class="LineNr">236 </span><span class="Comment">// Trace_stream is a resource, lease_tracer uses RAII to manage it.</span>
+<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L238" class="LineNr">238 </span><span class="Normal">struct</span> lease_tracer <span class="Delimiter">{</span>
+<span id="L239" class="LineNr">239 </span>  lease_tracer<span class="Delimiter">();</span>
+<span id="L240" class="LineNr">240 </span>  <a href='003trace.cc.html#L244'>~lease_tracer</a><span class="Delimiter">();</span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">};</span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(code)</span>
+<span id="L243" class="LineNr">243 </span>lease_tracer::lease_tracer<span class="Delimiter">()</span> <span class="Delimiter">{</span> Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L244" class="LineNr">244 </span>lease_tracer::<a href='003trace.cc.html#L244'>~lease_tracer</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>save</a><span class="Delimiter">();</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">,</span> Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span><span class="Delimiter">}</span>
+<span id="L248" class="LineNr">248 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L249" class="LineNr">249 </span><span class="Comment">#define START_TRACING_UNTIL_END_OF_SCOPE  lease_tracer leased_tracer;</span>
+<span id="L250" class="LineNr">250 </span><span class="Delimiter">:(before &quot;End Test Setup&quot;)</span>
+<span id="L251" class="LineNr">251 </span><a href='003trace.cc.html#L249'>START_TRACING_UNTIL_END_OF_SCOPE</a>
+<span id="L252" class="LineNr">252 </span>
+<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L254" class="LineNr">254 </span><span class="Comment">#define CHECK_TRACE_CONTENTS(...)  check_trace_contents(__FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)</span>
+<span id="L255" class="LineNr">255 </span>
+<span id="L256" class="LineNr">256 </span><span class="Comment">#define CHECK_TRACE_CONTAINS_ERRORS()  CHECK(trace_contains_errors())</span>
+<span id="L257" class="LineNr">257 </span><span class="Comment">#define CHECK_TRACE_DOESNT_CONTAIN_ERRORS() \</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; <a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span> \
+<span id="L259" class="LineNr">259 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): unexpected errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span> \
+<span id="L260" class="LineNr">260 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">);</span> \
+<span id="L261" class="LineNr">261 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L262" class="LineNr">262 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span> \
+<span id="L263" class="LineNr">263 </span>  <span class="Delimiter">}</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Comment">#define CHECK_TRACE_COUNT(label, count) \</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; trace_count<span class="Delimiter">(</span>label<span class="Delimiter">)</span> != <span class="Delimiter">(</span>count<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L267" class="LineNr">267 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): trace_count of &quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot; should be &quot;</span> &lt;&lt; count &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span> \
+<span id="L268" class="LineNr">268 </span>    cerr &lt;&lt; <span class="Constant">&quot;  got &quot;</span> &lt;&lt; trace_count<span class="Delimiter">(</span>label<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> multiple eval </span><span class="Comment">*/</span> \
+<span id="L269" class="LineNr">269 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span> \
+<span id="L270" class="LineNr">270 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L271" class="LineNr">271 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L272" class="LineNr">272 </span>  <span class="Delimiter">}</span>
+<span id="L273" class="LineNr">273 </span>
+<span id="L274" class="LineNr">274 </span><span class="Comment">#define CHECK_TRACE_DOESNT_CONTAIN(...)  CHECK(trace_doesnt_contain(__VA_ARGS__))</span>
+<span id="L275" class="LineNr">275 </span>
+<span id="L276" class="LineNr">276 </span><span class="Delimiter">:(code)</span>
+<span id="L277" class="LineNr">277 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L277'>check_trace_contents</a><span class="Delimiter">(</span>string FUNCTION<span class="Delimiter">,</span> string <span class="Normal">FILE</span><span class="Delimiter">,</span> <span class="Normal">int</span> LINE<span class="Delimiter">,</span> string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L280" class="LineNr">280 </span>  vector&lt;string&gt; expected_lines = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;^D&quot;</span><span class="Delimiter">);</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L282" class="LineNr">282 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
+<span id="L283" class="LineNr">283 </span>    ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L284" class="LineNr">284 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L285" class="LineNr">285 </span>  string label<span class="Delimiter">,</span> contents<span class="Delimiter">;</span>
+<span id="L286" class="LineNr">286 </span>  <a href='003trace.cc.html#L309'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L289" class="LineNr">289 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents != <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L290" class="LineNr">290 </span>    ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L291" class="LineNr">291 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
+<span id="L292" class="LineNr">292 </span>      ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L293" class="LineNr">293 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L294" class="LineNr">294 </span>    <a href='003trace.cc.html#L309'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
+<span id="L295" class="LineNr">295 </span>  <span class="Delimiter">}</span>
+<span id="L296" class="LineNr">296 </span>
+<span id="L297" class="LineNr">297 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L322'>line_exists_anywhere</a><span class="Delimiter">(</span>label<span class="Delimiter">,</span> contents<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L298" class="LineNr">298 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): line [&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;] out of order in <a href='003trace.cc.html#L190'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L299" class="LineNr">299 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Delimiter">}</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L302" class="LineNr">302 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): missing [&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L190'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L303" class="LineNr">303 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
 <span id="L304" class="LineNr">304 </span>  <span class="Delimiter">}</span>
-<span id="L305" class="LineNr">305 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L306" class="LineNr">306 </span><span class="Delimiter">}</span>
-<span id="L307" class="LineNr">307 </span>
-<span id="L308" class="LineNr">308 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span>label<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L310" class="LineNr">310 </span><span class="Delimiter">}</span>
-<span id="L311" class="LineNr">311 </span>
-<span id="L312" class="LineNr">312 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L313" class="LineNr">313 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L314" class="LineNr">314 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L316" class="LineNr">316 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L317" class="LineNr">317 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line == <span class="Constant">&quot;&quot;</span> || <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>line<span class="Delimiter">)</span> == <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span>
-<span id="L318" class="LineNr">318 </span>        ++result<span class="Delimiter">;</span>
-<span id="L319" class="LineNr">319 </span>    <span class="Delimiter">}</span>
-<span id="L320" class="LineNr">320 </span>  <span class="Delimiter">}</span>
-<span id="L321" class="LineNr">321 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L322" class="LineNr">322 </span><span class="Delimiter">}</span>
-<span id="L323" class="LineNr">323 </span>
-<span id="L324" class="LineNr">324 </span><span class="Normal">int</span> <a href='003trace.cc.html#L324'>trace_count_prefix</a><span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string prefix<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L325" class="LineNr">325 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L326" class="LineNr">326 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L327" class="LineNr">327 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L328" class="LineNr">328 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L329" class="LineNr">329 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">),</span> <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>prefix<span class="Delimiter">)))</span>
-<span id="L330" class="LineNr">330 </span>        ++result<span class="Delimiter">;</span>
-<span id="L331" class="LineNr">331 </span>    <span class="Delimiter">}</span>
-<span id="L332" class="LineNr">332 </span>  <span class="Delimiter">}</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L334" class="LineNr">334 </span><span class="Delimiter">}</span>
-<span id="L335" class="LineNr">335 </span>
-<span id="L336" class="LineNr">336 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span>label<span class="Delimiter">,</span> line<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L338" class="LineNr">338 </span><span class="Delimiter">}</span>
-<span id="L339" class="LineNr">339 </span>
-<span id="L340" class="LineNr">340 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L341" class="LineNr">341 </span>  vector&lt;string&gt; tmp = <a href='003trace.cc.html#L360'>split_first</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
-<span id="L342" class="LineNr">342 </span>  <span class="Identifier">return</span> trace_doesnt_contain<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
-<span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
-<span id="L344" class="LineNr">344 </span>
-<span id="L345" class="LineNr">345 </span>vector&lt;string&gt; <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L346" class="LineNr">346 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">size_t</span> begin=<span class="Constant">0</span><span class="Delimiter">,</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L348" class="LineNr">348 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L349" class="LineNr">349 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L203'>end</a> == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L350" class="LineNr">350 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> string::npos<span class="Delimiter">));</span>
-<span id="L351" class="LineNr">351 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L352" class="LineNr">352 </span>    <span class="Delimiter">}</span>
-<span id="L353" class="LineNr">353 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> end-begin<span class="Delimiter">));</span>
-<span id="L354" class="LineNr">354 </span>    begin = end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L355" class="LineNr">355 </span>    <a href='003trace.cc.html#L203'>end</a> = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">,</span> begin<span class="Delimiter">);</span>
-<span id="L356" class="LineNr">356 </span>  <span class="Delimiter">}</span>
-<span id="L357" class="LineNr">357 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L358" class="LineNr">358 </span><span class="Delimiter">}</span>
-<span id="L359" class="LineNr">359 </span>
-<span id="L360" class="LineNr">360 </span>vector&lt;string&gt; <a href='003trace.cc.html#L360'>split_first</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L361" class="LineNr">361 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Normal">size_t</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L363" class="LineNr">363 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">));</span>
-<span id="L364" class="LineNr">364 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L203'>end</a> != string::npos<span class="Delimiter">)</span>
-<span id="L365" class="LineNr">365 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">),</span> string::npos<span class="Delimiter">));</span>
-<span id="L366" class="LineNr">366 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L367" class="LineNr">367 </span><span class="Delimiter">}</span>
-<span id="L368" class="LineNr">368 </span>
-<span id="L369" class="LineNr">369 </span>string <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L370" class="LineNr">370 </span>  string::const_iterator first = s<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L371" class="LineNr">371 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>first != s<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*first<span class="Delimiter">))</span>
-<span id="L372" class="LineNr">372 </span>    ++first<span class="Delimiter">;</span>
-<span id="L373" class="LineNr">373 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>first == s<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L374" class="LineNr">374 </span>
-<span id="L375" class="LineNr">375 </span>  string::const_iterator last = --s<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>last != s<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*last<span class="Delimiter">))</span>
-<span id="L377" class="LineNr">377 </span>    --last<span class="Delimiter">;</span>
-<span id="L378" class="LineNr">378 </span>  ++last<span class="Delimiter">;</span>
-<span id="L379" class="LineNr">379 </span>  <span class="Identifier">return</span> string<span class="Delimiter">(</span>first<span class="Delimiter">,</span> last<span class="Delimiter">);</span>
+<span id="L305" class="LineNr">305 </span>  Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L307" class="LineNr">307 </span><span class="Delimiter">}</span>
+<span id="L308" class="LineNr">308 </span>
+<span id="L309" class="LineNr">309 </span><span class="Normal">void</span> <a href='003trace.cc.html#L309'>split_label_contents</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> string* label<span class="Delimiter">,</span> string* contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Normal">static</span> <span class="Normal">const</span> string delim<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Normal">size_t</span> pos = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L312" class="LineNr">312 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>pos == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L313" class="LineNr">313 </span>    *label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L314" class="LineNr">314 </span>    *contents = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L317" class="LineNr">317 </span>    *label = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> pos<span class="Delimiter">));</span>
+<span id="L318" class="LineNr">318 </span>    *contents = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>pos+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">)));</span>
+<span id="L319" class="LineNr">319 </span>  <span class="Delimiter">}</span>
+<span id="L320" class="LineNr">320 </span><span class="Delimiter">}</span>
+<span id="L321" class="LineNr">321 </span>
+<span id="L322" class="LineNr">322 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L322'>line_exists_anywhere</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; label<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L324" class="LineNr">324 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents == <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span><span class="Delimiter">}</span>
+<span id="L329" class="LineNr">329 </span>
+<span id="L330" class="LineNr">330 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span>label<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L332" class="LineNr">332 </span><span class="Delimiter">}</span>
+<span id="L333" class="LineNr">333 </span>
+<span id="L334" class="LineNr">334 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L337" class="LineNr">337 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L338" class="LineNr">338 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L339" class="LineNr">339 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line == <span class="Constant">&quot;&quot;</span> || <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>line<span class="Delimiter">)</span> == <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span>
+<span id="L340" class="LineNr">340 </span>        ++result<span class="Delimiter">;</span>
+<span id="L341" class="LineNr">341 </span>    <span class="Delimiter">}</span>
+<span id="L342" class="LineNr">342 </span>  <span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L344" class="LineNr">344 </span><span class="Delimiter">}</span>
+<span id="L345" class="LineNr">345 </span>
+<span id="L346" class="LineNr">346 </span><span class="Normal">int</span> <a href='003trace.cc.html#L346'>trace_count_prefix</a><span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string prefix<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L347" class="LineNr">347 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L348" class="LineNr">348 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L349" class="LineNr">349 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L350" class="LineNr">350 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>label == p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L351" class="LineNr">351 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">),</span> <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>prefix<span class="Delimiter">)))</span>
+<span id="L352" class="LineNr">352 </span>        ++result<span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>    <span class="Delimiter">}</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Delimiter">}</span>
+<span id="L355" class="LineNr">355 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L356" class="LineNr">356 </span><span class="Delimiter">}</span>
+<span id="L357" class="LineNr">357 </span>
+<span id="L358" class="LineNr">358 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string label<span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L359" class="LineNr">359 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span>label<span class="Delimiter">,</span> line<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr">360 </span><span class="Delimiter">}</span>
+<span id="L361" class="LineNr">361 </span>
+<span id="L362" class="LineNr">362 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L363" class="LineNr">363 </span>  vector&lt;string&gt; tmp = <a href='003trace.cc.html#L382'>split_first</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
+<span id="L364" class="LineNr">364 </span>  <span class="Identifier">return</span> trace_doesnt_contain<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L365" class="LineNr">365 </span><span class="Delimiter">}</span>
+<span id="L366" class="LineNr">366 </span>
+<span id="L367" class="LineNr">367 </span>vector&lt;string&gt; <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L368" class="LineNr">368 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
+<span id="L369" class="LineNr">369 </span>  <span class="Normal">size_t</span> begin=<span class="Constant">0</span><span class="Delimiter">,</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L370" class="LineNr">370 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L371" class="LineNr">371 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L226'>end</a> == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L372" class="LineNr">372 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> string::npos<span class="Delimiter">));</span>
+<span id="L373" class="LineNr">373 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L374" class="LineNr">374 </span>    <span class="Delimiter">}</span>
+<span id="L375" class="LineNr">375 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> end-begin<span class="Delimiter">));</span>
+<span id="L376" class="LineNr">376 </span>    begin = end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L377" class="LineNr">377 </span>    <a href='003trace.cc.html#L226'>end</a> = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">,</span> begin<span class="Delimiter">);</span>
+<span id="L378" class="LineNr">378 </span>  <span class="Delimiter">}</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L380" class="LineNr">380 </span><span class="Delimiter">}</span>
 <span id="L381" class="LineNr">381 </span>
-<span id="L382" class="LineNr">382 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L383" class="LineNr">383 </span><span class="PreProc">#include </span><span class="Constant">&lt;vector&gt;</span>
-<span id="L384" class="LineNr">384 </span><span class="Normal">using</span> std::vector<span class="Delimiter">;</span>
-<span id="L385" class="LineNr">385 </span><span class="PreProc">#include </span><span class="Constant">&lt;list&gt;</span>
-<span id="L386" class="LineNr">386 </span><span class="Normal">using</span> std::list<span class="Delimiter">;</span>
-<span id="L387" class="LineNr">387 </span><span class="PreProc">#include </span><span class="Constant">&lt;map&gt;</span>
-<span id="L388" class="LineNr">388 </span><span class="Normal">using</span> std::map<span class="Delimiter">;</span>
-<span id="L389" class="LineNr">389 </span><span class="PreProc">#include </span><span class="Constant">&lt;set&gt;</span>
-<span id="L390" class="LineNr">390 </span><span class="Normal">using</span> std::set<span class="Delimiter">;</span>
-<span id="L391" class="LineNr">391 </span>
-<span id="L392" class="LineNr">392 </span><span class="PreProc">#include </span><span class="Constant">&lt;sstream&gt;</span>
-<span id="L393" class="LineNr">393 </span><span class="Normal">using</span> std::istringstream<span class="Delimiter">;</span>
-<span id="L394" class="LineNr">394 </span><span class="Normal">using</span> std::ostringstream<span class="Delimiter">;</span>
-<span id="L395" class="LineNr">395 </span>
-<span id="L396" class="LineNr">396 </span><span class="PreProc">#include </span><span class="Constant">&lt;fstream&gt;</span>
-<span id="L397" class="LineNr">397 </span><span class="Normal">using</span> std::ifstream<span class="Delimiter">;</span>
-<span id="L398" class="LineNr">398 </span><span class="Normal">using</span> std::ofstream<span class="Delimiter">;</span>
-<span id="L399" class="LineNr">399 </span>
-<span id="L400" class="LineNr">400 </span><span class="PreProc">#include </span><span class="Constant">&quot;termbox/termbox.h&quot;</span>
-<span id="L401" class="LineNr">401 </span>
-<span id="L402" class="LineNr">402 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L403" class="LineNr">403 </span><span class="Comment">//: In future layers we'll use the depth field as follows:</span>
-<span id="L404" class="LineNr">404 </span><span class="Comment">//:</span>
-<span id="L405" class="LineNr">405 </span><span class="Comment">//: Errors will be depth 0.</span>
-<span id="L406" class="LineNr">406 </span><span class="Comment">//: Mu 'applications' will be able to use depths 1-100 as they like.</span>
-<span id="L407" class="LineNr">407 </span><span class="Comment">//: Primitive statements will occupy 101-9989</span>
-<span id="L408" class="LineNr">408 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Initial_callstack_depth = <span class="Constant">101</span><span class="Delimiter">;</span>
-<span id="L409" class="LineNr">409 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Max_callstack_depth = <span class="Constant">9989</span><span class="Delimiter">;</span>
-<span id="L410" class="LineNr">410 </span><span class="Comment">//: Finally, details of primitive Mu statements will occupy depth 9990-9999</span>
-<span id="L411" class="LineNr">411 </span><span class="Comment">//: (more on that later as well)</span>
-<span id="L412" class="LineNr">412 </span><span class="Comment">//:</span>
-<span id="L413" class="LineNr">413 </span><span class="Comment">//: This framework should help us hide some details at each level, mixing</span>
-<span id="L414" class="LineNr">414 </span><span class="Comment">//: static ideas like layers with the dynamic notion of call-stack depth.</span>
+<span id="L382" class="LineNr">382 </span>vector&lt;string&gt; <a href='003trace.cc.html#L382'>split_first</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L383" class="LineNr">383 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Normal">size_t</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L385" class="LineNr">385 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">));</span>
+<span id="L386" class="LineNr">386 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L226'>end</a> != string::npos<span class="Delimiter">)</span>
+<span id="L387" class="LineNr">387 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">),</span> string::npos<span class="Delimiter">));</span>
+<span id="L388" class="LineNr">388 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L389" class="LineNr">389 </span><span class="Delimiter">}</span>
+<span id="L390" class="LineNr">390 </span>
+<span id="L391" class="LineNr">391 </span>string <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L392" class="LineNr">392 </span>  string::const_iterator first = s<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
+<span id="L393" class="LineNr">393 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>first != s<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*first<span class="Delimiter">))</span>
+<span id="L394" class="LineNr">394 </span>    ++first<span class="Delimiter">;</span>
+<span id="L395" class="LineNr">395 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>first == s<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L396" class="LineNr">396 </span>
+<span id="L397" class="LineNr">397 </span>  string::const_iterator last = --s<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>last != s<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*last<span class="Delimiter">))</span>
+<span id="L399" class="LineNr">399 </span>    --last<span class="Delimiter">;</span>
+<span id="L400" class="LineNr">400 </span>  ++last<span class="Delimiter">;</span>
+<span id="L401" class="LineNr">401 </span>  <span class="Identifier">return</span> string<span class="Delimiter">(</span>first<span class="Delimiter">,</span> last<span class="Delimiter">);</span>
+<span id="L402" class="LineNr">402 </span><span class="Delimiter">}</span>
+<span id="L403" class="LineNr">403 </span>
+<span id="L404" class="LineNr">404 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L405" class="LineNr">405 </span><span class="Comment">#include &lt;vector&gt;</span>
+<span id="L406" class="LineNr">406 </span><span class="Normal">using</span> std::vector<span class="Delimiter">;</span>
+<span id="L407" class="LineNr">407 </span><span class="Comment">#include &lt;list&gt;</span>
+<span id="L408" class="LineNr">408 </span><span class="Normal">using</span> std::list<span class="Delimiter">;</span>
+<span id="L409" class="LineNr">409 </span><span class="Comment">#include &lt;set&gt;</span>
+<span id="L410" class="LineNr">410 </span><span class="Normal">using</span> std::set<span class="Delimiter">;</span>
+<span id="L411" class="LineNr">411 </span>
+<span id="L412" class="LineNr">412 </span><span class="Comment">#include &lt;sstream&gt;</span>
+<span id="L413" class="LineNr">413 </span><span class="Normal">using</span> std::istringstream<span class="Delimiter">;</span>
+<span id="L414" class="LineNr">414 </span><span class="Normal">using</span> std::ostringstream<span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span>
+<span id="L416" class="LineNr">416 </span><span class="Comment">#include &lt;fstream&gt;</span>
+<span id="L417" class="LineNr">417 </span><span class="Normal">using</span> std::ifstream<span class="Delimiter">;</span>
+<span id="L418" class="LineNr">418 </span><span class="Normal">using</span> std::ofstream<span class="Delimiter">;</span>
+<span id="L419" class="LineNr">419 </span>
+<span id="L420" class="LineNr">420 </span><span class="Comment">#include &quot;termbox/termbox.h&quot;</span>
+<span id="L421" class="LineNr">421 </span>
+<span id="L422" class="LineNr">422 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L423" class="LineNr">423 </span><span class="Comment">//: In future layers we'll use the depth field as follows:</span>
+<span id="L424" class="LineNr">424 </span><span class="Comment">//:</span>
+<span id="L425" class="LineNr">425 </span><span class="Comment">//: Errors will be depth 0.</span>
+<span id="L426" class="LineNr">426 </span><span class="Comment">//: Mu 'applications' will be able to use depths 1-100 as they like.</span>
+<span id="L427" class="LineNr">427 </span><span class="Comment">//: Primitive statements will occupy 101-9989</span>
+<span id="L428" class="LineNr">428 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Initial_callstack_depth = <span class="Constant">101</span><span class="Delimiter">;</span>
+<span id="L429" class="LineNr">429 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Max_callstack_depth = <span class="Constant">9989</span><span class="Delimiter">;</span>
+<span id="L430" class="LineNr">430 </span><span class="Comment">//: Finally, details of primitive Mu statements will occupy depth 9990-9999</span>
+<span id="L431" class="LineNr">431 </span><span class="Comment">//: (more on that later as well)</span>
+<span id="L432" class="LineNr">432 </span><span class="Comment">//:</span>
+<span id="L433" class="LineNr">433 </span><span class="Comment">//: This framework should help us hide some details at each level, mixing</span>
+<span id="L434" class="LineNr">434 </span><span class="Comment">//: static ideas like layers with the dynamic notion of call-stack depth.</span>
 </pre>
 </body>
 </html>
diff --git a/html/003trace.test.cc.html b/html/003trace.test.cc.html
index d71854da..6cbfdac1 100644
--- a/html/003trace.test.cc.html
+++ b/html/003trace.test.cc.html
@@ -57,66 +57,66 @@ if ('onhashchange' in window) {
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
 <span id="L1" class="LineNr">  1 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L1'>test_trace_check_compares</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L2" class="LineNr">  2 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L3" class="LineNr">  3 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L2" class="LineNr">  2 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L3" class="LineNr">  3 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L4" class="LineNr">  4 </span><span class="Delimiter">}</span>
 <span id="L5" class="LineNr">  5 </span>
 <span id="L6" class="LineNr">  6 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L6'>test_trace_check_ignores_other_layers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L7" class="LineNr">  7 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L8" class="LineNr">  8 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L9" class="LineNr">  9 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
-<span id="L10" class="LineNr"> 10 </span>  <a href='003trace.cc.html#L252'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L7" class="LineNr">  7 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L8" class="LineNr">  8 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L9" class="LineNr">  9 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L10" class="LineNr"> 10 </span>  <a href='003trace.cc.html#L274'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Delimiter">}</span>
 <span id="L12" class="LineNr"> 12 </span>
 <span id="L13" class="LineNr"> 13 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L13'>test_trace_check_ignores_leading_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L14" class="LineNr"> 14 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L14" class="LineNr"> 14 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L15" class="LineNr"> 15 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">too little whitespace</span><span class="Comment">*/</span><span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L16" class="LineNr"> 16 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">too much whitespace</span><span class="Comment">*/</span><span class="Constant">&quot;  foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L17" class="LineNr"> 17 </span><span class="Delimiter">}</span>
 <span id="L18" class="LineNr"> 18 </span>
 <span id="L19" class="LineNr"> 19 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L19'>test_trace_check_ignores_other_lines</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L20" class="LineNr"> 20 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L23" class="LineNr"> 23 </span><span class="Delimiter">}</span>
 <span id="L24" class="LineNr"> 24 </span>
 <span id="L25" class="LineNr"> 25 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L25'>test_trace_check_ignores_other_lines2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L26" class="LineNr"> 26 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L28" class="LineNr"> 28 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: bar&quot;</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L28" class="LineNr"> 28 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: bar&quot;</span><span class="Delimiter">);</span>
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">}</span>
 <span id="L30" class="LineNr"> 30 </span>
 <span id="L31" class="LineNr"> 31 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L31'>test_trace_ignores_trailing_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L32" class="LineNr"> 32 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L33" class="LineNr"> 33 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L32" class="LineNr"> 32 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L33" class="LineNr"> 33 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L34" class="LineNr"> 34 </span><span class="Delimiter">}</span>
 <span id="L35" class="LineNr"> 35 </span>
 <span id="L36" class="LineNr"> 36 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L36'>test_trace_ignores_trailing_whitespace2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo &quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo &quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
 <span id="L40" class="LineNr"> 40 </span>
 <span id="L41" class="LineNr"> 41 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L41'>test_trace_orders_across_layers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L43" class="LineNr"> 43 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L44" class="LineNr"> 44 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;qux&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L232'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo^Dtest layer 2: bar^Dtest layer 1: qux^D&quot;</span><span class="Delimiter">);</span>
+<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L43" class="LineNr"> 43 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L44" class="LineNr"> 44 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;qux&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L254'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo^Dtest layer 2: bar^Dtest layer 1: qux^D&quot;</span><span class="Delimiter">);</span>
 <span id="L46" class="LineNr"> 46 </span><span class="Delimiter">}</span>
 <span id="L47" class="LineNr"> 47 </span>
 <span id="L48" class="LineNr"> 48 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L48'>test_trace_supports_count</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr"> 49 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L51" class="LineNr"> 51 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
 <span id="L53" class="LineNr"> 53 </span>
 <span id="L54" class="LineNr"> 54 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L54'>test_trace_supports_count2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L55" class="LineNr"> 55 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L56" class="LineNr"> 56 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L55" class="LineNr"> 55 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L56" class="LineNr"> 56 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L57" class="LineNr"> 57 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
 <span id="L59" class="LineNr"> 59 </span>
 <span id="L60" class="LineNr"> 60 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L60'>test_trace_count_ignores_trailing_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L61" class="LineNr"> 61 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L61" class="LineNr"> 61 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L62" class="LineNr"> 62 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span><span class="Delimiter">}</span>
 <span id="L64" class="LineNr"> 64 </span>
@@ -131,26 +131,26 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span><span class="Comment">// can't check trace because trace methods call 'split'</span>
 <span id="L74" class="LineNr"> 74 </span>
 <span id="L75" class="LineNr"> 75 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L75'>test_split_returns_at_least_one_elem</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr"> 76 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L76" class="LineNr"> 76 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L77" class="LineNr"> 77 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L78" class="LineNr"> 78 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L79" class="LineNr"> 79 </span><span class="Delimiter">}</span>
 <span id="L80" class="LineNr"> 80 </span>
 <span id="L81" class="LineNr"> 81 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L81'>test_split_returns_entire_input_when_no_delim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L83" class="LineNr"> 83 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L84" class="LineNr"> 84 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L85" class="LineNr"> 85 </span><span class="Delimiter">}</span>
 <span id="L86" class="LineNr"> 86 </span>
 <span id="L87" class="LineNr"> 87 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L87'>test_split_works</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L88" class="LineNr"> 88 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L88" class="LineNr"> 88 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L89" class="LineNr"> 89 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L90" class="LineNr"> 90 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L91" class="LineNr"> 91 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
 <span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
 <span id="L93" class="LineNr"> 93 </span>
 <span id="L94" class="LineNr"> 94 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L94'>test_split_works2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L95" class="LineNr"> 95 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
 <span id="L97" class="LineNr"> 97 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L98" class="LineNr"> 98 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
@@ -158,7 +158,7 @@ if ('onhashchange' in window) {
 <span id="L100" class="LineNr">100 </span><span class="Delimiter">}</span>
 <span id="L101" class="LineNr">101 </span>
 <span id="L102" class="LineNr">102 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L102'>test_split_handles_multichar_delim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,,def,,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,,&quot;</span><span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,,def,,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,,&quot;</span><span class="Delimiter">);</span>
 <span id="L104" class="LineNr">104 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
 <span id="L105" class="LineNr">105 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L106" class="LineNr">106 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
@@ -166,19 +166,19 @@ if ('onhashchange' in window) {
 <span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
 <span id="L109" class="LineNr">109 </span>
 <span id="L110" class="LineNr">110 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L110'>test_trim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L112" class="LineNr">112 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L113" class="LineNr">113 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L114" class="LineNr">114 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L115" class="LineNr">115 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L116" class="LineNr">116 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L117" class="LineNr">117 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
-<span id="L118" class="LineNr">118 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L119" class="LineNr">119 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L120" class="LineNr">120 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
-<span id="L121" class="LineNr">121 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L122" class="LineNr">122 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L123" class="LineNr">123 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L111" class="LineNr">111 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L113" class="LineNr">113 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L114" class="LineNr">114 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L119" class="LineNr">119 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L120" class="LineNr">120 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L121" class="LineNr">121 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L122" class="LineNr">122 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
 <span id="L124" class="LineNr">124 </span><span class="Delimiter">}</span>
 </pre>
 </body>
diff --git a/html/010vm.cc.html b/html/010vm.cc.html
index 41f9a919..4ae3bc72 100644
--- a/html/010vm.cc.html
+++ b/html/010vm.cc.html
@@ -24,7 +24,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .CommentedCode { color: #6c6c6c; }
 .cSpecial { color: #008000; }
 -->
@@ -80,882 +79,887 @@ if ('onhashchange' in window) {
 <span id="L17" class="LineNr"> 17 </span><span class="Comment">// Recipes are lists of instructions. To perform or 'run' a recipe, the</span>
 <span id="L18" class="LineNr"> 18 </span><span class="Comment">// computer runs its instructions.</span>
 <span id="L19" class="LineNr"> 19 </span><span class="Normal">struct</span> <a href='010vm.cc.html#L19'>recipe</a> <span class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>  string name<span class="Delimiter">;</span>
-<span id="L21" class="LineNr"> 21 </span>  vector&lt;instruction&gt; steps<span class="Delimiter">;</span>
-<span id="L22" class="LineNr"> 22 </span>  <span class="Comment">// End recipe Fields</span>
-<span id="L23" class="LineNr"> 23 </span>  <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">();</span>
-<span id="L24" class="LineNr"> 24 </span><span class="Delimiter">};</span>
-<span id="L25" class="LineNr"> 25 </span>
-<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">:(before &quot;struct recipe&quot;)</span>
-<span id="L27" class="LineNr"> 27 </span><span class="Comment">// Each instruction is either of the form:</span>
-<span id="L28" class="LineNr"> 28 </span><span class="Comment">//   product1, product2, product3, ... &lt;- operation ingredient1, ingredient2, ingredient3, ...</span>
-<span id="L29" class="LineNr"> 29 </span><span class="Comment">// or just a single 'label' starting with a non-alphanumeric character</span>
-<span id="L30" class="LineNr"> 30 </span><span class="Comment">//   +label</span>
-<span id="L31" class="LineNr"> 31 </span><span class="Comment">// Labels don't do anything, they're just named locations in a recipe.</span>
-<span id="L32" class="LineNr"> 32 </span><span class="Normal">struct</span> <a href='010vm.cc.html#L32'>instruction</a> <span class="Delimiter">{</span>
-<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">bool</span> is_label<span class="Delimiter">;</span>
-<span id="L34" class="LineNr"> 34 </span>  string label<span class="Delimiter">;</span>  <span class="Comment">// only if is_label</span>
-<span id="L35" class="LineNr"> 35 </span>  string name<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
-<span id="L36" class="LineNr"> 36 </span>  string original_string<span class="Delimiter">;</span>  <span class="Comment">// for error messages</span>
-<span id="L37" class="LineNr"> 37 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> operation<span class="Delimiter">;</span>  <span class="Comment">// get(Recipe_ordinal, name)</span>
-<span id="L38" class="LineNr"> 38 </span>  vector&lt;reagent&gt; ingredients<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
-<span id="L39" class="LineNr"> 39 </span>  vector&lt;reagent&gt; products<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Comment">// End instruction Fields</span>
-<span id="L41" class="LineNr"> 41 </span>  <a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">();</span>
-<span id="L42" class="LineNr"> 42 </span>  <span class="Normal">void</span> <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L43" class="LineNr"> 43 </span>  <span class="Normal">bool</span> is_empty<span class="Delimiter">();</span>
-<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">};</span>
-<span id="L45" class="LineNr"> 45 </span>
-<span id="L46" class="LineNr"> 46 </span><span class="Delimiter">:(before &quot;struct instruction&quot;)</span>
-<span id="L47" class="LineNr"> 47 </span><span class="Comment">// Ingredients and products are a single species -- a reagent. Reagents refer</span>
-<span id="L48" class="LineNr"> 48 </span><span class="Comment">// either to numbers or to locations in memory along with 'type' tags telling</span>
-<span id="L49" class="LineNr"> 49 </span><span class="Comment">// us how to interpret them. They also can contain arbitrary other lists of</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Comment">// properties besides types, but we're getting ahead of ourselves.</span>
-<span id="L51" class="LineNr"> 51 </span><span class="Normal">struct</span> reagent <span class="Delimiter">{</span>
-<span id="L52" class="LineNr"> 52 </span>  string original_string<span class="Delimiter">;</span>
-<span id="L53" class="LineNr"> 53 </span>  string name<span class="Delimiter">;</span>
-<span id="L54" class="LineNr"> 54 </span>  type_tree* type<span class="Delimiter">;</span>
-<span id="L55" class="LineNr"> 55 </span>  vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt; properties<span class="Delimiter">;</span>  <span class="Comment">// can't be a map because the string_tree sometimes needs to be NULL, which can be confusing</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="Normal">double</span> value<span class="Delimiter">;</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">bool</span> initialized<span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Comment">// End reagent Fields</span>
-<span id="L59" class="LineNr"> 59 </span>  reagent<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">);</span>
-<span id="L60" class="LineNr"> 60 </span>  reagent<span class="Delimiter">()</span> :type<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L61" class="LineNr"> 61 </span>  reagent<span class="Delimiter">(</span>type_tree* t<span class="Delimiter">)</span> :type<span class="Delimiter">(</span>t<span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L62" class="LineNr"> 62 </span>  ~reagent<span class="Delimiter">();</span>
-<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">void</span> <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L64" class="LineNr"> 64 </span>  reagent<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; original<span class="Delimiter">);</span>
-<span id="L65" class="LineNr"> 65 </span>  reagent&amp; <span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; original<span class="Delimiter">);</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Normal">void</span> <a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><span class="Normal">double</span> v<span class="Delimiter">)</span> <span class="Delimiter">{</span> value = v<span class="Delimiter">;</span>  initialized = <span class="Constant">true</span><span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">};</span>
-<span id="L68" class="LineNr"> 68 </span>
-<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">:(before &quot;struct reagent&quot;)</span>
-<span id="L70" class="LineNr"> 70 </span><span class="Comment">// Types can range from a simple type ordinal, to arbitrarily complex trees of</span>
-<span id="L71" class="LineNr"> 71 </span><span class="Comment">// type parameters, like (map (address array character) (list number))</span>
-<span id="L72" class="LineNr"> 72 </span><span class="Normal">struct</span> type_tree <span class="Delimiter">{</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">bool</span> atom<span class="Delimiter">;</span>
-<span id="L74" class="LineNr"> 74 </span>  string name<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
-<span id="L75" class="LineNr"> 75 </span>  <a href='010vm.cc.html#L124'>type_ordinal</a> value<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
-<span id="L76" class="LineNr"> 76 </span>  type_tree* left<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
-<span id="L77" class="LineNr"> 77 </span>  type_tree* right<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
-<span id="L78" class="LineNr"> 78 </span>  ~type_tree<span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>  type_tree<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">);</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Comment">// atomic type ordinal</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Normal">explicit</span> type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">);</span>
-<span id="L82" class="LineNr"> 82 </span>  type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">,</span> <a href='010vm.cc.html#L124'>type_ordinal</a> v<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> name<span class="Delimiter">(</span>name<span class="Delimiter">),</span> value<span class="Delimiter">(</span>v<span class="Delimiter">),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Comment">// tree of type ordinals</span>
-<span id="L84" class="LineNr"> 84 </span>  type_tree<span class="Delimiter">(</span>type_tree* l<span class="Delimiter">,</span> type_tree* r<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> left<span class="Delimiter">(</span>l<span class="Delimiter">),</span> right<span class="Delimiter">(</span>r<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L85" class="LineNr"> 85 </span>  type_tree&amp; <span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">);</span>
-<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>==<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span><span class="Delimiter">;</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>!=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> !<span class="Normal">operator</span>==<span class="Delimiter">(</span>other<span class="Delimiter">);</span> <span class="Delimiter">}</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>&lt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span><span class="Delimiter">;</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>&gt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> other<span class="Delimiter">.</span><span class="Normal">operator</span>&lt;<span class="Delimiter">(</span>*<span class="Normal">this</span><span class="Delimiter">);</span> <span class="Delimiter">}</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">};</span>
-<span id="L91" class="LineNr"> 91 </span>
-<span id="L92" class="LineNr"> 92 </span><span class="Normal">struct</span> string_tree <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">bool</span> atom<span class="Delimiter">;</span>
-<span id="L94" class="LineNr"> 94 </span>  string value<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
-<span id="L95" class="LineNr"> 95 </span>  string_tree* left<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
-<span id="L96" class="LineNr"> 96 </span>  string_tree* right<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
-<span id="L97" class="LineNr"> 97 </span>  ~string_tree<span class="Delimiter">();</span>
-<span id="L98" class="LineNr"> 98 </span>  string_tree<span class="Delimiter">(</span><span class="Normal">const</span> string_tree&amp; original<span class="Delimiter">);</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Comment">// atomic string</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Normal">explicit</span> string_tree<span class="Delimiter">(</span>string v<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span>v<span class="Delimiter">),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Comment">// tree of strings</span>
-<span id="L102" class="LineNr">102 </span>  string_tree<span class="Delimiter">(</span>string_tree* l<span class="Delimiter">,</span> string_tree* r<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> left<span class="Delimiter">(</span>l<span class="Delimiter">),</span> right<span class="Delimiter">(</span>r<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L103" class="LineNr">103 </span><span class="Delimiter">};</span>
-<span id="L104" class="LineNr">104 </span>
-<span id="L105" class="LineNr">105 </span><span class="Comment">// End type_tree Definition</span>
-<span id="L106" class="LineNr">106 </span><span class="Delimiter">:(code)</span>
-<span id="L107" class="LineNr">107 </span>type_tree::type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> name<span class="Delimiter">(</span>name<span class="Delimiter">),</span> value<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L108" class="LineNr">108 </span>
-<span id="L109" class="LineNr">109 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L110" class="LineNr">110 </span><span class="Comment">// Locations refer to a common 'memory'. Each location can store a number.</span>
-<span id="L111" class="LineNr">111 </span>map&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">double</span>&gt; Memory<span class="Delimiter">;</span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L113" class="LineNr">113 </span>Memory<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L114" class="LineNr">114 </span>
-<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(after &quot;Types&quot;)</span>
-<span id="L116" class="LineNr">116 </span><span class="Comment">// Mu types encode how the numbers stored in different parts of memory are</span>
-<span id="L117" class="LineNr">117 </span><span class="Comment">// interpreted. A location tagged as a 'character' type will interpret the</span>
-<span id="L118" class="LineNr">118 </span><span class="Comment">// value 97 as the letter 'a', while a different location of type 'number'</span>
-<span id="L119" class="LineNr">119 </span><span class="Comment">// would not.</span>
-<span id="L120" class="LineNr">120 </span><span class="Comment">//</span>
-<span id="L121" class="LineNr">121 </span><span class="Comment">// Unlike most computers today, Mu stores types in a single big table, shared</span>
-<span id="L122" class="LineNr">122 </span><span class="Comment">// by all the Mu programs on the computer. This is useful in providing a</span>
-<span id="L123" class="LineNr">123 </span><span class="Comment">// seamless experience to help understand arbitrary Mu programs.</span>
-<span id="L124" class="LineNr">124 </span><span class="Normal">typedef</span> <span class="Normal">int</span> <a href='010vm.cc.html#L124'>type_ordinal</a><span class="Delimiter">;</span>
-<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L126" class="LineNr">126 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal<span class="Delimiter">;</span>
-<span id="L127" class="LineNr">127 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type<span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L129" class="LineNr">129 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Number_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L130" class="LineNr">130 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Boolean_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L131" class="LineNr">131 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Character_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L132" class="LineNr">132 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Address_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span><a href='010vm.cc.html#L124'>type_ordinal</a> Array_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(code)</span>
-<span id="L135" class="LineNr">135 </span><span class="Normal">void</span> <a href='010vm.cc.html#L135'>setup_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L136" class="LineNr">136 </span>  Type<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  Type_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L137" class="LineNr">137 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L138" class="LineNr">138 </span>  Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span>  <span class="Comment">// Mu Types Initialization</span>
-<span id="L140" class="LineNr">140 </span>  Number_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L141" class="LineNr">141 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Number_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;location&quot;</span><span class="Delimiter">,</span> Number_type_ordinal<span class="Delimiter">);</span>  <span class="Comment">// synonym of number for addresses we'll never look up</span>
-<span id="L143" class="LineNr">143 </span>  Address_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L144" class="LineNr">144 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Address_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  Boolean_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L146" class="LineNr">146 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Boolean_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
-<span id="L147" class="LineNr">147 </span>  Character_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L148" class="LineNr">148 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Character_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Comment">// Array types are a special modifier to any other type. For example,</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Comment">// array:number or array:address:boolean.</span>
-<span id="L151" class="LineNr">151 </span>  Array_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L152" class="LineNr">152 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Array_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
-<span id="L153" class="LineNr">153 </span>  <span class="Comment">// End Mu Types Initialization</span>
-<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
-<span id="L155" class="LineNr">155 </span><span class="Normal">void</span> <a href='010vm.cc.html#L155'>teardown_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L157" class="LineNr">157 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L158" class="LineNr">158 </span>      p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Delimiter">}</span>
-<span id="L160" class="LineNr">160 </span>  Type_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L161" class="LineNr">161 </span><span class="Delimiter">}</span>
-<span id="L162" class="LineNr">162 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L163" class="LineNr">163 </span><a href='010vm.cc.html#L135'>setup_types</a><span class="Delimiter">();</span>
-<span id="L164" class="LineNr">164 </span>atexit<span class="Delimiter">(</span><a href='010vm.cc.html#L155'>teardown_types</a><span class="Delimiter">);</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L167" class="LineNr">167 </span><span class="Comment">// You can construct arbitrary new types. New types are either 'containers'</span>
-<span id="L168" class="LineNr">168 </span><span class="Comment">// with multiple 'elements' of other types, or 'exclusive containers' containing</span>
-<span id="L169" class="LineNr">169 </span><span class="Comment">// one of multiple 'variants'. (These are similar to C structs and unions,</span>
-<span id="L170" class="LineNr">170 </span><span class="Comment">// respectively, though exclusive containers implicitly include a tag element</span>
-<span id="L171" class="LineNr">171 </span><span class="Comment">// recording which variant they should be interpreted as.)</span>
-<span id="L172" class="LineNr">172 </span><span class="Comment">//</span>
-<span id="L173" class="LineNr">173 </span><span class="Comment">// For example, storing bank balance and name for an account might require a</span>
-<span id="L174" class="LineNr">174 </span><span class="Comment">// container, but if bank accounts may be either for individuals or groups,</span>
-<span id="L175" class="LineNr">175 </span><span class="Comment">// with different properties for each, that may require an exclusive container</span>
-<span id="L176" class="LineNr">176 </span><span class="Comment">// whose variants are individual-account and joint-account containers.</span>
-<span id="L177" class="LineNr">177 </span><span class="Normal">enum</span> <a href='010vm.cc.html#L177'>kind_of_type</a> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>  <a href='010vm.cc.html#L178'>PRIMITIVE</a><span class="Delimiter">,</span>
-<span id="L179" class="LineNr">179 </span>  <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">,</span>
-<span id="L180" class="LineNr">180 </span>  <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a>
-<span id="L181" class="LineNr">181 </span><span class="Delimiter">};</span>
-<span id="L182" class="LineNr">182 </span>
-<span id="L183" class="LineNr">183 </span><span class="Normal">struct</span> type_info <span class="Delimiter">{</span>
-<span id="L184" class="LineNr">184 </span>  string name<span class="Delimiter">;</span>
-<span id="L185" class="LineNr">185 </span>  <a href='010vm.cc.html#L177'>kind_of_type</a> kind<span class="Delimiter">;</span>
-<span id="L186" class="LineNr">186 </span>  vector&lt;reagent&gt; elements<span class="Delimiter">;</span>
-<span id="L187" class="LineNr">187 </span>  <span class="Comment">// End type_info Fields</span>
-<span id="L188" class="LineNr">188 </span>  type_info<span class="Delimiter">()</span> :kind<span class="Delimiter">(</span><a href='010vm.cc.html#L178'>PRIMITIVE</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>    <span class="Comment">// End type_info Constructor</span>
-<span id="L190" class="LineNr">190 </span>  <span class="Delimiter">}</span>
-<span id="L191" class="LineNr">191 </span><span class="Delimiter">};</span>
-<span id="L192" class="LineNr">192 </span>
-<span id="L193" class="LineNr">193 </span><span class="Normal">enum</span> <a href='010vm.cc.html#L193'>primitive_recipes</a> <span class="Delimiter">{</span>
-<span id="L194" class="LineNr">194 </span>  <a href='010vm.cc.html#L194'>IDLE</a> = <span class="Constant">0</span><span class="Delimiter">,</span>
-<span id="L195" class="LineNr">195 </span>  <a href='010vm.cc.html#L195'>COPY</a><span class="Delimiter">,</span>
-<span id="L196" class="LineNr">196 </span>  <span class="Comment">// End Primitive Recipe Declarations</span>
-<span id="L197" class="LineNr">197 </span>  <a href='010vm.cc.html#L197'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">,</span>
-<span id="L198" class="LineNr">198 </span><span class="Delimiter">};</span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">:(code)</span>
-<span id="L200" class="LineNr">200 </span><span class="Comment">//: It's all very well to construct recipes out of other recipes, but we need</span>
-<span id="L201" class="LineNr">201 </span><span class="Comment">//: to know how to do *something* out of the box. For the following</span>
-<span id="L202" class="LineNr">202 </span><span class="Comment">//: recipes there are only codes, no entries in the book, because Mu just knows</span>
-<span id="L203" class="LineNr">203 </span><span class="Comment">//: what to do for them.</span>
-<span id="L204" class="LineNr">204 </span><span class="Normal">void</span> <a href='010vm.cc.html#L204'>setup_recipes</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L205" class="LineNr">205 </span>  Recipe<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  Recipe_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L206" class="LineNr">206 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;idle&quot;</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L194'>IDLE</a><span class="Delimiter">);</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Comment">// Primitive Recipe Numbers</span>
-<span id="L208" class="LineNr">208 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;copy&quot;</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L195'>COPY</a><span class="Delimiter">);</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Comment">// End Primitive Recipe Numbers</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
-<span id="L211" class="LineNr">211 </span><span class="Comment">//: We could just reset the recipe table after every test, but that gets slow</span>
-<span id="L212" class="LineNr">212 </span><span class="Comment">//: all too quickly. Instead, initialize the common stuff just once at</span>
-<span id="L213" class="LineNr">213 </span><span class="Comment">//: startup. Later layers will carefully undo each test's additions after</span>
-<span id="L214" class="LineNr">214 </span><span class="Comment">//: itself.</span>
-<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L216" class="LineNr">216 </span><a href='010vm.cc.html#L204'>setup_recipes</a><span class="Delimiter">();</span>
-<span id="L217" class="LineNr">217 </span>assert<span class="Delimiter">(</span><a href='010vm.cc.html#L197'>MAX_PRIMITIVE_RECIPES</a> &lt; <span class="Constant">200</span><span class="Delimiter">);</span>  <span class="Comment">// level 0 is primitives; until 199</span>
-<span id="L218" class="LineNr">218 </span>Next_recipe_ordinal = <span class="Constant">200</span><span class="Delimiter">;</span>
-<span id="L219" class="LineNr">219 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
-<span id="L220" class="LineNr">220 </span><span class="Comment">// End Load Recipes</span>
-<span id="L221" class="LineNr">221 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
-<span id="L222" class="LineNr">222 </span>assert<span class="Delimiter">(</span>Next_recipe_ordinal &lt; <span class="Constant">1000</span><span class="Delimiter">);</span>  <span class="Comment">// recipes being tested didn't overflow into test space</span>
-<span id="L223" class="LineNr">223 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L224" class="LineNr">224 </span>Next_recipe_ordinal = <span class="Constant">1000</span><span class="Delimiter">;</span>  <span class="Comment">// consistent new numbers for each test</span>
-<span id="L225" class="LineNr">225 </span>
-<span id="L226" class="LineNr">226 </span><span class="Comment">//: One final detail: tests can modify our global tables of recipes and types,</span>
-<span id="L227" class="LineNr">227 </span><span class="Comment">//: so we need some way to clean up after each test is done so it doesn't</span>
-<span id="L228" class="LineNr">228 </span><span class="Comment">//: influence later ones.</span>
-<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L230" class="LineNr">230 </span>map&lt;string<span class="Delimiter">,</span> recipe_ordinal&gt; Recipe_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L231" class="LineNr">231 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt; Recipe_snapshot<span class="Delimiter">;</span>
-<span id="L232" class="LineNr">232 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L233" class="LineNr">233 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type_snapshot<span class="Delimiter">;</span>
-<span id="L234" class="LineNr">234 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L235" class="LineNr">235 </span>save_snapshots<span class="Delimiter">();</span>
-<span id="L236" class="LineNr">236 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L237" class="LineNr">237 </span>restore_snapshots<span class="Delimiter">();</span>
-<span id="L238" class="LineNr">238 </span>
-<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(code)</span>
-<span id="L240" class="LineNr">240 </span><span class="Normal">void</span> save_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L241" class="LineNr">241 </span>  Recipe_ordinal_snapshot = Recipe_ordinal<span class="Delimiter">;</span>
-<span id="L242" class="LineNr">242 </span>  Recipe_snapshot = Recipe<span class="Delimiter">;</span>
-<span id="L243" class="LineNr">243 </span>  Type_ordinal_snapshot = Type_ordinal<span class="Delimiter">;</span>
-<span id="L244" class="LineNr">244 </span>  Type_snapshot = Type<span class="Delimiter">;</span>
-<span id="L245" class="LineNr">245 </span>  <span class="Comment">// End save_snapshots</span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">}</span>
-<span id="L247" class="LineNr">247 </span>
-<span id="L248" class="LineNr">248 </span><span class="Normal">void</span> restore_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L249" class="LineNr">249 </span>  Recipe = Recipe_snapshot<span class="Delimiter">;</span>
-<span id="L250" class="LineNr">250 </span>  Recipe_ordinal = Recipe_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L251" class="LineNr">251 </span>  restore_non_recipe_snapshots<span class="Delimiter">();</span>
-<span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span>
-<span id="L253" class="LineNr">253 </span><span class="Comment">// when running sandboxes in the edit/ app we'll want to restore everything except recipes defined in the app</span>
-<span id="L254" class="LineNr">254 </span><span class="Normal">void</span> restore_non_recipe_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L255" class="LineNr">255 </span>  Type_ordinal = Type_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L256" class="LineNr">256 </span>  Type = Type_snapshot<span class="Delimiter">;</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Comment">// End restore_snapshots</span>
-<span id="L258" class="LineNr">258 </span><span class="Delimiter">}</span>
-<span id="L259" class="LineNr">259 </span>
-<span id="L260" class="LineNr">260 </span><span class="SalientComment">//:: Helpers</span>
+<span id="L20" class="LineNr"> 20 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> ordinal<span class="Delimiter">;</span>
+<span id="L21" class="LineNr"> 21 </span>  string name<span class="Delimiter">;</span>
+<span id="L22" class="LineNr"> 22 </span>  vector&lt;instruction&gt; steps<span class="Delimiter">;</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Comment">// End recipe Fields</span>
+<span id="L24" class="LineNr"> 24 </span>  <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">();</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">};</span>
+<span id="L26" class="LineNr"> 26 </span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(before &quot;struct recipe&quot;)</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Comment">// Each instruction is either of the form:</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Comment">//   product1, product2, product3, ... &lt;- operation ingredient1, ingredient2, ingredient3, ...</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Comment">// or just a single 'label' starting with a non-alphanumeric character</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment">//   +label</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Comment">// Labels don't do anything, they're just named locations in a recipe.</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Normal">struct</span> <a href='010vm.cc.html#L33'>instruction</a> <span class="Delimiter">{</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Normal">bool</span> is_label<span class="Delimiter">;</span>
+<span id="L35" class="LineNr"> 35 </span>  string label<span class="Delimiter">;</span>  <span class="Comment">// only if is_label</span>
+<span id="L36" class="LineNr"> 36 </span>  string name<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
+<span id="L37" class="LineNr"> 37 </span>  string original_string<span class="Delimiter">;</span>  <span class="Comment">// for error messages</span>
+<span id="L38" class="LineNr"> 38 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> operation<span class="Delimiter">;</span>  <span class="Comment">// get(Recipe_ordinal, name)</span>
+<span id="L39" class="LineNr"> 39 </span>  vector&lt;reagent&gt; ingredients<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
+<span id="L40" class="LineNr"> 40 </span>  vector&lt;reagent&gt; products<span class="Delimiter">;</span>  <span class="Comment">// only if !is_label</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Comment">// End instruction Fields</span>
+<span id="L42" class="LineNr"> 42 </span>  <a href='010vm.cc.html#L33'>instruction</a><span class="Delimiter">();</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Normal">void</span> <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">bool</span> is_empty<span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">};</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">:(before &quot;struct instruction&quot;)</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Comment">// Ingredients and products are a single species -- a reagent. Reagents refer</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Comment">// either to numbers or to locations in memory along with 'type' tags telling</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Comment">// us how to interpret them. They also can contain arbitrary other lists of</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Comment">// properties besides types, but we're getting ahead of ourselves.</span>
+<span id="L52" class="LineNr"> 52 </span><span class="Normal">struct</span> reagent <span class="Delimiter">{</span>
+<span id="L53" class="LineNr"> 53 </span>  string original_string<span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span>  string name<span class="Delimiter">;</span>
+<span id="L55" class="LineNr"> 55 </span>  type_tree* type<span class="Delimiter">;</span>
+<span id="L56" class="LineNr"> 56 </span>  vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt; properties<span class="Delimiter">;</span>  <span class="Comment">// can't be a map because the string_tree sometimes needs to be NULL, which can be confusing</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">double</span> value<span class="Delimiter">;</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">bool</span> initialized<span class="Delimiter">;</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="Comment">// End reagent Fields</span>
+<span id="L60" class="LineNr"> 60 </span>  reagent<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">);</span>
+<span id="L61" class="LineNr"> 61 </span>  reagent<span class="Delimiter">()</span> :type<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L62" class="LineNr"> 62 </span>  reagent<span class="Delimiter">(</span>type_tree* t<span class="Delimiter">)</span> :type<span class="Delimiter">(</span>t<span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L63" class="LineNr"> 63 </span>  ~reagent<span class="Delimiter">();</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">void</span> <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L65" class="LineNr"> 65 </span>  reagent<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; original<span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>  reagent&amp; <span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; original<span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">void</span> <a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Normal">double</span> v<span class="Delimiter">)</span> <span class="Delimiter">{</span> value = v<span class="Delimiter">;</span>  initialized =<span class="Constant"> true</span><span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">};</span>
+<span id="L69" class="LineNr"> 69 </span>
+<span id="L70" class="LineNr"> 70 </span><span class="Delimiter">:(before &quot;struct reagent&quot;)</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Comment">// Types can range from a simple type ordinal, to arbitrarily complex trees of</span>
+<span id="L72" class="LineNr"> 72 </span><span class="Comment">// type parameters, like (map (address array character) (list number))</span>
+<span id="L73" class="LineNr"> 73 </span><span class="Normal">struct</span> type_tree <span class="Delimiter">{</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Normal">bool</span> atom<span class="Delimiter">;</span>
+<span id="L75" class="LineNr"> 75 </span>  string name<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
+<span id="L76" class="LineNr"> 76 </span>  <a href='010vm.cc.html#L125'>type_ordinal</a> value<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
+<span id="L77" class="LineNr"> 77 </span>  type_tree* left<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
+<span id="L78" class="LineNr"> 78 </span>  type_tree* right<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
+<span id="L79" class="LineNr"> 79 </span>  ~type_tree<span class="Delimiter">();</span>
+<span id="L80" class="LineNr"> 80 </span>  type_tree<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">);</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Comment">// atomic type ordinal</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">explicit</span> type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">);</span>
+<span id="L83" class="LineNr"> 83 </span>  type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">,</span> <a href='010vm.cc.html#L125'>type_ordinal</a> v<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> name<span class="Delimiter">(</span>name<span class="Delimiter">),</span> value<span class="Delimiter">(</span>v<span class="Delimiter">),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Comment">// tree of type ordinals</span>
+<span id="L85" class="LineNr"> 85 </span>  type_tree<span class="Delimiter">(</span>type_tree* l<span class="Delimiter">,</span> type_tree* r<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> left<span class="Delimiter">(</span>l<span class="Delimiter">),</span> right<span class="Delimiter">(</span>r<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L86" class="LineNr"> 86 </span>  type_tree&amp; <span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">);</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>==<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>!=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> !<span class="Normal">operator</span>==<span class="Delimiter">(</span>other<span class="Delimiter">);</span> <span class="Delimiter">}</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>&lt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span><span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span>&gt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> other<span class="Delimiter">.</span><span class="Normal">operator</span>&lt;<span class="Delimiter">(</span>*<span class="Normal">this</span><span class="Delimiter">);</span> <span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">};</span>
+<span id="L92" class="LineNr"> 92 </span>
+<span id="L93" class="LineNr"> 93 </span><span class="Normal">struct</span> string_tree <span class="Delimiter">{</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">bool</span> atom<span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span>  string value<span class="Delimiter">;</span>  <span class="Comment">// only if atom</span>
+<span id="L96" class="LineNr"> 96 </span>  string_tree* left<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
+<span id="L97" class="LineNr"> 97 </span>  string_tree* right<span class="Delimiter">;</span>  <span class="Comment">// only if !atom</span>
+<span id="L98" class="LineNr"> 98 </span>  ~string_tree<span class="Delimiter">();</span>
+<span id="L99" class="LineNr"> 99 </span>  string_tree<span class="Delimiter">(</span><span class="Normal">const</span> string_tree&amp; original<span class="Delimiter">);</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Comment">// atomic string</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">explicit</span> string_tree<span class="Delimiter">(</span>string v<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span>v<span class="Delimiter">),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Comment">// tree of strings</span>
+<span id="L103" class="LineNr">103 </span>  string_tree<span class="Delimiter">(</span>string_tree* l<span class="Delimiter">,</span> string_tree* r<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> left<span class="Delimiter">(</span>l<span class="Delimiter">),</span> right<span class="Delimiter">(</span>r<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L104" class="LineNr">104 </span><span class="Delimiter">};</span>
+<span id="L105" class="LineNr">105 </span>
+<span id="L106" class="LineNr">106 </span><span class="Comment">// End type_tree Definition</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(code)</span>
+<span id="L108" class="LineNr">108 </span>type_tree::type_tree<span class="Delimiter">(</span>string name<span class="Delimiter">)</span> :atom<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">),</span> name<span class="Delimiter">(</span>name<span class="Delimiter">),</span> value<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)),</span> left<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> right<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">// Locations refer to a common 'memory'. Each location can store a number.</span>
+<span id="L112" class="LineNr">112 </span>map&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">double</span>&gt; Memory<span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L114" class="LineNr">114 </span>Memory<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L115" class="LineNr">115 </span>
+<span id="L116" class="LineNr">116 </span><span class="Delimiter">:(after &quot;Types&quot;)</span>
+<span id="L117" class="LineNr">117 </span><span class="Comment">// Mu types encode how the numbers stored in different parts of memory are</span>
+<span id="L118" class="LineNr">118 </span><span class="Comment">// interpreted. A location tagged as a 'character' type will interpret the</span>
+<span id="L119" class="LineNr">119 </span><span class="Comment">// value 97 as the letter 'a', while a different location of type 'number'</span>
+<span id="L120" class="LineNr">120 </span><span class="Comment">// would not.</span>
+<span id="L121" class="LineNr">121 </span><span class="Comment">//</span>
+<span id="L122" class="LineNr">122 </span><span class="Comment">// Unlike most computers today, Mu stores types in a single big table, shared</span>
+<span id="L123" class="LineNr">123 </span><span class="Comment">// by all the Mu programs on the computer. This is useful in providing a</span>
+<span id="L124" class="LineNr">124 </span><span class="Comment">// seamless experience to help understand arbitrary Mu programs.</span>
+<span id="L125" class="LineNr">125 </span><span class="Normal">typedef</span> <span class="Normal">int</span> <a href='010vm.cc.html#L125'>type_ordinal</a><span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L127" class="LineNr">127 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal<span class="Delimiter">;</span>
+<span id="L128" class="LineNr">128 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type<span class="Delimiter">;</span>
+<span id="L129" class="LineNr">129 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L130" class="LineNr">130 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Number_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L131" class="LineNr">131 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Boolean_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Character_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L133" class="LineNr">133 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Address_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L134" class="LineNr">134 </span><a href='010vm.cc.html#L125'>type_ordinal</a> Array_type_ordinal = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span><span class="Delimiter">:(code)</span>
+<span id="L136" class="LineNr">136 </span><span class="Normal">void</span> <a href='010vm.cc.html#L136'>setup_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>  Type<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  Type_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L138" class="LineNr">138 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L139" class="LineNr">139 </span>  Next_type_ordinal = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Comment">// Mu Types Initialization</span>
+<span id="L141" class="LineNr">141 </span>  Number_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L142" class="LineNr">142 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Number_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;number&quot;</span><span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;location&quot;</span><span class="Delimiter">,</span> Number_type_ordinal<span class="Delimiter">);</span>  <span class="Comment">// synonym of number for addresses we'll never look up</span>
+<span id="L144" class="LineNr">144 </span>  Address_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Address_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;address&quot;</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  Boolean_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L147" class="LineNr">147 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Boolean_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  Character_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L149" class="LineNr">149 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Character_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;character&quot;</span><span class="Delimiter">;</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Comment">// Array types are a special modifier to any other type. For example,</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Comment">// array:number or array:address:boolean.</span>
+<span id="L152" class="LineNr">152 </span>  Array_type_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>  <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> Array_type_ordinal<span class="Delimiter">).</span>name = <span class="Constant">&quot;array&quot;</span><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Comment">// End Mu Types Initialization</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span><span class="Normal">void</span> <a href='010vm.cc.html#L156'>teardown_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L158" class="LineNr">158 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L159" class="LineNr">159 </span>      p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Delimiter">}</span>
+<span id="L161" class="LineNr">161 </span>  Type_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L162" class="LineNr">162 </span><span class="Delimiter">}</span>
+<span id="L163" class="LineNr">163 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L164" class="LineNr">164 </span><a href='010vm.cc.html#L136'>setup_types</a><span class="Delimiter">();</span>
+<span id="L165" class="LineNr">165 </span>atexit<span class="Delimiter">(</span><a href='010vm.cc.html#L156'>teardown_types</a><span class="Delimiter">);</span>
+<span id="L166" class="LineNr">166 </span>
+<span id="L167" class="LineNr">167 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L168" class="LineNr">168 </span><span class="Comment">// You can construct arbitrary new types. New types are either 'containers'</span>
+<span id="L169" class="LineNr">169 </span><span class="Comment">// with multiple 'elements' of other types, or 'exclusive containers' containing</span>
+<span id="L170" class="LineNr">170 </span><span class="Comment">// one of multiple 'variants'. (These are similar to C structs and unions,</span>
+<span id="L171" class="LineNr">171 </span><span class="Comment">// respectively, though exclusive containers implicitly include a tag element</span>
+<span id="L172" class="LineNr">172 </span><span class="Comment">// recording which variant they should be interpreted as.)</span>
+<span id="L173" class="LineNr">173 </span><span class="Comment">//</span>
+<span id="L174" class="LineNr">174 </span><span class="Comment">// For example, storing bank balance and name for an account might require a</span>
+<span id="L175" class="LineNr">175 </span><span class="Comment">// container, but if bank accounts may be either for individuals or groups,</span>
+<span id="L176" class="LineNr">176 </span><span class="Comment">// with different properties for each, that may require an exclusive container</span>
+<span id="L177" class="LineNr">177 </span><span class="Comment">// whose variants are individual-account and joint-account containers.</span>
+<span id="L178" class="LineNr">178 </span><span class="Normal">enum</span> <a href='010vm.cc.html#L178'>kind_of_type</a> <span class="Delimiter">{</span>
+<span id="L179" class="LineNr">179 </span>  <a href='010vm.cc.html#L179'>PRIMITIVE</a><span class="Delimiter">,</span>
+<span id="L180" class="LineNr">180 </span>  <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">,</span>
+<span id="L181" class="LineNr">181 </span>  <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">};</span>
+<span id="L183" class="LineNr">183 </span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">struct</span> type_info <span class="Delimiter">{</span>
+<span id="L185" class="LineNr">185 </span>  string name<span class="Delimiter">;</span>
+<span id="L186" class="LineNr">186 </span>  <a href='010vm.cc.html#L178'>kind_of_type</a> kind<span class="Delimiter">;</span>
+<span id="L187" class="LineNr">187 </span>  vector&lt;reagent&gt; elements<span class="Delimiter">;</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Comment">// End type_info Fields</span>
+<span id="L189" class="LineNr">189 </span>  type_info<span class="Delimiter">()</span> :kind<span class="Delimiter">(</span><a href='010vm.cc.html#L179'>PRIMITIVE</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L190" class="LineNr">190 </span>    <span class="Comment">// End type_info Constructor</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Delimiter">}</span>
+<span id="L192" class="LineNr">192 </span><span class="Delimiter">};</span>
+<span id="L193" class="LineNr">193 </span>
+<span id="L194" class="LineNr">194 </span><span class="Normal">enum</span> <a href='010vm.cc.html#L194'>primitive_recipes</a> <span class="Delimiter">{</span>
+<span id="L195" class="LineNr">195 </span>  <a href='010vm.cc.html#L195'>IDLE</a> = <span class="Constant">0</span><span class="Delimiter">,</span>
+<span id="L196" class="LineNr">196 </span>  <a href='010vm.cc.html#L196'>COPY</a><span class="Delimiter">,</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Comment">// End Primitive Recipe Declarations</span>
+<span id="L198" class="LineNr">198 </span>  <a href='010vm.cc.html#L198'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">,</span>
+<span id="L199" class="LineNr">199 </span><span class="Delimiter">};</span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(code)</span>
+<span id="L201" class="LineNr">201 </span><span class="Comment">//: It's all very well to construct recipes out of other recipes, but we need</span>
+<span id="L202" class="LineNr">202 </span><span class="Comment">//: to know how to do *something* out of the box. For the following</span>
+<span id="L203" class="LineNr">203 </span><span class="Comment">//: recipes there are only codes, no entries in the book, because Mu just knows</span>
+<span id="L204" class="LineNr">204 </span><span class="Comment">//: what to do for them.</span>
+<span id="L205" class="LineNr">205 </span><span class="Normal">void</span> <a href='010vm.cc.html#L205'>setup_recipes</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L206" class="LineNr">206 </span>  Recipe<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  Recipe_ordinal<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L207" class="LineNr">207 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;idle&quot;</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L195'>IDLE</a><span class="Delimiter">);</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Comment">// Primitive Recipe Numbers</span>
+<span id="L209" class="LineNr">209 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;copy&quot;</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L196'>COPY</a><span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Comment">// End Primitive Recipe Numbers</span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">}</span>
+<span id="L212" class="LineNr">212 </span><span class="Comment">//: We could just reset the recipe table after every test, but that gets slow</span>
+<span id="L213" class="LineNr">213 </span><span class="Comment">//: all too quickly. Instead, initialize the common stuff just once at</span>
+<span id="L214" class="LineNr">214 </span><span class="Comment">//: startup. Later layers will carefully undo each test's additions after</span>
+<span id="L215" class="LineNr">215 </span><span class="Comment">//: itself.</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L217" class="LineNr">217 </span><a href='010vm.cc.html#L205'>setup_recipes</a><span class="Delimiter">();</span>
+<span id="L218" class="LineNr">218 </span>assert<span class="Delimiter">(</span><a href='010vm.cc.html#L198'>MAX_PRIMITIVE_RECIPES</a> &lt; <span class="Constant">200</span><span class="Delimiter">);</span>  <span class="Comment">// level 0 is primitives; until 199</span>
+<span id="L219" class="LineNr">219 </span>Next_recipe_ordinal = <span class="Constant">200</span><span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
+<span id="L221" class="LineNr">221 </span><span class="Comment">// Load Mu Prelude</span>
+<span id="L222" class="LineNr">222 </span><span class="Comment">// End Mu Prelude</span>
+<span id="L223" class="LineNr">223 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L224" class="LineNr">224 </span>assert<span class="Delimiter">(</span>Next_recipe_ordinal &lt; <span class="Constant">1000</span><span class="Delimiter">);</span>  <span class="Comment">// recipes being tested didn't overflow into test space</span>
+<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L226" class="LineNr">226 </span>Next_recipe_ordinal = <span class="Constant">1000</span><span class="Delimiter">;</span>  <span class="Comment">// consistent new numbers for each test</span>
+<span id="L227" class="LineNr">227 </span>
+<span id="L228" class="LineNr">228 </span><span class="Comment">//: One final detail: tests can modify our global tables of recipes and types,</span>
+<span id="L229" class="LineNr">229 </span><span class="Comment">//: so we need some way to clean up after each test is done so it doesn't</span>
+<span id="L230" class="LineNr">230 </span><span class="Comment">//: influence later ones.</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L232" class="LineNr">232 </span>map&lt;string<span class="Delimiter">,</span> recipe_ordinal&gt; Recipe_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L233" class="LineNr">233 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt; Recipe_snapshot<span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L235" class="LineNr">235 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type_snapshot<span class="Delimiter">;</span>
+<span id="L236" class="LineNr">236 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L237" class="LineNr">237 </span>save_snapshots<span class="Delimiter">();</span>
+<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L239" class="LineNr">239 </span>restore_snapshots<span class="Delimiter">();</span>
+<span id="L240" class="LineNr">240 </span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">:(code)</span>
+<span id="L242" class="LineNr">242 </span><span class="Normal">void</span> save_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L243" class="LineNr">243 </span>  Recipe_ordinal_snapshot = Recipe_ordinal<span class="Delimiter">;</span>
+<span id="L244" class="LineNr">244 </span>  Recipe_snapshot = Recipe<span class="Delimiter">;</span>
+<span id="L245" class="LineNr">245 </span>  Type_ordinal_snapshot = Type_ordinal<span class="Delimiter">;</span>
+<span id="L246" class="LineNr">246 </span>  Type_snapshot = Type<span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Comment">// End save_snapshots</span>
+<span id="L248" class="LineNr">248 </span><span class="Delimiter">}</span>
+<span id="L249" class="LineNr">249 </span>
+<span id="L250" class="LineNr">250 </span><span class="Normal">void</span> restore_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L251" class="LineNr">251 </span>  Recipe = Recipe_snapshot<span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span>  Recipe_ordinal = Recipe_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L253" class="LineNr">253 </span>  restore_non_recipe_snapshots<span class="Delimiter">();</span>
+<span id="L254" class="LineNr">254 </span><span class="Delimiter">}</span>
+<span id="L255" class="LineNr">255 </span><span class="Comment">// when running sandboxes in the edit/ app we'll want to restore everything except recipes defined in the app</span>
+<span id="L256" class="LineNr">256 </span><span class="Normal">void</span> restore_non_recipe_snapshots<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L257" class="LineNr">257 </span>  Type_ordinal = Type_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L258" class="LineNr">258 </span>  Type = Type_snapshot<span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Comment">// End restore_snapshots</span>
+<span id="L260" class="LineNr">260 </span><span class="Delimiter">}</span>
 <span id="L261" class="LineNr">261 </span>
-<span id="L262" class="LineNr">262 </span><span class="Delimiter">:(code)</span>
-<span id="L263" class="LineNr">263 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span>::<a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Comment">// End recipe Constructor</span>
-<span id="L265" class="LineNr">265 </span><span class="Delimiter">}</span>
-<span id="L266" class="LineNr">266 </span>
-<span id="L267" class="LineNr">267 </span><a href='010vm.cc.html#L32'>instruction</a>::<a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">()</span> :is_label<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> operation<span class="Delimiter">(</span><a href='010vm.cc.html#L194'>IDLE</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Comment">// End instruction Constructor</span>
-<span id="L269" class="LineNr">269 </span><span class="Delimiter">}</span>
-<span id="L270" class="LineNr">270 </span><span class="Normal">void</span> <a href='010vm.cc.html#L32'>instruction</a>::<a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L271" class="LineNr">271 </span>  is_label=<span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span>  label<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L273" class="LineNr">273 </span>  name<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L274" class="LineNr">274 </span>  operation=IDLE<span class="Delimiter">;</span>
-<span id="L275" class="LineNr">275 </span>  ingredients<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L276" class="LineNr">276 </span>  products<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L277" class="LineNr">277 </span>  original_string<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L278" class="LineNr">278 </span>  <span class="Comment">// End instruction Clear</span>
-<span id="L279" class="LineNr">279 </span><span class="Delimiter">}</span>
-<span id="L280" class="LineNr">280 </span><span class="Normal">bool</span> <a href='010vm.cc.html#L32'>instruction</a>::is_empty<span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> !is_label &amp;&amp; name<span class="Delimiter">.</span>empty<span class="Delimiter">();</span> <span class="Delimiter">}</span>
-<span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Comment">// Reagents have the form &lt;name&gt;:&lt;type&gt;:&lt;type&gt;:.../&lt;property&gt;/&lt;property&gt;/...</span>
-<span id="L283" class="LineNr">283 </span>reagent::reagent<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> :original_string<span class="Delimiter">(</span>s<span class="Delimiter">),</span> type<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Comment">// Parsing reagent(string s)</span>
-<span id="L285" class="LineNr">285 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L286" class="LineNr">286 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L287" class="LineNr">287 </span>  <span class="Comment">// name and type</span>
-<span id="L288" class="LineNr">288 </span>  istringstream first_row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
-<span id="L289" class="LineNr">289 </span>  first_row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L290" class="LineNr">290 </span>  name = slurp_until<span class="Delimiter">(</span>first_row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
-<span id="L291" class="LineNr">291 </span>  string_tree* type_names = parse_property_list<span class="Delimiter">(</span>first_row<span class="Delimiter">);</span>
-<span id="L292" class="LineNr">292 </span>  <span class="Comment">// End Parsing Reagent Type Property(type_names)</span>
-<span id="L293" class="LineNr">293 </span>  type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
-<span id="L295" class="LineNr">295 </span>  <span class="Comment">// special cases</span>
-<span id="L296" class="LineNr">296 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>name<span class="Delimiter">)</span> &amp;&amp; type == <span class="Constant">NULL</span><span class="Delimiter">)</span>
-<span id="L297" class="LineNr">297 </span>    type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal&quot;</span><span class="Delimiter">);</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;_&quot;</span> &amp;&amp; type == <span class="Constant">NULL</span><span class="Delimiter">)</span>
-<span id="L299" class="LineNr">299 </span>    type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal&quot;</span><span class="Delimiter">);</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Comment">// other properties</span>
-<span id="L301" class="LineNr">301 </span>  slurp_properties<span class="Delimiter">(</span>in<span class="Delimiter">,</span> properties<span class="Delimiter">);</span>
-<span id="L302" class="LineNr">302 </span>  <span class="Comment">// End Parsing reagent</span>
-<span id="L303" class="LineNr">303 </span><span class="Delimiter">}</span>
-<span id="L304" class="LineNr">304 </span>
-<span id="L305" class="LineNr">305 </span><span class="Normal">void</span> slurp_properties<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L306" class="LineNr">306 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L307" class="LineNr">307 </span>    istringstream row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
-<span id="L308" class="LineNr">308 </span>    row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L309" class="LineNr">309 </span>    string key = slurp_until<span class="Delimiter">(</span>row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
-<span id="L310" class="LineNr">310 </span>    string_tree* value = parse_property_list<span class="Delimiter">(</span>row<span class="Delimiter">);</span>
-<span id="L311" class="LineNr">311 </span>    out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">));</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Delimiter">}</span>
-<span id="L313" class="LineNr">313 </span><span class="Delimiter">}</span>
-<span id="L314" class="LineNr">314 </span>
-<span id="L315" class="LineNr">315 </span>string_tree* parse_property_list<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L316" class="LineNr">316 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L317" class="LineNr">317 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L318" class="LineNr">318 </span>  string_tree* first = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">));</span>
-<span id="L319" class="LineNr">319 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">return</span> first<span class="Delimiter">;</span>
-<span id="L320" class="LineNr">320 </span>  string_tree* rest = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L321" class="LineNr">321 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; rest<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L322" class="LineNr">322 </span>    <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>first<span class="Delimiter">,</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>rest<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>first<span class="Delimiter">,</span> rest<span class="Delimiter">);</span>
-<span id="L324" class="LineNr">324 </span><span class="Delimiter">}</span>
-<span id="L325" class="LineNr">325 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L326" class="LineNr">326 </span><span class="Normal">void</span> test_parse_property_list_atom<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L327" class="LineNr">327 </span>  istringstream in<span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L328" class="LineNr">328 </span>  string_tree* x = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L329" class="LineNr">329 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L330" class="LineNr">330 </span>  <span class="Normal">delete</span> x<span class="Delimiter">;</span>
-<span id="L331" class="LineNr">331 </span><span class="Delimiter">}</span>
-<span id="L332" class="LineNr">332 </span><span class="Normal">void</span> test_parse_property_list_list<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L333" class="LineNr">333 </span>  istringstream in<span class="Delimiter">(</span><span class="Constant">&quot;a:b&quot;</span><span class="Delimiter">);</span>
-<span id="L334" class="LineNr">334 </span>  string_tree* x = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L335" class="LineNr">335 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L336" class="LineNr">336 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L337" class="LineNr">337 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L338" class="LineNr">338 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L339" class="LineNr">339 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L340" class="LineNr">340 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> <span class="Constant">&quot;b&quot;</span><span class="Delimiter">);</span>
-<span id="L341" class="LineNr">341 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">);</span>
-<span id="L342" class="LineNr">342 </span>  <span class="Normal">delete</span> x<span class="Delimiter">;</span>
-<span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
-<span id="L344" class="LineNr">344 </span>
-<span id="L345" class="LineNr">345 </span><span class="Delimiter">:(code)</span>
-<span id="L346" class="LineNr">346 </span>type_tree* <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* properties<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!properties<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L348" class="LineNr">348 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L349" class="LineNr">349 </span>    <span class="Normal">const</span> string&amp; type_name = properties<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L350" class="LineNr">350 </span>    <span class="Normal">int</span> value = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L351" class="LineNr">351 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type_name<span class="Delimiter">))</span>
-<span id="L352" class="LineNr">352 </span>      value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type_name<span class="Delimiter">);</span>
-<span id="L353" class="LineNr">353 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>type_name<span class="Delimiter">))</span>  <span class="Comment">// sometimes types will contain literal integers, like for the size of an array</span>
-<span id="L354" class="LineNr">354 </span>      value = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L355" class="LineNr">355 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>value == <span class="Constant">&quot;-&gt;&quot;</span><span class="Delimiter">)</span>  <span class="Comment">// used in recipe types</span>
-<span id="L356" class="LineNr">356 </span>      value = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L357" class="LineNr">357 </span>    <span class="Normal">else</span>
-<span id="L358" class="LineNr">358 </span>      value = -<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// should never happen; will trigger errors later</span>
-<span id="L359" class="LineNr">359 </span>    <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>type_name<span class="Delimiter">,</span> value<span class="Delimiter">);</span>
-<span id="L360" class="LineNr">360 </span>  <span class="Delimiter">}</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>left<span class="Delimiter">),</span>
-<span id="L362" class="LineNr">362 </span>                       <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>right<span class="Delimiter">));</span>
-<span id="L363" class="LineNr">363 </span><span class="Delimiter">}</span>
-<span id="L364" class="LineNr">364 </span>
-<span id="L365" class="LineNr">365 </span><span class="Comment">//: avoid memory leaks for the type tree</span>
-<span id="L366" class="LineNr">366 </span>
-<span id="L367" class="LineNr">367 </span>reagent::reagent<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; other<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L368" class="LineNr">368 </span>  original_string = other<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
-<span id="L369" class="LineNr">369 </span>  name = other<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L370" class="LineNr">370 </span>  value = other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L371" class="LineNr">371 </span>  initialized = other<span class="Delimiter">.</span>initialized<span class="Delimiter">;</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L373" class="LineNr">373 </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>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)));</span>
-<span id="L374" class="LineNr">374 </span>  <span class="Delimiter">}</span>
-<span id="L375" class="LineNr">375 </span>  type = copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Comment">// End reagent Copy Constructor</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span>
-<span id="L379" class="LineNr">379 </span>type_tree::type_tree<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L380" class="LineNr">380 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
-<span id="L381" class="LineNr">381 </span>  name = original<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L382" class="LineNr">382 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L383" class="LineNr">383 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
-<span id="L384" class="LineNr">384 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
-<span id="L385" class="LineNr">385 </span><span class="Delimiter">}</span>
-<span id="L386" class="LineNr">386 </span>
-<span id="L387" class="LineNr">387 </span>type_tree&amp; type_tree::<span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L388" class="LineNr">388 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
-<span id="L389" class="LineNr">389 </span>  name = original<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L390" class="LineNr">390 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L391" class="LineNr">391 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left<span class="Delimiter">)</span> <span class="Normal">delete</span> left<span class="Delimiter">;</span>
-<span id="L392" class="LineNr">392 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
-<span id="L393" class="LineNr">393 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right<span class="Delimiter">)</span> <span class="Normal">delete</span> right<span class="Delimiter">;</span>
-<span id="L394" class="LineNr">394 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
-<span id="L395" class="LineNr">395 </span>  <span class="Identifier">return</span> *<span class="Normal">this</span><span class="Delimiter">;</span>
-<span id="L396" class="LineNr">396 </span><span class="Delimiter">}</span>
-<span id="L397" class="LineNr">397 </span>
-<span id="L398" class="LineNr">398 </span><span class="Normal">bool</span> type_tree::<span class="Normal">operator</span>==<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
-<span id="L399" class="LineNr">399 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom != other<span class="Delimiter">.</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom<span class="Delimiter">)</span>
-<span id="L401" class="LineNr">401 </span>    <span class="Identifier">return</span> name == other<span class="Delimiter">.</span>name &amp;&amp; value == other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L402" class="LineNr">402 </span>  <span class="Identifier">return</span> <span class="Delimiter">(</span>left == other<span class="Delimiter">.</span>left || *left == *other<span class="Delimiter">.</span>left<span class="Delimiter">)</span>
-<span id="L403" class="LineNr">403 </span>      &amp;&amp; <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>right || *right == *other<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
-<span id="L404" class="LineNr">404 </span><span class="Delimiter">}</span>
-<span id="L405" class="LineNr">405 </span>
-<span id="L406" class="LineNr">406 </span><span class="Comment">// only constraint we care about: if a &lt; b then !(b &lt; a)</span>
-<span id="L407" class="LineNr">407 </span><span class="Normal">bool</span> type_tree::<span class="Normal">operator</span>&lt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
-<span id="L408" class="LineNr">408 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom != other<span class="Delimiter">.</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> atom &gt; other<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>  <span class="Comment">// atoms before non-atoms</span>
-<span id="L409" class="LineNr">409 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> value &lt; other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L410" class="LineNr">410 </span>  <span class="Comment">// first location in one that's missing in the other makes that side 'smaller'</span>
-<span id="L411" class="LineNr">411 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left &amp;&amp; !other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L412" class="LineNr">412 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!left &amp;&amp; other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L413" class="LineNr">413 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right &amp;&amp; !other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L414" class="LineNr">414 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!right &amp;&amp; other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L415" class="LineNr">415 </span>  <span class="Comment">// now if either pointer is unequal neither side can be null</span>
-<span id="L416" class="LineNr">416 </span>  <span class="Comment">// if one side is equal that's easy</span>
-<span id="L417" class="LineNr">417 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left == other<span class="Delimiter">.</span>left || *left == *other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span> right &amp;&amp; *right &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">;</span>
-<span id="L418" class="LineNr">418 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>right || *right == *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> left &amp;&amp; *left &lt; *other<span class="Delimiter">.</span>left<span class="Delimiter">;</span>
-<span id="L419" class="LineNr">419 </span>  <span class="Comment">// if the two sides criss-cross, pick the side with the smaller lhs</span>
-<span id="L420" class="LineNr">420 </span>  <span class="Normal">if</span> <span class="Delimiter">((</span>left == other<span class="Delimiter">.</span>right || *left == *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span>
-<span id="L421" class="LineNr">421 </span>      &amp;&amp; <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>left || *right == *other<span class="Delimiter">.</span>left<span class="Delimiter">))</span>
-<span id="L422" class="LineNr">422 </span>    <span class="Identifier">return</span> *left &lt; *other<span class="Delimiter">.</span>left<span class="Delimiter">;</span>
-<span id="L423" class="LineNr">423 </span>  <span class="Comment">// now the hard case: both sides are not equal</span>
-<span id="L424" class="LineNr">424 </span>  <span class="Comment">// make sure we stay consistent between (a &lt; b) and (b &lt; a)</span>
-<span id="L425" class="LineNr">425 </span>  <span class="Comment">// just return the side with the smallest of the 4 branches</span>
-<span id="L426" class="LineNr">426 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*left &lt; *other<span class="Delimiter">.</span>left &amp;&amp; *left &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*right &lt; *other<span class="Delimiter">.</span>left &amp;&amp; *right &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L428" class="LineNr">428 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L429" class="LineNr">429 </span><span class="Delimiter">}</span>
-<span id="L430" class="LineNr">430 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L431" class="LineNr">431 </span><span class="Comment">// These unit tests don't always use valid types.</span>
-<span id="L432" class="LineNr">432 </span><span class="Normal">void</span> test_compare_atom_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L433" class="LineNr">433 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean&quot;</span><span class="Delimiter">);</span>
-<span id="L434" class="LineNr">434 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L435" class="LineNr">435 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L436" class="LineNr">436 </span><span class="Delimiter">}</span>
-<span id="L437" class="LineNr">437 </span><span class="Normal">void</span> test_compare_equal_atom_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L438" class="LineNr">438 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:address&quot;</span><span class="Delimiter">);</span>
-<span id="L439" class="LineNr">439 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L440" class="LineNr">440 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L441" class="LineNr">441 </span><span class="Delimiter">}</span>
-<span id="L442" class="LineNr">442 </span><span class="Normal">void</span> test_compare_atom_with_non_atom<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L443" class="LineNr">443 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:number&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean&quot;</span><span class="Delimiter">);</span>
-<span id="L444" class="LineNr">444 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L445" class="LineNr">445 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L446" class="LineNr">446 </span><span class="Delimiter">}</span>
-<span id="L447" class="LineNr">447 </span><span class="Normal">void</span> test_compare_lists_with_identical_structure<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L448" class="LineNr">448 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L80'>address</a>:boolean&quot;</span><span class="Delimiter">);</span>
-<span id="L449" class="LineNr">449 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L450" class="LineNr">450 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L451" class="LineNr">451 </span><span class="Delimiter">}</span>
-<span id="L452" class="LineNr">452 </span><span class="Normal">void</span> test_compare_identical_lists<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L453" class="LineNr">453 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:boolean&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L80'>address</a>:boolean&quot;</span><span class="Delimiter">);</span>
-<span id="L454" class="LineNr">454 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L455" class="LineNr">455 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L456" class="LineNr">456 </span><span class="Delimiter">}</span>
-<span id="L457" class="LineNr">457 </span><span class="Normal">void</span> test_compare_list_with_extra_element<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L458" class="LineNr">458 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L80'>address</a>:<a href='043space.cc.html#L80'>address</a>:number&quot;</span><span class="Delimiter">);</span>
-<span id="L459" class="LineNr">459 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L460" class="LineNr">460 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L461" class="LineNr">461 </span><span class="Delimiter">}</span>
-<span id="L462" class="LineNr">462 </span><span class="Normal">void</span> test_compare_list_with_smaller_left_but_larger_right<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L463" class="LineNr">463 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:number:character&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean:array&quot;</span><span class="Delimiter">);</span>
-<span id="L464" class="LineNr">464 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L465" class="LineNr">465 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L466" class="LineNr">466 </span><span class="Delimiter">}</span>
-<span id="L467" class="LineNr">467 </span><span class="Normal">void</span> test_compare_list_with_smaller_left_but_larger_right_identical_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L468" class="LineNr">468 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:boolean&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean:address&quot;</span><span class="Delimiter">);</span>
-<span id="L469" class="LineNr">469 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L470" class="LineNr">470 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L471" class="LineNr">471 </span><span class="Delimiter">}</span>
-<span id="L472" class="LineNr">472 </span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">:(code)</span>
-<span id="L474" class="LineNr">474 </span>string_tree::string_tree<span class="Delimiter">(</span><span class="Normal">const</span> string_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L475" class="LineNr">475 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
-<span id="L476" class="LineNr">476 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L477" class="LineNr">477 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
-<span id="L478" class="LineNr">478 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
-<span id="L479" class="LineNr">479 </span><span class="Delimiter">}</span>
-<span id="L480" class="LineNr">480 </span>
-<span id="L481" class="LineNr">481 </span>reagent&amp; reagent::<span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; other<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L482" class="LineNr">482 </span>  original_string = other<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
-<span id="L483" class="LineNr">483 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L484" class="LineNr">484 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span> <span class="Normal">delete</span> properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
-<span id="L485" class="LineNr">485 </span>  properties<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L486" class="LineNr">486 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L487" class="LineNr">487 </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>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)));</span>
-<span id="L488" class="LineNr">488 </span>  name = other<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L489" class="LineNr">489 </span>  value = other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L490" class="LineNr">490 </span>  initialized = other<span class="Delimiter">.</span>initialized<span class="Delimiter">;</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">)</span> <span class="Normal">delete</span> type<span class="Delimiter">;</span>
-<span id="L492" class="LineNr">492 </span>  type = copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L493" class="LineNr">493 </span>  <span class="Comment">// End reagent Copy Operator</span>
-<span id="L494" class="LineNr">494 </span>  <span class="Identifier">return</span> *<span class="Normal">this</span><span class="Delimiter">;</span>
-<span id="L495" class="LineNr">495 </span><span class="Delimiter">}</span>
-<span id="L496" class="LineNr">496 </span>
-<span id="L497" class="LineNr">497 </span>reagent::~reagent<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L498" class="LineNr">498 </span>  <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L499" class="LineNr">499 </span><span class="Delimiter">}</span>
-<span id="L500" class="LineNr">500 </span>
-<span id="L501" class="LineNr">501 </span><span class="Normal">void</span> reagent::<a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L502" class="LineNr">502 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L503" class="LineNr">503 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L504" class="LineNr">504 </span>      <span class="Normal">delete</span> properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
-<span id="L505" class="LineNr">505 </span>      properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L506" class="LineNr">506 </span>    <span class="Delimiter">}</span>
-<span id="L507" class="LineNr">507 </span>  <span class="Delimiter">}</span>
-<span id="L508" class="LineNr">508 </span>  <span class="Normal">delete</span> type<span class="Delimiter">;</span>
-<span id="L509" class="LineNr">509 </span>  type = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L510" class="LineNr">510 </span><span class="Delimiter">}</span>
-<span id="L511" class="LineNr">511 </span>type_tree::~type_tree<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L512" class="LineNr">512 </span>  <span class="Normal">delete</span> left<span class="Delimiter">;</span>
-<span id="L513" class="LineNr">513 </span>  <span class="Normal">delete</span> right<span class="Delimiter">;</span>
-<span id="L514" class="LineNr">514 </span><span class="Delimiter">}</span>
-<span id="L515" class="LineNr">515 </span>string_tree::~string_tree<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L516" class="LineNr">516 </span>  <span class="Normal">delete</span> left<span class="Delimiter">;</span>
-<span id="L517" class="LineNr">517 </span>  <span class="Normal">delete</span> right<span class="Delimiter">;</span>
-<span id="L518" class="LineNr">518 </span><span class="Delimiter">}</span>
-<span id="L519" class="LineNr">519 </span>
-<span id="L520" class="LineNr">520 </span><span class="Normal">void</span> append<span class="Delimiter">(</span>type_tree*&amp; base<span class="Delimiter">,</span> type_tree* extra<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L521" class="LineNr">521 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L522" class="LineNr">522 </span>    base = extra<span class="Delimiter">;</span>
-<span id="L523" class="LineNr">523 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L524" class="LineNr">524 </span>  <span class="Delimiter">}</span>
-<span id="L525" class="LineNr">525 </span>  type_tree* curr = base<span class="Delimiter">;</span>
-<span id="L526" class="LineNr">526 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L527" class="LineNr">527 </span>  curr<span class="Delimiter">-&gt;</span>right = extra<span class="Delimiter">;</span>
-<span id="L528" class="LineNr">528 </span><span class="Delimiter">}</span>
-<span id="L529" class="LineNr">529 </span>
-<span id="L530" class="LineNr">530 </span><span class="Normal">void</span> append<span class="Delimiter">(</span>string_tree*&amp; base<span class="Delimiter">,</span> string_tree* extra<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L531" class="LineNr">531 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L532" class="LineNr">532 </span>    base = extra<span class="Delimiter">;</span>
-<span id="L533" class="LineNr">533 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L534" class="LineNr">534 </span>  <span class="Delimiter">}</span>
-<span id="L535" class="LineNr">535 </span>  string_tree* curr = base<span class="Delimiter">;</span>
-<span id="L536" class="LineNr">536 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L537" class="LineNr">537 </span>  curr<span class="Delimiter">-&gt;</span>right = extra<span class="Delimiter">;</span>
-<span id="L538" class="LineNr">538 </span><span class="Delimiter">}</span>
-<span id="L539" class="LineNr">539 </span>
-<span id="L540" class="LineNr">540 </span>string slurp_until<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> <span class="Normal">char</span> delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L541" class="LineNr">541 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L542" class="LineNr">542 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
-<span id="L543" class="LineNr">543 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L544" class="LineNr">544 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L545" class="LineNr">545 </span>      <span class="Comment">// drop the delim</span>
-<span id="L546" class="LineNr">546 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L547" class="LineNr">547 </span>    <span class="Delimiter">}</span>
-<span id="L548" class="LineNr">548 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
-<span id="L549" class="LineNr">549 </span>  <span class="Delimiter">}</span>
-<span id="L550" class="LineNr">550 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L551" class="LineNr">551 </span><span class="Delimiter">}</span>
-<span id="L552" class="LineNr">552 </span>
-<span id="L553" class="LineNr">553 </span><span class="Normal">bool</span> has_property<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L554" class="LineNr">554 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L555" class="LineNr">555 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first == name<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L556" class="LineNr">556 </span>  <span class="Delimiter">}</span>
-<span id="L557" class="LineNr">557 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span><span class="Delimiter">}</span>
-<span id="L559" class="LineNr">559 </span>
-<span id="L560" class="LineNr">560 </span>string_tree* property<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L561" class="LineNr">561 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> p = <span class="Constant">0</span><span class="Delimiter">;</span>  p != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L562" class="LineNr">562 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">).</span>first == name<span class="Delimiter">)</span>
-<span id="L563" class="LineNr">563 </span>      <span class="Identifier">return</span> r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
-<span id="L564" class="LineNr">564 </span>  <span class="Delimiter">}</span>
-<span id="L565" class="LineNr">565 </span>  <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L566" class="LineNr">566 </span><span class="Delimiter">}</span>
-<span id="L567" class="LineNr">567 </span>
-<span id="L568" class="LineNr">568 </span>string_tree* copy<span class="Delimiter">(</span><span class="Normal">const</span> string_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L569" class="LineNr">569 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L570" class="LineNr">570 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>*x<span class="Delimiter">);</span>
-<span id="L571" class="LineNr">571 </span><span class="Delimiter">}</span>
-<span id="L572" class="LineNr">572 </span>
-<span id="L573" class="LineNr">573 </span>type_tree* copy<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L574" class="LineNr">574 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L575" class="LineNr">575 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*x<span class="Delimiter">);</span>
-<span id="L576" class="LineNr">576 </span><span class="Delimiter">}</span>
-<span id="L577" class="LineNr">577 </span>
-<span id="L578" class="LineNr">578 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L579" class="LineNr">579 </span><span class="Normal">extern</span> <span class="Normal">const</span> string Ignore<span class="Delimiter">(</span><span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// commas are ignored in Mu except within [] strings</span>
-<span id="L580" class="LineNr">580 </span><span class="Delimiter">:(code)</span>
-<span id="L581" class="LineNr">581 </span><span class="Normal">void</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L582" class="LineNr">582 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L583" class="LineNr">583 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L584" class="LineNr">584 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L585" class="LineNr">585 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L586" class="LineNr">586 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L587" class="LineNr">587 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L588" class="LineNr">588 </span>  <span class="Delimiter">}</span>
-<span id="L589" class="LineNr">589 </span><span class="Delimiter">}</span>
-<span id="L590" class="LineNr">590 </span>
-<span id="L591" class="LineNr">591 </span><span class="Normal">void</span> dump_memory<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L592" class="LineNr">592 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">double</span>&gt;::iterator p = Memory<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Memory<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L593" class="LineNr">593 </span>    cout &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L594" class="LineNr">594 </span>  <span class="Delimiter">}</span>
-<span id="L595" class="LineNr">595 </span><span class="Delimiter">}</span>
-<span id="L596" class="LineNr">596 </span>
-<span id="L597" class="LineNr">597 </span><span class="SalientComment">//:: Helpers for converting various values to string</span>
-<span id="L598" class="LineNr">598 </span><span class="Comment">//: Use to_string() in trace(), and try to keep it stable from run to run.</span>
-<span id="L599" class="LineNr">599 </span><span class="Comment">//: Use debug_string() while debugging, and throw everything into it.</span>
-<span id="L600" class="LineNr">600 </span><span class="Comment">//: Use inspect() only for emitting a canonical format that can be parsed back</span>
-<span id="L601" class="LineNr">601 </span><span class="Comment">//: into the value.</span>
-<span id="L602" class="LineNr">602 </span>
-<span id="L603" class="LineNr">603 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L604" class="LineNr">604 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L605" class="LineNr">605 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L606" class="LineNr">606 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L607" class="LineNr">607 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L608" class="LineNr">608 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L609" class="LineNr">609 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L610" class="LineNr">610 </span><span class="Delimiter">}</span>
-<span id="L611" class="LineNr">611 </span>
-<span id="L612" class="LineNr">612 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L613" class="LineNr">613 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L614" class="LineNr">614 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L615" class="LineNr">615 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L616" class="LineNr">616 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L617" class="LineNr">617 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L618" class="LineNr">618 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L619" class="LineNr">619 </span><span class="Delimiter">}</span>
-<span id="L620" class="LineNr">620 </span>
-<span id="L621" class="LineNr">621 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L622" class="LineNr">622 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L623" class="LineNr">623 </span>  out &lt;&lt; <span class="Constant">&quot;- <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L624" class="LineNr">624 </span>  <span class="Comment">// Begin debug_string(recipe x)</span>
-<span id="L625" class="LineNr">625 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L626" class="LineNr">626 </span>    <span class="Normal">const</span> instruction&amp; inst = x<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L627" class="LineNr">627 </span>    out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L628" class="LineNr">628 </span>    out &lt;&lt; <span class="Constant">&quot;  ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L629" class="LineNr">629 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L630" class="LineNr">630 </span>      out &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L631" class="LineNr">631 </span>    out &lt;&lt; <span class="Constant">&quot;  products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L632" class="LineNr">632 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L633" class="LineNr">633 </span>      out &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L634" class="LineNr">634 </span>  <span class="Delimiter">}</span>
-<span id="L635" class="LineNr">635 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L636" class="LineNr">636 </span><span class="Delimiter">}</span>
-<span id="L637" class="LineNr">637 </span>
-<span id="L638" class="LineNr">638 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L639" class="LineNr">639 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
-<span id="L640" class="LineNr">640 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>original_string<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
-<span id="L641" class="LineNr">641 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L642" class="LineNr">642 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L643" class="LineNr">643 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L644" class="LineNr">644 </span>    out &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
-<span id="L645" class="LineNr">645 </span>  <span class="Delimiter">}</span>
-<span id="L646" class="LineNr">646 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
-<span id="L647" class="LineNr">647 </span>  out &lt;&lt; inst<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L648" class="LineNr">648 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L649" class="LineNr">649 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L650" class="LineNr">650 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L651" class="LineNr">651 </span>    out &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
-<span id="L652" class="LineNr">652 </span>  <span class="Delimiter">}</span>
-<span id="L653" class="LineNr">653 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L654" class="LineNr">654 </span><span class="Delimiter">}</span>
-<span id="L655" class="LineNr">655 </span>
-<span id="L656" class="LineNr">656 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L657" class="LineNr">657 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
-<span id="L658" class="LineNr">658 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L659" class="LineNr">659 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L660" class="LineNr">660 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L661" class="LineNr">661 </span>    out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L662" class="LineNr">662 </span>  <span class="Delimiter">}</span>
-<span id="L663" class="LineNr">663 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
-<span id="L664" class="LineNr">664 </span>  out &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L665" class="LineNr">665 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L666" class="LineNr">666 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
-<span id="L667" class="LineNr">667 </span>    out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L668" class="LineNr">668 </span>  <span class="Delimiter">}</span>
-<span id="L669" class="LineNr">669 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L670" class="LineNr">670 </span><span class="Delimiter">}</span>
-<span id="L671" class="LineNr">671 </span>
-<span id="L672" class="LineNr">672 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L673" class="LineNr">673 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
-<span id="L674" class="LineNr">674 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L675" class="LineNr">675 </span>  out &lt;&lt; <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
-<span id="L676" class="LineNr">676 </span>  out &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L677" class="LineNr">677 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L678" class="LineNr">678 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L679" class="LineNr">679 </span>      out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
-<span id="L680" class="LineNr">680 </span>  <span class="Delimiter">}</span>
-<span id="L681" class="LineNr">681 </span>  out &lt;&lt; <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
-<span id="L682" class="LineNr">682 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L683" class="LineNr">683 </span><span class="Delimiter">}</span>
-<span id="L684" class="LineNr">684 </span>
-<span id="L685" class="LineNr">685 </span><span class="Comment">// special name for ignoring some products</span>
-<span id="L686" class="LineNr">686 </span><span class="Normal">bool</span> is_dummy<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L687" class="LineNr">687 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>name == <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
-<span id="L688" class="LineNr">688 </span><span class="Delimiter">}</span>
-<span id="L689" class="LineNr">689 </span>
-<span id="L690" class="LineNr">690 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L691" class="LineNr">691 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L692" class="LineNr">692 </span>  out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L693" class="LineNr">693 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L694" class="LineNr">694 </span><span class="Delimiter">}</span>
-<span id="L695" class="LineNr">695 </span>
-<span id="L696" class="LineNr">696 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L697" class="LineNr">697 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!property<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
-<span id="L698" class="LineNr">698 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L699" class="LineNr">699 </span>  <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>property<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L700" class="LineNr">700 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L701" class="LineNr">701 </span><span class="Delimiter">}</span>
-<span id="L702" class="LineNr">702 </span>
-<span id="L703" class="LineNr">703 </span><span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L704" class="LineNr">704 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L705" class="LineNr">705 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L706" class="LineNr">706 </span>    out &lt;&lt; <span class="Constant">'&quot;'</span> &lt;&lt; x<span class="Delimiter">-&gt;</span>value &lt;&lt; <span class="Constant">'&quot;'</span><span class="Delimiter">;</span>
-<span id="L707" class="LineNr">707 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L708" class="LineNr">708 </span>  <span class="Delimiter">}</span>
-<span id="L709" class="LineNr">709 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
-<span id="L710" class="LineNr">710 </span>  <span class="Normal">const</span> string_tree* curr = x<span class="Delimiter">;</span>
-<span id="L711" class="LineNr">711 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L712" class="LineNr">712 </span>    <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L713" class="LineNr">713 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L714" class="LineNr">714 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L715" class="LineNr">715 </span>  <span class="Delimiter">}</span>
-<span id="L716" class="LineNr">716 </span>  <span class="Comment">// check for dotted list; should never happen</span>
-<span id="L717" class="LineNr">717 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L718" class="LineNr">718 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
-<span id="L719" class="LineNr">719 </span>    <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L720" class="LineNr">720 </span>  <span class="Delimiter">}</span>
-<span id="L721" class="LineNr">721 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
-<span id="L722" class="LineNr">722 </span><span class="Delimiter">}</span>
-<span id="L723" class="LineNr">723 </span>
-<span id="L724" class="LineNr">724 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L725" class="LineNr">725 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
-<span id="L726" class="LineNr">726 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L727" class="LineNr">727 </span>  <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L728" class="LineNr">728 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L729" class="LineNr">729 </span><span class="Delimiter">}</span>
-<span id="L730" class="LineNr">730 </span>
-<span id="L731" class="LineNr">731 </span><span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L732" class="LineNr">732 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L733" class="LineNr">733 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L734" class="LineNr">734 </span>    <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L735" class="LineNr">735 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L736" class="LineNr">736 </span>  <span class="Delimiter">}</span>
-<span id="L737" class="LineNr">737 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
-<span id="L738" class="LineNr">738 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
-<span id="L739" class="LineNr">739 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L740" class="LineNr">740 </span>    <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L741" class="LineNr">741 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L742" class="LineNr">742 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L743" class="LineNr">743 </span>  <span class="Delimiter">}</span>
-<span id="L744" class="LineNr">744 </span>  <span class="Comment">// check for dotted list; should never happen</span>
-<span id="L745" class="LineNr">745 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L746" class="LineNr">746 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
-<span id="L747" class="LineNr">747 </span>    <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L748" class="LineNr">748 </span>  <span class="Delimiter">}</span>
-<span id="L749" class="LineNr">749 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
-<span id="L750" class="LineNr">750 </span><span class="Delimiter">}</span>
-<span id="L751" class="LineNr">751 </span>
-<span id="L752" class="LineNr">752 </span><span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span><a href='010vm.cc.html#L124'>type_ordinal</a> type<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L753" class="LineNr">753 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
-<span id="L754" class="LineNr">754 </span>    out &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L755" class="LineNr">755 </span>  <span class="Normal">else</span>
-<span id="L756" class="LineNr">756 </span>    out &lt;&lt; <span class="Constant">&quot;?&quot;</span> &lt;&lt; type<span class="Delimiter">;</span>
-<span id="L757" class="LineNr">757 </span><span class="Delimiter">}</span>
-<span id="L758" class="LineNr">758 </span>
-<span id="L759" class="LineNr">759 </span>string names_to_string<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L760" class="LineNr">760 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// should never happen</span>
-<span id="L761" class="LineNr">761 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L762" class="LineNr">762 </span>  dump_names<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L763" class="LineNr">763 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L764" class="LineNr">764 </span><span class="Delimiter">}</span>
-<span id="L765" class="LineNr">765 </span>
-<span id="L766" class="LineNr">766 </span><span class="Normal">void</span> dump_names<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L767" class="LineNr">767 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L768" class="LineNr">768 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L769" class="LineNr">769 </span>    out &lt;&lt; <span class="Constant">'&quot;'</span> &lt;&lt; x<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">'&quot;'</span><span class="Delimiter">;</span>
-<span id="L770" class="LineNr">770 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L771" class="LineNr">771 </span>  <span class="Delimiter">}</span>
-<span id="L772" class="LineNr">772 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
-<span id="L773" class="LineNr">773 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
-<span id="L774" class="LineNr">774 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L775" class="LineNr">775 </span>    dump_names<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L776" class="LineNr">776 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L777" class="LineNr">777 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L778" class="LineNr">778 </span>  <span class="Delimiter">}</span>
-<span id="L779" class="LineNr">779 </span>  <span class="Comment">// check for dotted list; should never happen</span>
-<span id="L780" class="LineNr">780 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L781" class="LineNr">781 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
-<span id="L782" class="LineNr">782 </span>    dump_names<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L783" class="LineNr">783 </span>  <span class="Delimiter">}</span>
-<span id="L784" class="LineNr">784 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
-<span id="L785" class="LineNr">785 </span><span class="Delimiter">}</span>
-<span id="L786" class="LineNr">786 </span>
-<span id="L787" class="LineNr">787 </span>string names_to_string_without_quotes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L788" class="LineNr">788 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
-<span id="L789" class="LineNr">789 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L790" class="LineNr">790 </span>  dump_names_without_quotes<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L791" class="LineNr">791 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L792" class="LineNr">792 </span><span class="Delimiter">}</span>
-<span id="L793" class="LineNr">793 </span>
-<span id="L794" class="LineNr">794 </span><span class="Normal">void</span> dump_names_without_quotes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L795" class="LineNr">795 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L796" class="LineNr">796 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L797" class="LineNr">797 </span>    out &lt;&lt; x<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
-<span id="L798" class="LineNr">798 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L799" class="LineNr">799 </span>  <span class="Delimiter">}</span>
-<span id="L800" class="LineNr">800 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
-<span id="L801" class="LineNr">801 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
-<span id="L802" class="LineNr">802 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L803" class="LineNr">803 </span>    dump_names_without_quotes<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L804" class="LineNr">804 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L805" class="LineNr">805 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L806" class="LineNr">806 </span>  <span class="Delimiter">}</span>
-<span id="L807" class="LineNr">807 </span>  <span class="Comment">// check for dotted list; should never happen</span>
-<span id="L808" class="LineNr">808 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L809" class="LineNr">809 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
-<span id="L810" class="LineNr">810 </span>    dump_names_without_quotes<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L811" class="LineNr">811 </span>  <span class="Delimiter">}</span>
-<span id="L812" class="LineNr">812 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
-<span id="L813" class="LineNr">813 </span><span class="Delimiter">}</span>
-<span id="L814" class="LineNr">814 </span>
-<span id="L815" class="LineNr">815 </span><span class="Normal">bool</span> is_integer<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L816" class="LineNr">816 </span>  <span class="Identifier">return</span> s<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789-&quot;</span><span class="Delimiter">)</span> == string::npos  <span class="Comment">// no other characters</span>
-<span id="L817" class="LineNr">817 </span>      &amp;&amp; s<span class="Delimiter">.</span>find_first_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos  <span class="Comment">// at least one digit</span>
-<span id="L818" class="LineNr">818 </span>      &amp;&amp; s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'-'</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">;</span>  <span class="Comment">// '-' only at first position</span>
-<span id="L819" class="LineNr">819 </span><span class="Delimiter">}</span>
-<span id="L820" class="LineNr">820 </span>
-<span id="L821" class="LineNr">821 </span><span class="Normal">int</span> to_integer<span class="Delimiter">(</span>string n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L822" class="LineNr">822 </span>  <span class="Normal">char</span>* <a href='003trace.cc.html#L203'>end</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L823" class="LineNr">823 </span>  <span class="Comment">// safe because string.c_str() is guaranteed to be null-terminated</span>
-<span id="L824" class="LineNr">824 </span>  <span class="Normal">int</span> result = strtoll<span class="Delimiter">(</span>n<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;end<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">any base</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L825" class="LineNr">825 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*end != <span class="cSpecial">'\0'</span><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;tried to convert &quot;</span> &lt;&lt; n &lt;&lt; <span class="Constant">&quot; to number</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L826" class="LineNr">826 </span>  assert<span class="Delimiter">(</span>*end == <span class="cSpecial">'\0'</span><span class="Delimiter">);</span>
-<span id="L827" class="LineNr">827 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L828" class="LineNr">828 </span><span class="Delimiter">}</span>
-<span id="L829" class="LineNr">829 </span>
-<span id="L830" class="LineNr">830 </span><span class="Normal">void</span> test_is_integer<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L831" class="LineNr">831 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;1234&quot;</span><span class="Delimiter">));</span>
-<span id="L832" class="LineNr">832 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-1&quot;</span><span class="Delimiter">));</span>
-<span id="L833" class="LineNr">833 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;234.0&quot;</span><span class="Delimiter">));</span>
-<span id="L834" class="LineNr">834 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-567&quot;</span><span class="Delimiter">));</span>
-<span id="L835" class="LineNr">835 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;89-0&quot;</span><span class="Delimiter">));</span>
-<span id="L836" class="LineNr">836 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-&quot;</span><span class="Delimiter">));</span>
-<span id="L837" class="LineNr">837 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;1e3&quot;</span><span class="Delimiter">));</span>  <span class="Comment">// not supported</span>
-<span id="L838" class="LineNr">838 </span><span class="Delimiter">}</span>
-<span id="L839" class="LineNr">839 </span>
-<span id="L840" class="LineNr">840 </span><span class="Comment">//: helper to print numbers without excessive precision</span>
-<span id="L841" class="LineNr">841 </span>
-<span id="L842" class="LineNr">842 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L843" class="LineNr">843 </span><span class="Normal">struct</span> no_scientific <span class="Delimiter">{</span>
-<span id="L844" class="LineNr">844 </span>  <span class="Normal">double</span> x<span class="Delimiter">;</span>
-<span id="L845" class="LineNr">845 </span>  <span class="Normal">explicit</span> no_scientific<span class="Delimiter">(</span><span class="Normal">double</span> y<span class="Delimiter">)</span> :x<span class="Delimiter">(</span>y<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L846" class="LineNr">846 </span><span class="Delimiter">};</span>
-<span id="L847" class="LineNr">847 </span>
-<span id="L848" class="LineNr">848 </span><span class="Delimiter">:(code)</span>
-<span id="L849" class="LineNr">849 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> no_scientific x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L850" class="LineNr">850 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!isfinite<span class="Delimiter">(</span>x<span class="Delimiter">.</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L851" class="LineNr">851 </span>    <span class="Comment">// Infinity or NaN</span>
-<span id="L852" class="LineNr">852 </span>    os &lt;&lt; x<span class="Delimiter">.</span>x<span class="Delimiter">;</span>
-<span id="L853" class="LineNr">853 </span>    <span class="Identifier">return</span> os<span class="Delimiter">;</span>
-<span id="L854" class="LineNr">854 </span>  <span class="Delimiter">}</span>
-<span id="L855" class="LineNr">855 </span>  ostringstream tmp<span class="Delimiter">;</span>
-<span id="L856" class="LineNr">856 </span>  <span class="Comment">// more accurate, but too slow</span>
-<span id="L857" class="LineNr">857 </span><span class="CommentedCode">//?   tmp.precision(308);  // for 64-bit numbers</span>
-<span id="L858" class="LineNr">858 </span>  tmp &lt;&lt; std::fixed &lt;&lt; x<span class="Delimiter">.</span>x<span class="Delimiter">;</span>
-<span id="L859" class="LineNr">859 </span>  os &lt;&lt; trim_floating_point<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
-<span id="L860" class="LineNr">860 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
-<span id="L861" class="LineNr">861 </span><span class="Delimiter">}</span>
-<span id="L862" class="LineNr">862 </span>
-<span id="L863" class="LineNr">863 </span>string trim_floating_point<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L864" class="LineNr">864 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L865" class="LineNr">865 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'.'</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">)</span> <span class="Identifier">return</span> in<span class="Delimiter">;</span>
-<span id="L866" class="LineNr">866 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L867" class="LineNr">867 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>length &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L868" class="LineNr">868 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>length-<span class="Constant">1</span><span class="Delimiter">)</span> != <span class="Constant">'0'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L869" class="LineNr">869 </span>    --length<span class="Delimiter">;</span>
-<span id="L870" class="LineNr">870 </span>  <span class="Delimiter">}</span>
-<span id="L871" class="LineNr">871 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>length-<span class="Constant">1</span><span class="Delimiter">)</span> == <span class="Constant">'.'</span><span class="Delimiter">)</span> --length<span class="Delimiter">;</span>
-<span id="L872" class="LineNr">872 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;0&quot;</span><span class="Delimiter">;</span>
-<span id="L873" class="LineNr">873 </span>  <span class="Identifier">return</span> in<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
-<span id="L874" class="LineNr">874 </span><span class="Delimiter">}</span>
-<span id="L875" class="LineNr">875 </span>
-<span id="L876" class="LineNr">876 </span><span class="Normal">void</span> test_trim_floating_point<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L877" class="LineNr">877 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L878" class="LineNr">878 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;0&quot;</span><span class="Delimiter">);</span>
-<span id="L879" class="LineNr">879 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;1.5000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;1.5&quot;</span><span class="Delimiter">);</span>
-<span id="L880" class="LineNr">880 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;1.000001&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;1.000001&quot;</span><span class="Delimiter">);</span>
-<span id="L881" class="LineNr">881 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.000000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
-<span id="L882" class="LineNr">882 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
-<span id="L883" class="LineNr">883 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
-<span id="L884" class="LineNr">884 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
-<span id="L885" class="LineNr">885 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;230&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;230&quot;</span><span class="Delimiter">);</span>
-<span id="L886" class="LineNr">886 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.000000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
-<span id="L887" class="LineNr">887 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
-<span id="L888" class="LineNr">888 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
-<span id="L889" class="LineNr">889 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
-<span id="L890" class="LineNr">890 </span><span class="Delimiter">}</span>
-<span id="L891" class="LineNr">891 </span>
-<span id="L892" class="LineNr">892 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L893" class="LineNr">893 </span><span class="PreProc">#include </span><span class="Constant">&lt;utility&gt;</span>
-<span id="L894" class="LineNr">894 </span><span class="Normal">using</span> std::pair<span class="Delimiter">;</span>
-<span id="L895" class="LineNr">895 </span><span class="PreProc">#include </span><span class="Constant">&lt;math.h&gt;</span>
+<span id="L262" class="LineNr">262 </span><span class="SalientComment">//:: Helpers</span>
+<span id="L263" class="LineNr">263 </span>
+<span id="L264" class="LineNr">264 </span><span class="Delimiter">:(code)</span>
+<span id="L265" class="LineNr">265 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span>::<a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L266" class="LineNr">266 </span>  ordinal = -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L267" class="LineNr">267 </span>  <span class="Comment">// End recipe Constructor</span>
+<span id="L268" class="LineNr">268 </span><span class="Delimiter">}</span>
+<span id="L269" class="LineNr">269 </span>
+<span id="L270" class="LineNr">270 </span><a href='010vm.cc.html#L33'>instruction</a>::<a href='010vm.cc.html#L33'>instruction</a><span class="Delimiter">()</span> :is_label<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">),</span> operation<span class="Delimiter">(</span><a href='010vm.cc.html#L195'>IDLE</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Comment">// End instruction Constructor</span>
+<span id="L272" class="LineNr">272 </span><span class="Delimiter">}</span>
+<span id="L273" class="LineNr">273 </span><span class="Normal">void</span> <a href='010vm.cc.html#L33'>instruction</a>::<a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L274" class="LineNr">274 </span>  is_label=<span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L275" class="LineNr">275 </span>  label<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L276" class="LineNr">276 </span>  name<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L277" class="LineNr">277 </span>  operation=IDLE<span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span>  ingredients<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L279" class="LineNr">279 </span>  products<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L280" class="LineNr">280 </span>  original_string<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Comment">// End instruction Clear</span>
+<span id="L282" class="LineNr">282 </span><span class="Delimiter">}</span>
+<span id="L283" class="LineNr">283 </span><span class="Normal">bool</span> <a href='010vm.cc.html#L33'>instruction</a>::is_empty<span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> !is_label &amp;&amp; name<span class="Delimiter">.</span>empty<span class="Delimiter">();</span> <span class="Delimiter">}</span>
+<span id="L284" class="LineNr">284 </span>
+<span id="L285" class="LineNr">285 </span><span class="Comment">// Reagents have the form &lt;name&gt;:&lt;type&gt;:&lt;type&gt;:.../&lt;property&gt;/&lt;property&gt;/...</span>
+<span id="L286" class="LineNr">286 </span>reagent::reagent<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> :original_string<span class="Delimiter">(</span>s<span class="Delimiter">),</span> type<span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> value<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> initialized<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Comment">// Parsing reagent(string s)</span>
+<span id="L288" class="LineNr">288 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L289" class="LineNr">289 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L290" class="LineNr">290 </span>  <span class="Comment">// name and type</span>
+<span id="L291" class="LineNr">291 </span>  istringstream first_row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
+<span id="L292" class="LineNr">292 </span>  first_row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L293" class="LineNr">293 </span>  name = slurp_until<span class="Delimiter">(</span>first_row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
+<span id="L294" class="LineNr">294 </span>  string_tree* type_names = parse_property_list<span class="Delimiter">(</span>first_row<span class="Delimiter">);</span>
+<span id="L295" class="LineNr">295 </span>  <span class="Comment">// End Parsing Reagent Type Property(type_names)</span>
+<span id="L296" class="LineNr">296 </span>  type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
+<span id="L297" class="LineNr">297 </span>  <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Comment">// special cases</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>name<span class="Delimiter">)</span> &amp;&amp; type == <span class="Constant">NULL</span><span class="Delimiter">)</span>
+<span id="L300" class="LineNr">300 </span>    type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal&quot;</span><span class="Delimiter">);</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;_&quot;</span> &amp;&amp; type == <span class="Constant">NULL</span><span class="Delimiter">)</span>
+<span id="L302" class="LineNr">302 </span>    type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal&quot;</span><span class="Delimiter">);</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Comment">// other properties</span>
+<span id="L304" class="LineNr">304 </span>  slurp_properties<span class="Delimiter">(</span>in<span class="Delimiter">,</span> properties<span class="Delimiter">);</span>
+<span id="L305" class="LineNr">305 </span>  <span class="Comment">// End Parsing reagent</span>
+<span id="L306" class="LineNr">306 </span><span class="Delimiter">}</span>
+<span id="L307" class="LineNr">307 </span>
+<span id="L308" class="LineNr">308 </span><span class="Normal">void</span> slurp_properties<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> vector&lt;pair&lt;string<span class="Delimiter">,</span> string_tree*&gt; &gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L310" class="LineNr">310 </span>    istringstream row<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">));</span>
+<span id="L311" class="LineNr">311 </span>    row &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L312" class="LineNr">312 </span>    string key = slurp_until<span class="Delimiter">(</span>row<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
+<span id="L313" class="LineNr">313 </span>    string_tree* value = parse_property_list<span class="Delimiter">(</span>row<span class="Delimiter">);</span>
+<span id="L314" class="LineNr">314 </span>    out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;string<span class="Delimiter">,</span> string_tree*&gt;<span class="Delimiter">(</span>key<span class="Delimiter">,</span> value<span class="Delimiter">));</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span><span class="Delimiter">}</span>
+<span id="L317" class="LineNr">317 </span>
+<span id="L318" class="LineNr">318 </span>string_tree* parse_property_list<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L320" class="LineNr">320 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>  string_tree* first = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">));</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">return</span> first<span class="Delimiter">;</span>
+<span id="L323" class="LineNr">323 </span>  string_tree* rest = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; rest<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>first<span class="Delimiter">,</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>rest<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>first<span class="Delimiter">,</span> rest<span class="Delimiter">);</span>
+<span id="L327" class="LineNr">327 </span><span class="Delimiter">}</span>
+<span id="L328" class="LineNr">328 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
+<span id="L329" class="LineNr">329 </span><span class="Normal">void</span> test_parse_property_list_atom<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L330" class="LineNr">330 </span>  istringstream in<span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L331" class="LineNr">331 </span>  string_tree* x = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L332" class="LineNr">332 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Normal">delete</span> x<span class="Delimiter">;</span>
+<span id="L334" class="LineNr">334 </span><span class="Delimiter">}</span>
+<span id="L335" class="LineNr">335 </span><span class="Normal">void</span> test_parse_property_list_list<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L336" class="LineNr">336 </span>  istringstream in<span class="Delimiter">(</span><span class="Constant">&quot;a:b&quot;</span><span class="Delimiter">);</span>
+<span id="L337" class="LineNr">337 </span>  string_tree* x = parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L338" class="LineNr">338 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L339" class="LineNr">339 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L340" class="LineNr">340 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L341" class="LineNr">341 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L342" class="LineNr">342 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L343" class="LineNr">343 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> <span class="Constant">&quot;b&quot;</span><span class="Delimiter">);</span>
+<span id="L344" class="LineNr">344 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">);</span>
+<span id="L345" class="LineNr">345 </span>  <span class="Normal">delete</span> x<span class="Delimiter">;</span>
+<span id="L346" class="LineNr">346 </span><span class="Delimiter">}</span>
+<span id="L347" class="LineNr">347 </span>
+<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(code)</span>
+<span id="L349" class="LineNr">349 </span>type_tree* <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* properties<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!properties<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L352" class="LineNr">352 </span>    <span class="Normal">const</span> string&amp; type_name = properties<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>    <span class="Normal">int</span> value = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L354" class="LineNr">354 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type_name<span class="Delimiter">))</span>
+<span id="L355" class="LineNr">355 </span>      value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type_name<span class="Delimiter">);</span>
+<span id="L356" class="LineNr">356 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>type_name<span class="Delimiter">))</span>  <span class="Comment">// sometimes types will contain literal integers, like for the size of an array</span>
+<span id="L357" class="LineNr">357 </span>      value = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L358" class="LineNr">358 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>value == <span class="Constant">&quot;-&gt;&quot;</span><span class="Delimiter">)</span>  <span class="Comment">// used in recipe types</span>
+<span id="L359" class="LineNr">359 </span>      value = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr">360 </span>    <span class="Normal">else</span>
+<span id="L361" class="LineNr">361 </span>      value = -<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// should never happen; will trigger errors later</span>
+<span id="L362" class="LineNr">362 </span>    <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>type_name<span class="Delimiter">,</span> value<span class="Delimiter">);</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Delimiter">}</span>
+<span id="L364" class="LineNr">364 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>left<span class="Delimiter">),</span>
+<span id="L365" class="LineNr">365 </span>                       <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>properties<span class="Delimiter">-&gt;</span>right<span class="Delimiter">));</span>
+<span id="L366" class="LineNr">366 </span><span class="Delimiter">}</span>
+<span id="L367" class="LineNr">367 </span>
+<span id="L368" class="LineNr">368 </span><span class="Comment">//: avoid memory leaks for the type tree</span>
+<span id="L369" class="LineNr">369 </span>
+<span id="L370" class="LineNr">370 </span>reagent::reagent<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; other<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L371" class="LineNr">371 </span>  original_string = other<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
+<span id="L372" class="LineNr">372 </span>  name = other<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L373" class="LineNr">373 </span>  value = other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L374" class="LineNr">374 </span>  initialized = other<span class="Delimiter">.</span>initialized<span class="Delimiter">;</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L376" class="LineNr">376 </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>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)));</span>
+<span id="L377" class="LineNr">377 </span>  <span class="Delimiter">}</span>
+<span id="L378" class="LineNr">378 </span>  type = copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Comment">// End reagent Copy Constructor</span>
+<span id="L380" class="LineNr">380 </span><span class="Delimiter">}</span>
+<span id="L381" class="LineNr">381 </span>
+<span id="L382" class="LineNr">382 </span>type_tree::type_tree<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L383" class="LineNr">383 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
+<span id="L384" class="LineNr">384 </span>  name = original<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L385" class="LineNr">385 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L386" class="LineNr">386 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
+<span id="L387" class="LineNr">387 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
+<span id="L388" class="LineNr">388 </span><span class="Delimiter">}</span>
+<span id="L389" class="LineNr">389 </span>
+<span id="L390" class="LineNr">390 </span>type_tree&amp; type_tree::<span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L391" class="LineNr">391 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
+<span id="L392" class="LineNr">392 </span>  name = original<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L393" class="LineNr">393 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L394" class="LineNr">394 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left<span class="Delimiter">)</span> <span class="Normal">delete</span> left<span class="Delimiter">;</span>
+<span id="L395" class="LineNr">395 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
+<span id="L396" class="LineNr">396 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right<span class="Delimiter">)</span> <span class="Normal">delete</span> right<span class="Delimiter">;</span>
+<span id="L397" class="LineNr">397 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Identifier">return</span> *<span class="Normal">this</span><span class="Delimiter">;</span>
+<span id="L399" class="LineNr">399 </span><span class="Delimiter">}</span>
+<span id="L400" class="LineNr">400 </span>
+<span id="L401" class="LineNr">401 </span><span class="Normal">bool</span> type_tree::<span class="Normal">operator</span>==<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom != other<span class="Delimiter">.</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L403" class="LineNr">403 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom<span class="Delimiter">)</span>
+<span id="L404" class="LineNr">404 </span>    <span class="Identifier">return</span> name == other<span class="Delimiter">.</span>name &amp;&amp; value == other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Identifier">return</span> <span class="Delimiter">(</span>left == other<span class="Delimiter">.</span>left || *left == *other<span class="Delimiter">.</span>left<span class="Delimiter">)</span>
+<span id="L406" class="LineNr">406 </span>      &amp;&amp; <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>right || *right == *other<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
+<span id="L407" class="LineNr">407 </span><span class="Delimiter">}</span>
+<span id="L408" class="LineNr">408 </span>
+<span id="L409" class="LineNr">409 </span><span class="Comment">// only constraint we care about: if a &lt; b then !(b &lt; a)</span>
+<span id="L410" class="LineNr">410 </span><span class="Normal">bool</span> type_tree::<span class="Normal">operator</span>&lt;<span class="Delimiter">(</span><span class="Normal">const</span> type_tree&amp; other<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom != other<span class="Delimiter">.</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> atom &gt; other<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>  <span class="Comment">// atoms before non-atoms</span>
+<span id="L412" class="LineNr">412 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> value &lt; other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L413" class="LineNr">413 </span>  <span class="Comment">// first location in one that's missing in the other makes that side 'smaller'</span>
+<span id="L414" class="LineNr">414 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left &amp;&amp; !other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!left &amp;&amp; other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L416" class="LineNr">416 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right &amp;&amp; !other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L417" class="LineNr">417 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!right &amp;&amp; other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L418" class="LineNr">418 </span>  <span class="Comment">// now if either pointer is unequal neither side can be null</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Comment">// if one side is equal that's easy</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>left == other<span class="Delimiter">.</span>left || *left == *other<span class="Delimiter">.</span>left<span class="Delimiter">)</span> <span class="Identifier">return</span> right &amp;&amp; *right &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">;</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>right || *right == *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> left &amp;&amp; *left &lt; *other<span class="Delimiter">.</span>left<span class="Delimiter">;</span>
+<span id="L422" class="LineNr">422 </span>  <span class="Comment">// if the two sides criss-cross, pick the side with the smaller lhs</span>
+<span id="L423" class="LineNr">423 </span>  <span class="Normal">if</span> <span class="Delimiter">((</span>left == other<span class="Delimiter">.</span>right || *left == *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span>
+<span id="L424" class="LineNr">424 </span>      &amp;&amp; <span class="Delimiter">(</span>right == other<span class="Delimiter">.</span>left || *right == *other<span class="Delimiter">.</span>left<span class="Delimiter">))</span>
+<span id="L425" class="LineNr">425 </span>    <span class="Identifier">return</span> *left &lt; *other<span class="Delimiter">.</span>left<span class="Delimiter">;</span>
+<span id="L426" class="LineNr">426 </span>  <span class="Comment">// now the hard case: both sides are not equal</span>
+<span id="L427" class="LineNr">427 </span>  <span class="Comment">// make sure we stay consistent between (a &lt; b) and (b &lt; a)</span>
+<span id="L428" class="LineNr">428 </span>  <span class="Comment">// just return the side with the smallest of the 4 branches</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*left &lt; *other<span class="Delimiter">.</span>left &amp;&amp; *left &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L430" class="LineNr">430 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*right &lt; *other<span class="Delimiter">.</span>left &amp;&amp; *right &lt; *other<span class="Delimiter">.</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L431" class="LineNr">431 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
+<span id="L434" class="LineNr">434 </span><span class="Comment">// These unit tests don't always use valid types.</span>
+<span id="L435" class="LineNr">435 </span><span class="Normal">void</span> test_compare_atom_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L436" class="LineNr">436 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L437" class="LineNr">437 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L438" class="LineNr">438 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L439" class="LineNr">439 </span><span class="Delimiter">}</span>
+<span id="L440" class="LineNr">440 </span><span class="Normal">void</span> test_compare_equal_atom_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L441" class="LineNr">441 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:address&quot;</span><span class="Delimiter">);</span>
+<span id="L442" class="LineNr">442 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L443" class="LineNr">443 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L444" class="LineNr">444 </span><span class="Delimiter">}</span>
+<span id="L445" class="LineNr">445 </span><span class="Normal">void</span> test_compare_atom_with_non_atom<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L446" class="LineNr">446 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:number&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L447" class="LineNr">447 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L448" class="LineNr">448 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L449" class="LineNr">449 </span><span class="Delimiter">}</span>
+<span id="L450" class="LineNr">450 </span><span class="Normal">void</span> test_compare_lists_with_identical_structure<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L451" class="LineNr">451 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L101'>address</a>:boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L452" class="LineNr">452 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L453" class="LineNr">453 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L454" class="LineNr">454 </span><span class="Delimiter">}</span>
+<span id="L455" class="LineNr">455 </span><span class="Normal">void</span> test_compare_identical_lists<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L456" class="LineNr">456 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:boolean&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L101'>address</a>:boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L457" class="LineNr">457 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L458" class="LineNr">458 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L459" class="LineNr">459 </span><span class="Delimiter">}</span>
+<span id="L460" class="LineNr">460 </span><span class="Normal">void</span> test_compare_list_with_extra_element<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L461" class="LineNr">461 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:address&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L101'>address</a>:<a href='043space.cc.html#L101'>address</a>:number&quot;</span><span class="Delimiter">);</span>
+<span id="L462" class="LineNr">462 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L463" class="LineNr">463 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L464" class="LineNr">464 </span><span class="Delimiter">}</span>
+<span id="L465" class="LineNr">465 </span><span class="Normal">void</span> test_compare_list_with_smaller_left_but_larger_right<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L466" class="LineNr">466 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:number:character&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean:array&quot;</span><span class="Delimiter">);</span>
+<span id="L467" class="LineNr">467 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L468" class="LineNr">468 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L469" class="LineNr">469 </span><span class="Delimiter">}</span>
+<span id="L470" class="LineNr">470 </span><span class="Normal">void</span> test_compare_list_with_smaller_left_but_larger_right_identical_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L471" class="LineNr">471 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:boolean&quot;</span><span class="Delimiter">),</span> b<span class="Delimiter">(</span><span class="Constant">&quot;b:boolean:address&quot;</span><span class="Delimiter">);</span>
+<span id="L472" class="LineNr">472 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>*a<span class="Delimiter">.</span>type &lt; *b<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L473" class="LineNr">473 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!<span class="Delimiter">(</span>*b<span class="Delimiter">.</span>type &lt; *a<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L474" class="LineNr">474 </span><span class="Delimiter">}</span>
+<span id="L475" class="LineNr">475 </span>
+<span id="L476" class="LineNr">476 </span><span class="Delimiter">:(code)</span>
+<span id="L477" class="LineNr">477 </span>string_tree::string_tree<span class="Delimiter">(</span><span class="Normal">const</span> string_tree&amp; original<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L478" class="LineNr">478 </span>  atom = original<span class="Delimiter">.</span>atom<span class="Delimiter">;</span>
+<span id="L479" class="LineNr">479 </span>  value = original<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L480" class="LineNr">480 </span>  left = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>left<span class="Delimiter">);</span>
+<span id="L481" class="LineNr">481 </span>  right = copy<span class="Delimiter">(</span>original<span class="Delimiter">.</span>right<span class="Delimiter">);</span>
+<span id="L482" class="LineNr">482 </span><span class="Delimiter">}</span>
+<span id="L483" class="LineNr">483 </span>
+<span id="L484" class="LineNr">484 </span>reagent&amp; reagent::<span class="Normal">operator</span>=<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; other<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L485" class="LineNr">485 </span>  original_string = other<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
+<span id="L486" class="LineNr">486 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L487" class="LineNr">487 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span> <span class="Normal">delete</span> properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>  properties<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L489" class="LineNr">489 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L490" class="LineNr">490 </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>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)));</span>
+<span id="L491" class="LineNr">491 </span>  name = other<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L492" class="LineNr">492 </span>  value = other<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L493" class="LineNr">493 </span>  initialized = other<span class="Delimiter">.</span>initialized<span class="Delimiter">;</span>
+<span id="L494" class="LineNr">494 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">)</span> <span class="Normal">delete</span> type<span class="Delimiter">;</span>
+<span id="L495" class="LineNr">495 </span>  type = copy<span class="Delimiter">(</span>other<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L496" class="LineNr">496 </span>  <span class="Comment">// End reagent Copy Operator</span>
+<span id="L497" class="LineNr">497 </span>  <span class="Identifier">return</span> *<span class="Normal">this</span><span class="Delimiter">;</span>
+<span id="L498" class="LineNr">498 </span><span class="Delimiter">}</span>
+<span id="L499" class="LineNr">499 </span>
+<span id="L500" class="LineNr">500 </span>reagent::~reagent<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L501" class="LineNr">501 </span>  <a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L502" class="LineNr">502 </span><span class="Delimiter">}</span>
+<span id="L503" class="LineNr">503 </span>
+<span id="L504" class="LineNr">504 </span><span class="Normal">void</span> reagent::<a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L505" class="LineNr">505 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L506" class="LineNr">506 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L507" class="LineNr">507 </span>      <span class="Normal">delete</span> properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
+<span id="L508" class="LineNr">508 </span>      properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L509" class="LineNr">509 </span>    <span class="Delimiter">}</span>
+<span id="L510" class="LineNr">510 </span>  <span class="Delimiter">}</span>
+<span id="L511" class="LineNr">511 </span>  <span class="Normal">delete</span> type<span class="Delimiter">;</span>
+<span id="L512" class="LineNr">512 </span>  type = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L513" class="LineNr">513 </span><span class="Delimiter">}</span>
+<span id="L514" class="LineNr">514 </span>type_tree::~type_tree<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L515" class="LineNr">515 </span>  <span class="Normal">delete</span> left<span class="Delimiter">;</span>
+<span id="L516" class="LineNr">516 </span>  <span class="Normal">delete</span> right<span class="Delimiter">;</span>
+<span id="L517" class="LineNr">517 </span><span class="Delimiter">}</span>
+<span id="L518" class="LineNr">518 </span>string_tree::~string_tree<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L519" class="LineNr">519 </span>  <span class="Normal">delete</span> left<span class="Delimiter">;</span>
+<span id="L520" class="LineNr">520 </span>  <span class="Normal">delete</span> right<span class="Delimiter">;</span>
+<span id="L521" class="LineNr">521 </span><span class="Delimiter">}</span>
+<span id="L522" class="LineNr">522 </span>
+<span id="L523" class="LineNr">523 </span><span class="Normal">void</span> append<span class="Delimiter">(</span>type_tree*&amp; base<span class="Delimiter">,</span> type_tree* extra<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L524" class="LineNr">524 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L525" class="LineNr">525 </span>    base = extra<span class="Delimiter">;</span>
+<span id="L526" class="LineNr">526 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L527" class="LineNr">527 </span>  <span class="Delimiter">}</span>
+<span id="L528" class="LineNr">528 </span>  type_tree* curr = base<span class="Delimiter">;</span>
+<span id="L529" class="LineNr">529 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L530" class="LineNr">530 </span>  curr<span class="Delimiter">-&gt;</span>right = extra<span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span><span class="Delimiter">}</span>
+<span id="L532" class="LineNr">532 </span>
+<span id="L533" class="LineNr">533 </span><span class="Normal">void</span> append<span class="Delimiter">(</span>string_tree*&amp; base<span class="Delimiter">,</span> string_tree* extra<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L534" class="LineNr">534 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L535" class="LineNr">535 </span>    base = extra<span class="Delimiter">;</span>
+<span id="L536" class="LineNr">536 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L537" class="LineNr">537 </span>  <span class="Delimiter">}</span>
+<span id="L538" class="LineNr">538 </span>  string_tree* curr = base<span class="Delimiter">;</span>
+<span id="L539" class="LineNr">539 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L540" class="LineNr">540 </span>  curr<span class="Delimiter">-&gt;</span>right = extra<span class="Delimiter">;</span>
+<span id="L541" class="LineNr">541 </span><span class="Delimiter">}</span>
+<span id="L542" class="LineNr">542 </span>
+<span id="L543" class="LineNr">543 </span>string slurp_until<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> <span class="Normal">char</span> delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L544" class="LineNr">544 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L545" class="LineNr">545 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
+<span id="L546" class="LineNr">546 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L547" class="LineNr">547 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L548" class="LineNr">548 </span>      <span class="Comment">// drop the delim</span>
+<span id="L549" class="LineNr">549 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L550" class="LineNr">550 </span>    <span class="Delimiter">}</span>
+<span id="L551" class="LineNr">551 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
+<span id="L552" class="LineNr">552 </span>  <span class="Delimiter">}</span>
+<span id="L553" class="LineNr">553 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L554" class="LineNr">554 </span><span class="Delimiter">}</span>
+<span id="L555" class="LineNr">555 </span>
+<span id="L556" class="LineNr">556 </span><span class="Normal">bool</span> has_property<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L557" class="LineNr">557 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L558" class="LineNr">558 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first == name<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L559" class="LineNr">559 </span>  <span class="Delimiter">}</span>
+<span id="L560" class="LineNr">560 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L561" class="LineNr">561 </span><span class="Delimiter">}</span>
+<span id="L562" class="LineNr">562 </span>
+<span id="L563" class="LineNr">563 </span>string_tree* property<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L564" class="LineNr">564 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> p = <span class="Constant">0</span><span class="Delimiter">;</span>  p != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L565" class="LineNr">565 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">).</span>first == name<span class="Delimiter">)</span>
+<span id="L566" class="LineNr">566 </span>      <span class="Identifier">return</span> r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
+<span id="L567" class="LineNr">567 </span>  <span class="Delimiter">}</span>
+<span id="L568" class="LineNr">568 </span>  <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L569" class="LineNr">569 </span><span class="Delimiter">}</span>
+<span id="L570" class="LineNr">570 </span>
+<span id="L571" class="LineNr">571 </span>string_tree* copy<span class="Delimiter">(</span><span class="Normal">const</span> string_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L572" class="LineNr">572 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L573" class="LineNr">573 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>*x<span class="Delimiter">);</span>
+<span id="L574" class="LineNr">574 </span><span class="Delimiter">}</span>
+<span id="L575" class="LineNr">575 </span>
+<span id="L576" class="LineNr">576 </span>type_tree* copy<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L577" class="LineNr">577 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L578" class="LineNr">578 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*x<span class="Delimiter">);</span>
+<span id="L579" class="LineNr">579 </span><span class="Delimiter">}</span>
+<span id="L580" class="LineNr">580 </span>
+<span id="L581" class="LineNr">581 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L582" class="LineNr">582 </span><span class="Normal">extern</span> <span class="Normal">const</span> string Ignore<span class="Delimiter">(</span><span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// commas are ignored in Mu except within [] strings</span>
+<span id="L583" class="LineNr">583 </span><span class="Delimiter">:(code)</span>
+<span id="L584" class="LineNr">584 </span><span class="Normal">void</span> skip_whitespace_but_not_newline<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L585" class="LineNr">585 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L586" class="LineNr">586 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L587" class="LineNr">587 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L588" class="LineNr">588 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L589" class="LineNr">589 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L590" class="LineNr">590 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L591" class="LineNr">591 </span>  <span class="Delimiter">}</span>
+<span id="L592" class="LineNr">592 </span><span class="Delimiter">}</span>
+<span id="L593" class="LineNr">593 </span>
+<span id="L594" class="LineNr">594 </span><span class="Normal">void</span> dump_memory<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L595" class="LineNr">595 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">double</span>&gt;::iterator p = Memory<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Memory<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L596" class="LineNr">596 </span>    cerr &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L597" class="LineNr">597 </span>  <span class="Delimiter">}</span>
+<span id="L598" class="LineNr">598 </span><span class="Delimiter">}</span>
+<span id="L599" class="LineNr">599 </span>
+<span id="L600" class="LineNr">600 </span><span class="SalientComment">//:: Helpers for converting various values to string</span>
+<span id="L601" class="LineNr">601 </span><span class="Comment">//: Use to_string() in trace(), and try to keep it stable from run to run.</span>
+<span id="L602" class="LineNr">602 </span><span class="Comment">//: Use debug_string() while debugging, and throw everything into it.</span>
+<span id="L603" class="LineNr">603 </span><span class="Comment">//: Use inspect() only for emitting a canonical format that can be parsed back</span>
+<span id="L604" class="LineNr">604 </span><span class="Comment">//: into the value.</span>
+<span id="L605" class="LineNr">605 </span>
+<span id="L606" class="LineNr">606 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L607" class="LineNr">607 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L608" class="LineNr">608 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L609" class="LineNr">609 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L610" class="LineNr">610 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L611" class="LineNr">611 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L612" class="LineNr">612 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L613" class="LineNr">613 </span><span class="Delimiter">}</span>
+<span id="L614" class="LineNr">614 </span>
+<span id="L615" class="LineNr">615 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L616" class="LineNr">616 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L617" class="LineNr">617 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L618" class="LineNr">618 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L619" class="LineNr">619 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L620" class="LineNr">620 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L621" class="LineNr">621 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L622" class="LineNr">622 </span><span class="Delimiter">}</span>
+<span id="L623" class="LineNr">623 </span>
+<span id="L624" class="LineNr">624 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L625" class="LineNr">625 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L626" class="LineNr">626 </span>  out &lt;&lt; <span class="Constant">&quot;- <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L627" class="LineNr">627 </span>  <span class="Comment">// Begin debug_string(recipe x)</span>
+<span id="L628" class="LineNr">628 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L629" class="LineNr">629 </span>    <span class="Normal">const</span> instruction&amp; inst = x<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
+<span id="L630" class="LineNr">630 </span>    out &lt;&lt; <span class="Constant">&quot;inst: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L631" class="LineNr">631 </span>    out &lt;&lt; <span class="Constant">&quot;  ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L632" class="LineNr">632 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L633" class="LineNr">633 </span>      out &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L634" class="LineNr">634 </span>    out &lt;&lt; <span class="Constant">&quot;  products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L635" class="LineNr">635 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L636" class="LineNr">636 </span>      out &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L637" class="LineNr">637 </span>  <span class="Delimiter">}</span>
+<span id="L638" class="LineNr">638 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L639" class="LineNr">639 </span><span class="Delimiter">}</span>
+<span id="L640" class="LineNr">640 </span>
+<span id="L641" class="LineNr">641 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L642" class="LineNr">642 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
+<span id="L643" class="LineNr">643 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>original_string<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>original_string<span class="Delimiter">;</span>
+<span id="L644" class="LineNr">644 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L645" class="LineNr">645 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L646" class="LineNr">646 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
+<span id="L647" class="LineNr">647 </span>    out &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
+<span id="L648" class="LineNr">648 </span>  <span class="Delimiter">}</span>
+<span id="L649" class="LineNr">649 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
+<span id="L650" class="LineNr">650 </span>  out &lt;&lt; inst<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L651" class="LineNr">651 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L652" class="LineNr">652 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L653" class="LineNr">653 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
+<span id="L654" class="LineNr">654 </span>    out &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
+<span id="L655" class="LineNr">655 </span>  <span class="Delimiter">}</span>
+<span id="L656" class="LineNr">656 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L657" class="LineNr">657 </span><span class="Delimiter">}</span>
+<span id="L658" class="LineNr">658 </span>
+<span id="L659" class="LineNr">659 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L660" class="LineNr">660 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">return</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
+<span id="L661" class="LineNr">661 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L662" class="LineNr">662 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L663" class="LineNr">663 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
+<span id="L664" class="LineNr">664 </span>    out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L665" class="LineNr">665 </span>  <span class="Delimiter">}</span>
+<span id="L666" class="LineNr">666 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; &lt;- &quot;</span><span class="Delimiter">;</span>
+<span id="L667" class="LineNr">667 </span>  out &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L668" class="LineNr">668 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L669" class="LineNr">669 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">&quot;, &quot;</span><span class="Delimiter">;</span>
+<span id="L670" class="LineNr">670 </span>    out &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L671" class="LineNr">671 </span>  <span class="Delimiter">}</span>
+<span id="L672" class="LineNr">672 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L673" class="LineNr">673 </span><span class="Delimiter">}</span>
+<span id="L674" class="LineNr">674 </span>
+<span id="L675" class="LineNr">675 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L676" class="LineNr">676 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
+<span id="L677" class="LineNr">677 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L678" class="LineNr">678 </span>  out &lt;&lt; <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
+<span id="L679" class="LineNr">679 </span>  out &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L680" class="LineNr">680 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L681" class="LineNr">681 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L682" class="LineNr">682 </span>      out &lt;&lt; <span class="Constant">&quot;, </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">);</span>
+<span id="L683" class="LineNr">683 </span>  <span class="Delimiter">}</span>
+<span id="L684" class="LineNr">684 </span>  out &lt;&lt; <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
+<span id="L685" class="LineNr">685 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L686" class="LineNr">686 </span><span class="Delimiter">}</span>
+<span id="L687" class="LineNr">687 </span>
+<span id="L688" class="LineNr">688 </span><span class="Comment">// special name for ignoring some products</span>
+<span id="L689" class="LineNr">689 </span><span class="Normal">bool</span> is_dummy<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L690" class="LineNr">690 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>name == <span class="Constant">&quot;_&quot;</span><span class="Delimiter">;</span>
+<span id="L691" class="LineNr">691 </span><span class="Delimiter">}</span>
+<span id="L692" class="LineNr">692 </span>
+<span id="L693" class="LineNr">693 </span>string debug_string<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L694" class="LineNr">694 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L695" class="LineNr">695 </span>  out &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L696" class="LineNr">696 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L697" class="LineNr">697 </span><span class="Delimiter">}</span>
+<span id="L698" class="LineNr">698 </span>
+<span id="L699" class="LineNr">699 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> string_tree* property<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L700" class="LineNr">700 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!property<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
+<span id="L701" class="LineNr">701 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L702" class="LineNr">702 </span>  dump<span class="Delimiter">(</span>property<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L703" class="LineNr">703 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L704" class="LineNr">704 </span><span class="Delimiter">}</span>
+<span id="L705" class="LineNr">705 </span>
+<span id="L706" class="LineNr">706 </span><span class="Normal">void</span> dump<span class="Delimiter">(</span><span class="Normal">const</span> string_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L707" class="LineNr">707 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L708" class="LineNr">708 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L709" class="LineNr">709 </span>    out &lt;&lt; <span class="Constant">'&quot;'</span> &lt;&lt; x<span class="Delimiter">-&gt;</span>value &lt;&lt; <span class="Constant">'&quot;'</span><span class="Delimiter">;</span>
+<span id="L710" class="LineNr">710 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L711" class="LineNr">711 </span>  <span class="Delimiter">}</span>
+<span id="L712" class="LineNr">712 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
+<span id="L713" class="LineNr">713 </span>  <span class="Normal">const</span> string_tree* curr = x<span class="Delimiter">;</span>
+<span id="L714" class="LineNr">714 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L715" class="LineNr">715 </span>    dump<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L716" class="LineNr">716 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L717" class="LineNr">717 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L718" class="LineNr">718 </span>  <span class="Delimiter">}</span>
+<span id="L719" class="LineNr">719 </span>  <span class="Comment">// check for dotted list; should never happen</span>
+<span id="L720" class="LineNr">720 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L721" class="LineNr">721 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
+<span id="L722" class="LineNr">722 </span>    dump<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L723" class="LineNr">723 </span>  <span class="Delimiter">}</span>
+<span id="L724" class="LineNr">724 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L725" class="LineNr">725 </span><span class="Delimiter">}</span>
+<span id="L726" class="LineNr">726 </span>
+<span id="L727" class="LineNr">727 </span>string <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L728" class="LineNr">728 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
+<span id="L729" class="LineNr">729 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L730" class="LineNr">730 </span>  dump<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L731" class="LineNr">731 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L732" class="LineNr">732 </span><span class="Delimiter">}</span>
+<span id="L733" class="LineNr">733 </span>
+<span id="L734" class="LineNr">734 </span><span class="Normal">void</span> dump<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L735" class="LineNr">735 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L736" class="LineNr">736 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L737" class="LineNr">737 </span>    dump<span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>value<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L738" class="LineNr">738 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L739" class="LineNr">739 </span>  <span class="Delimiter">}</span>
+<span id="L740" class="LineNr">740 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
+<span id="L741" class="LineNr">741 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
+<span id="L742" class="LineNr">742 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L743" class="LineNr">743 </span>    dump<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L744" class="LineNr">744 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L745" class="LineNr">745 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L746" class="LineNr">746 </span>  <span class="Delimiter">}</span>
+<span id="L747" class="LineNr">747 </span>  <span class="Comment">// check for dotted list; should never happen</span>
+<span id="L748" class="LineNr">748 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L749" class="LineNr">749 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
+<span id="L750" class="LineNr">750 </span>    dump<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L751" class="LineNr">751 </span>  <span class="Delimiter">}</span>
+<span id="L752" class="LineNr">752 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L753" class="LineNr">753 </span><span class="Delimiter">}</span>
+<span id="L754" class="LineNr">754 </span>
+<span id="L755" class="LineNr">755 </span><span class="Normal">void</span> dump<span class="Delimiter">(</span><a href='010vm.cc.html#L125'>type_ordinal</a> type<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L756" class="LineNr">756 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
+<span id="L757" class="LineNr">757 </span>    out &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L758" class="LineNr">758 </span>  <span class="Normal">else</span>
+<span id="L759" class="LineNr">759 </span>    out &lt;&lt; <span class="Constant">&quot;?&quot;</span> &lt;&lt; type<span class="Delimiter">;</span>
+<span id="L760" class="LineNr">760 </span><span class="Delimiter">}</span>
+<span id="L761" class="LineNr">761 </span>
+<span id="L762" class="LineNr">762 </span>string names_to_string<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L763" class="LineNr">763 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// should never happen</span>
+<span id="L764" class="LineNr">764 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L765" class="LineNr">765 </span>  dump_names<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L766" class="LineNr">766 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L767" class="LineNr">767 </span><span class="Delimiter">}</span>
+<span id="L768" class="LineNr">768 </span>
+<span id="L769" class="LineNr">769 </span><span class="Normal">void</span> dump_names<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L770" class="LineNr">770 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L771" class="LineNr">771 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L772" class="LineNr">772 </span>    out &lt;&lt; <span class="Constant">'&quot;'</span> &lt;&lt; x<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">'&quot;'</span><span class="Delimiter">;</span>
+<span id="L773" class="LineNr">773 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L774" class="LineNr">774 </span>  <span class="Delimiter">}</span>
+<span id="L775" class="LineNr">775 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
+<span id="L776" class="LineNr">776 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
+<span id="L777" class="LineNr">777 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L778" class="LineNr">778 </span>    dump_names<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L779" class="LineNr">779 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L780" class="LineNr">780 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L781" class="LineNr">781 </span>  <span class="Delimiter">}</span>
+<span id="L782" class="LineNr">782 </span>  <span class="Comment">// check for dotted list; should never happen</span>
+<span id="L783" class="LineNr">783 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L784" class="LineNr">784 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
+<span id="L785" class="LineNr">785 </span>    dump_names<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L786" class="LineNr">786 </span>  <span class="Delimiter">}</span>
+<span id="L787" class="LineNr">787 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L788" class="LineNr">788 </span><span class="Delimiter">}</span>
+<span id="L789" class="LineNr">789 </span>
+<span id="L790" class="LineNr">790 </span>string names_to_string_without_quotes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L791" class="LineNr">791 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;()&quot;</span><span class="Delimiter">;</span>
+<span id="L792" class="LineNr">792 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L793" class="LineNr">793 </span>  dump_names_without_quotes<span class="Delimiter">(</span>type<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L794" class="LineNr">794 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L795" class="LineNr">795 </span><span class="Delimiter">}</span>
+<span id="L796" class="LineNr">796 </span>
+<span id="L797" class="LineNr">797 </span><span class="Normal">void</span> dump_names_without_quotes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L798" class="LineNr">798 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L799" class="LineNr">799 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L800" class="LineNr">800 </span>    out &lt;&lt; x<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L801" class="LineNr">801 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L802" class="LineNr">802 </span>  <span class="Delimiter">}</span>
+<span id="L803" class="LineNr">803 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
+<span id="L804" class="LineNr">804 </span>  <span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>
+<span id="L805" class="LineNr">805 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &amp;&amp; !curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L806" class="LineNr">806 </span>    dump_names_without_quotes<span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L807" class="LineNr">807 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L808" class="LineNr">808 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L809" class="LineNr">809 </span>  <span class="Delimiter">}</span>
+<span id="L810" class="LineNr">810 </span>  <span class="Comment">// check for dotted list; should never happen</span>
+<span id="L811" class="LineNr">811 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L812" class="LineNr">812 </span>    out &lt;&lt; <span class="Constant">&quot;. &quot;</span><span class="Delimiter">;</span>
+<span id="L813" class="LineNr">813 </span>    dump_names_without_quotes<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L814" class="LineNr">814 </span>  <span class="Delimiter">}</span>
+<span id="L815" class="LineNr">815 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L816" class="LineNr">816 </span><span class="Delimiter">}</span>
+<span id="L817" class="LineNr">817 </span>
+<span id="L818" class="LineNr">818 </span><span class="Normal">bool</span> is_integer<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L819" class="LineNr">819 </span>  <span class="Identifier">return</span> s<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789-&quot;</span><span class="Delimiter">)</span> == string::npos  <span class="Comment">// no other characters</span>
+<span id="L820" class="LineNr">820 </span>      &amp;&amp; s<span class="Delimiter">.</span>find_first_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos  <span class="Comment">// at least one digit</span>
+<span id="L821" class="LineNr">821 </span>      &amp;&amp; s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'-'</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">;</span>  <span class="Comment">// '-' only at first position</span>
+<span id="L822" class="LineNr">822 </span><span class="Delimiter">}</span>
+<span id="L823" class="LineNr">823 </span>
+<span id="L824" class="LineNr">824 </span><span class="Normal">int</span> to_integer<span class="Delimiter">(</span>string n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L825" class="LineNr">825 </span>  <span class="Normal">char</span>* <a href='003trace.cc.html#L226'>end</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L826" class="LineNr">826 </span>  <span class="Comment">// safe because string.c_str() is guaranteed to be null-terminated</span>
+<span id="L827" class="LineNr">827 </span>  <span class="Normal">int</span> result = strtoll<span class="Delimiter">(</span>n<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;end<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">any base</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L828" class="LineNr">828 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*end != <span class="cSpecial">'\0'</span><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;tried to convert &quot;</span> &lt;&lt; n &lt;&lt; <span class="Constant">&quot; to number</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L829" class="LineNr">829 </span>  assert<span class="Delimiter">(</span>*end == <span class="cSpecial">'\0'</span><span class="Delimiter">);</span>
+<span id="L830" class="LineNr">830 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L831" class="LineNr">831 </span><span class="Delimiter">}</span>
+<span id="L832" class="LineNr">832 </span>
+<span id="L833" class="LineNr">833 </span><span class="Normal">void</span> test_is_integer<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L834" class="LineNr">834 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;1234&quot;</span><span class="Delimiter">));</span>
+<span id="L835" class="LineNr">835 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-1&quot;</span><span class="Delimiter">));</span>
+<span id="L836" class="LineNr">836 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;234.0&quot;</span><span class="Delimiter">));</span>
+<span id="L837" class="LineNr">837 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-567&quot;</span><span class="Delimiter">));</span>
+<span id="L838" class="LineNr">838 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;89-0&quot;</span><span class="Delimiter">));</span>
+<span id="L839" class="LineNr">839 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;-&quot;</span><span class="Delimiter">));</span>
+<span id="L840" class="LineNr">840 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span><span class="Constant">&quot;1e3&quot;</span><span class="Delimiter">));</span>  <span class="Comment">// not supported</span>
+<span id="L841" class="LineNr">841 </span><span class="Delimiter">}</span>
+<span id="L842" class="LineNr">842 </span>
+<span id="L843" class="LineNr">843 </span><span class="Comment">//: helper to print numbers without excessive precision</span>
+<span id="L844" class="LineNr">844 </span>
+<span id="L845" class="LineNr">845 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L846" class="LineNr">846 </span><span class="Normal">struct</span> no_scientific <span class="Delimiter">{</span>
+<span id="L847" class="LineNr">847 </span>  <span class="Normal">double</span> x<span class="Delimiter">;</span>
+<span id="L848" class="LineNr">848 </span>  <span class="Normal">explicit</span> no_scientific<span class="Delimiter">(</span><span class="Normal">double</span> y<span class="Delimiter">)</span> :x<span class="Delimiter">(</span>y<span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L849" class="LineNr">849 </span><span class="Delimiter">};</span>
+<span id="L850" class="LineNr">850 </span>
+<span id="L851" class="LineNr">851 </span><span class="Delimiter">:(code)</span>
+<span id="L852" class="LineNr">852 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> no_scientific x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L853" class="LineNr">853 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!isfinite<span class="Delimiter">(</span>x<span class="Delimiter">.</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L854" class="LineNr">854 </span>    <span class="Comment">// Infinity or NaN</span>
+<span id="L855" class="LineNr">855 </span>    os &lt;&lt; x<span class="Delimiter">.</span>x<span class="Delimiter">;</span>
+<span id="L856" class="LineNr">856 </span>    <span class="Identifier">return</span> os<span class="Delimiter">;</span>
+<span id="L857" class="LineNr">857 </span>  <span class="Delimiter">}</span>
+<span id="L858" class="LineNr">858 </span>  ostringstream tmp<span class="Delimiter">;</span>
+<span id="L859" class="LineNr">859 </span>  <span class="Comment">// more accurate, but too slow</span>
+<span id="L860" class="LineNr">860 </span><span class="CommentedCode">//?   tmp.precision(308);  // for 64-bit numbers</span>
+<span id="L861" class="LineNr">861 </span>  tmp &lt;&lt; std::fixed &lt;&lt; x<span class="Delimiter">.</span>x<span class="Delimiter">;</span>
+<span id="L862" class="LineNr">862 </span>  os &lt;&lt; trim_floating_point<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
+<span id="L863" class="LineNr">863 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
+<span id="L864" class="LineNr">864 </span><span class="Delimiter">}</span>
+<span id="L865" class="LineNr">865 </span>
+<span id="L866" class="LineNr">866 </span>string trim_floating_point<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L867" class="LineNr">867 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L868" class="LineNr">868 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'.'</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">)</span> <span class="Identifier">return</span> in<span class="Delimiter">;</span>
+<span id="L869" class="LineNr">869 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L870" class="LineNr">870 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>length &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L871" class="LineNr">871 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>length-<span class="Constant">1</span><span class="Delimiter">)</span> != <span class="Constant">'0'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L872" class="LineNr">872 </span>    --length<span class="Delimiter">;</span>
+<span id="L873" class="LineNr">873 </span>  <span class="Delimiter">}</span>
+<span id="L874" class="LineNr">874 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>length-<span class="Constant">1</span><span class="Delimiter">)</span> == <span class="Constant">'.'</span><span class="Delimiter">)</span> --length<span class="Delimiter">;</span>
+<span id="L875" class="LineNr">875 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;0&quot;</span><span class="Delimiter">;</span>
+<span id="L876" class="LineNr">876 </span>  <span class="Identifier">return</span> in<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
+<span id="L877" class="LineNr">877 </span><span class="Delimiter">}</span>
+<span id="L878" class="LineNr">878 </span>
+<span id="L879" class="LineNr">879 </span><span class="Normal">void</span> test_trim_floating_point<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L880" class="LineNr">880 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L881" class="LineNr">881 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;0&quot;</span><span class="Delimiter">);</span>
+<span id="L882" class="LineNr">882 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;1.5000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;1.5&quot;</span><span class="Delimiter">);</span>
+<span id="L883" class="LineNr">883 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;1.000001&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;1.000001&quot;</span><span class="Delimiter">);</span>
+<span id="L884" class="LineNr">884 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.000000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
+<span id="L885" class="LineNr">885 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
+<span id="L886" class="LineNr">886 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23.&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
+<span id="L887" class="LineNr">887 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;23&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">);</span>
+<span id="L888" class="LineNr">888 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;230&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;230&quot;</span><span class="Delimiter">);</span>
+<span id="L889" class="LineNr">889 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.000000&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
+<span id="L890" class="LineNr">890 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.0&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
+<span id="L891" class="LineNr">891 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3.&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
+<span id="L892" class="LineNr">892 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trim_floating_point<span class="Delimiter">(</span><span class="Constant">&quot;3&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;3&quot;</span><span class="Delimiter">);</span>
+<span id="L893" class="LineNr">893 </span><span class="Delimiter">}</span>
+<span id="L894" class="LineNr">894 </span>
+<span id="L895" class="LineNr">895 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L896" class="LineNr">896 </span><span class="Comment">#include &lt;map&gt;</span>
+<span id="L897" class="LineNr">897 </span><span class="Normal">using</span> std::map<span class="Delimiter">;</span>
+<span id="L898" class="LineNr">898 </span><span class="Comment">#include &lt;utility&gt;</span>
+<span id="L899" class="LineNr">899 </span><span class="Normal">using</span> std::pair<span class="Delimiter">;</span>
+<span id="L900" class="LineNr">900 </span><span class="Comment">#include &lt;math.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/011load.cc.html b/html/011load.cc.html
index e25263d7..d14085d8 100644
--- a/html/011load.cc.html
+++ b/html/011load.cc.html
@@ -71,7 +71,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr">  8 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L9" class="LineNr">  9 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
 <span id="L10" class="LineNr"> 10 </span>]
-<span id="L11" class="LineNr"> 11 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
+<span id="L11" class="LineNr"> 11 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
 <span id="L12" class="LineNr"> 12 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
 <span id="L13" class="LineNr"> 13 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
 <span id="L14" class="LineNr"> 14 </span>
@@ -86,9 +86,9 @@ if ('onhashchange' in window) {
 <span id="L23" class="LineNr"> 23 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L24" class="LineNr"> 24 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L26" class="LineNr"> 26 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L27" class="LineNr"> 27 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L28" class="LineNr"> 28 </span>    string command = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L28" class="LineNr"> 28 </span>    string command = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L29" class="LineNr"> 29 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>command<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L30" class="LineNr"> 30 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
 <span id="L31" class="LineNr"> 31 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -99,14 +99,14 @@ if ('onhashchange' in window) {
 <span id="L36" class="LineNr"> 36 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>r &gt; <span class="Constant">0</span><span class="Delimiter">)</span> result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
 <span id="L37" class="LineNr"> 37 </span>    <span class="Delimiter">}</span>
 <span id="L38" class="LineNr"> 38 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;recipe!&quot;</span> || command == <span class="Constant">&quot;def!&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L39" class="LineNr"> 39 </span>      Disable_redefine_checks = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span>      Disable_redefine_checks =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L40" class="LineNr"> 40 </span>      <a href='010vm.cc.html#L14'>recipe_ordinal</a> r = <a href='011load.cc.html#L53'>slurp_recipe</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L41" class="LineNr"> 41 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>r &gt; <span class="Constant">0</span><span class="Delimiter">)</span> result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L42" class="LineNr"> 42 </span>      Disable_redefine_checks = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L42" class="LineNr"> 42 </span>      Disable_redefine_checks =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L43" class="LineNr"> 43 </span>    <span class="Delimiter">}</span>
 <span id="L44" class="LineNr"> 44 </span>    <span class="Comment">// End Command Handlers</span>
 <span id="L45" class="LineNr"> 45 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown top-level command: &quot;</span> &lt;&lt; command &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown top-level command: &quot;</span> &lt;&lt; command &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L47" class="LineNr"> 47 </span>    <span class="Delimiter">}</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Delimiter">}</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
@@ -115,364 +115,366 @@ if ('onhashchange' in window) {
 <span id="L52" class="LineNr"> 52 </span><span class="Comment">// return the recipe ordinal slurped, or -1 if it failed</span>
 <span id="L53" class="LineNr"> 53 </span><span class="Normal">int</span> <a href='011load.cc.html#L53'>slurp_recipe</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L54" class="LineNr"> 54 </span>  <a href='010vm.cc.html#L19'>recipe</a> result<span class="Delimiter">;</span>
-<span id="L55" class="LineNr"> 55 </span>  result<span class="Delimiter">.</span>name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L55" class="LineNr"> 55 </span>  result<span class="Delimiter">.</span>name = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L57" class="LineNr"> 57 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L58" class="LineNr"> 58 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;file ended with 'recipe'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L58" class="LineNr"> 58 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;file ended with 'recipe'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L59" class="LineNr"> 59 </span>    <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Delimiter">}</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Comment">// End Load Recipe Name</span>
 <span id="L62" class="LineNr"> 62 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// End Recipe Refinements</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L65" class="LineNr"> 65 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;empty result.name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L66" class="LineNr"> 66 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- defining &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L65" class="LineNr"> 65 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;empty result.name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- defining &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
-<span id="L68" class="LineNr"> 68 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Recipe<span class="Delimiter">.</span>find<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span> != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L70" class="LineNr"> 70 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;already exists&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L71" class="LineNr"> 71 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L378'>should_check_for_redefine</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
-<span id="L72" class="LineNr"> 72 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;redefining <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L73" class="LineNr"> 73 </span>    Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
-<span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
-<span id="L75" class="LineNr"> 75 </span>  <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> result<span class="Delimiter">);</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Comment">// End Recipe Body(result)</span>
-<span id="L77" class="LineNr"> 77 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">),</span> result<span class="Delimiter">);</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">}</span>
-<span id="L80" class="LineNr"> 80 </span>
-<span id="L81" class="LineNr"> 81 </span><span class="Normal">void</span> <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> recipe&amp; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L83" class="LineNr"> 83 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span>
-<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: <a href='010vm.cc.html#L19'>recipe</a> body must begin with '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L86" class="LineNr"> 86 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  <span class="Comment">// permit trailing comment after '['</span>
-<span id="L87" class="LineNr"> 87 </span>  <a href='010vm.cc.html#L32'>instruction</a> curr<span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='011load.cc.html#L96'>next_instruction</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> &amp;curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L89" class="LineNr"> 89 </span>    curr<span class="Delimiter">.</span>original_string = to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
-<span id="L90" class="LineNr"> 90 </span>    <span class="Comment">// End Rewrite Instruction(curr, recipe result)</span>
-<span id="L91" class="LineNr"> 91 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L92" class="LineNr"> 92 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>is_empty<span class="Delimiter">())</span> result<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Delimiter">}</span>
-<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">}</span>
-<span id="L95" class="LineNr"> 95 </span>
-<span id="L96" class="LineNr"> 96 </span><span class="Normal">bool</span> <a href='011load.cc.html#L96'>next_instruction</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> instruction* curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>  curr<span class="Delimiter">-&gt;</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L98" class="LineNr"> 98 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L100" class="LineNr">100 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L101" class="LineNr">101 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span>
-<span id="L104" class="LineNr">104 </span>  vector&lt;string&gt; words<span class="Delimiter">;</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L106" class="LineNr">106 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L107" class="LineNr">107 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L108" class="LineNr">108 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L109" class="LineNr">109 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L110" class="LineNr">110 </span>    <span class="Delimiter">}</span>
-<span id="L111" class="LineNr">111 </span>    string word = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L112" class="LineNr">112 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>word<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L113" class="LineNr">113 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L114" class="LineNr">114 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L203'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L115" class="LineNr">115 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>    <span class="Delimiter">}</span>
-<span id="L117" class="LineNr">117 </span>    words<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>word<span class="Delimiter">);</span>
-<span id="L118" class="LineNr">118 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Delimiter">}</span>
-<span id="L120" class="LineNr">120 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>words<span class="Delimiter">)</span> == <span class="Constant">1</span> &amp;&amp; words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span>
-<span id="L122" class="LineNr">122 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// end of recipe</span>
-<span id="L123" class="LineNr">123 </span>
-<span id="L124" class="LineNr">124 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>words<span class="Delimiter">)</span> == <span class="Constant">1</span> &amp;&amp; <a href='011load.cc.html#L179'>is_label_word</a><span class="Delimiter">(</span>words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L125" class="LineNr">125 </span>    curr<span class="Delimiter">-&gt;</span>is_label = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L126" class="LineNr">126 </span>    curr<span class="Delimiter">-&gt;</span>label = words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L127" class="LineNr">127 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;label: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>label &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L128" class="LineNr">128 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L129" class="LineNr">129 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L203'>end</a> of file (3)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L130" class="LineNr">130 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L131" class="LineNr">131 </span>    <span class="Delimiter">}</span>
-<span id="L132" class="LineNr">132 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Delimiter">}</span>
-<span id="L134" class="LineNr">134 </span>
-<span id="L135" class="LineNr">135 </span>  vector&lt;string&gt;::iterator p = words<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>find<span class="Delimiter">(</span>words<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> words<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">)</span> != words<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>    <span class="Normal">for</span> <span class="Delimiter">(;</span>  *p != <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">;</span>  ++p<span class="Delimiter">)</span>
-<span id="L138" class="LineNr">138 </span>      curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
-<span id="L139" class="LineNr">139 </span>    ++p<span class="Delimiter">;</span>  <span class="Comment">// skip &lt;-</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
-<span id="L141" class="LineNr">141 </span>
-<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p == words<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;instruction prematurely ended with '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L144" class="LineNr">144 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
-<span id="L146" class="LineNr">146 </span>  curr<span class="Delimiter">-&gt;</span>name = *p<span class="Delimiter">;</span>  ++p<span class="Delimiter">;</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Comment">// curr-&gt;operation will be set at transform time</span>
-<span id="L148" class="LineNr">148 </span>
-<span id="L149" class="LineNr">149 </span>  <span class="Normal">for</span> <span class="Delimiter">(;</span>  p != words<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L150" class="LineNr">150 </span>    curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
-<span id="L151" class="LineNr">151 </span>
-<span id="L152" class="LineNr">152 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L153" class="LineNr">153 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  number of ingredients: &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L155" class="LineNr">155 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L157" class="LineNr">157 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L159" class="LineNr">159 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;9: unbalanced '[' for <a href='010vm.cc.html#L19'>recipe</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L160" class="LineNr">160 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L161" class="LineNr">161 </span>  <span class="Delimiter">}</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Comment">// End next_instruction(curr)</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="Comment">// can return empty string -- only if 'in' has no more data</span>
-<span id="L167" class="LineNr">167 </span>string <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L168" class="LineNr">168 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Comment">// End next_word Special-cases</span>
-<span id="L170" class="LineNr">170 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L171" class="LineNr">171 </span>  <a href='011load.cc.html#L193'>slurp_word</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L172" class="LineNr">172 </span>  <a href='011load.cc.html#L220'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L173" class="LineNr">173 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L174" class="LineNr">174 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result != <span class="Constant">&quot;[&quot;</span> &amp;&amp; <a href='011load.cc.html#L184'>ends_with</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> <span class="Constant">'['</span><span class="Delimiter">))</span>
-<span id="L175" class="LineNr">175 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;insert a space before '[' in '&quot;</span> &lt;&lt; result &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
-<span id="L178" class="LineNr">178 </span>
-<span id="L179" class="LineNr">179 </span><span class="Normal">bool</span> <a href='011load.cc.html#L179'>is_label_word</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; word<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>word<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
-<span id="L181" class="LineNr">181 </span>  <span class="Identifier">return</span> !isalnum<span class="Delimiter">(</span>word<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; string<span class="Delimiter">(</span><span class="Constant">&quot;$_*@&amp;,=-[]()&quot;</span><span class="Delimiter">).</span>find<span class="Delimiter">(</span>word<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> == string::npos<span class="Delimiter">;</span>
-<span id="L182" class="LineNr">182 </span><span class="Delimiter">}</span>
-<span id="L183" class="LineNr">183 </span>
-<span id="L184" class="LineNr">184 </span><span class="Normal">bool</span> <a href='011load.cc.html#L184'>ends_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span> c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L185" class="LineNr">185 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Identifier">return</span> *s<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == c<span class="Delimiter">;</span>
-<span id="L187" class="LineNr">187 </span><span class="Delimiter">}</span>
-<span id="L188" class="LineNr">188 </span>
-<span id="L189" class="LineNr">189 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L190" class="LineNr">190 </span><span class="Comment">// word boundaries</span>
-<span id="L191" class="LineNr">191 </span><span class="Normal">extern</span> <span class="Normal">const</span> string Terminators<span class="Delimiter">(</span><span class="Constant">&quot;(){}&quot;</span><span class="Delimiter">);</span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(code)</span>
-<span id="L193" class="LineNr">193 </span><span class="Normal">void</span> <a href='011load.cc.html#L193'>slurp_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L196" class="LineNr">196 </span>    in &gt;&gt; c<span class="Delimiter">;</span>
-<span id="L197" class="LineNr">197 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
-<span id="L198" class="LineNr">198 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span>  <span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L201" class="LineNr">201 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>c<span class="Delimiter">)</span> || Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>c<span class="Delimiter">)</span> != string::npos || Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>c<span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L202" class="LineNr">202 </span>      in<span class="Delimiter">.</span>putback<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
-<span id="L203" class="LineNr">203 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L204" class="LineNr">204 </span>    <span class="Delimiter">}</span>
-<span id="L205" class="LineNr">205 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Delimiter">}</span>
-<span id="L207" class="LineNr">207 </span><span class="Delimiter">}</span>
-<span id="L208" class="LineNr">208 </span>
-<span id="L209" class="LineNr">209 </span><span class="Normal">void</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L211" class="LineNr">211 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L213" class="LineNr">213 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L214" class="LineNr">214 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <a href='011load.cc.html#L231'>skip_comment</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L215" class="LineNr">215 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Delimiter">}</span>
-<span id="L217" class="LineNr">217 </span><span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>
-<span id="L219" class="LineNr">219 </span><span class="Comment">// confusing; move to the next line only to skip a comment, but never otherwise</span>
-<span id="L220" class="LineNr">220 </span><span class="Normal">void</span> <a href='011load.cc.html#L220'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L222" class="LineNr">222 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L223" class="LineNr">223 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L224" class="LineNr">224 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L225" class="LineNr">225 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L226" class="LineNr">226 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <a href='011load.cc.html#L231'>skip_comment</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L227" class="LineNr">227 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Delimiter">}</span>
-<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Normal">void</span> <a href='011load.cc.html#L231'>skip_comment</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L233" class="LineNr">233 </span>    in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L234" class="LineNr">234 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L235" class="LineNr">235 </span>  <span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
-<span id="L237" class="LineNr">237 </span>
-<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(scenario recipe_instead_of_def)</span>
-<span id="L239" class="LineNr">239 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L240" class="LineNr">240 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L241" class="LineNr">241 </span>]
-<span id="L242" class="LineNr">242 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L243" class="LineNr">243 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L244" class="LineNr">244 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">:(scenario parse_comment_outside_recipe)</span>
-<span id="L247" class="LineNr">247 </span><span class="Comment"># this comment will be dropped by the tangler, so we need a dummy recipe to stop that</span>
-<span id="L248" class="LineNr">248 </span><span class="muRecipe">def</span> f1 [
-<span id="L249" class="LineNr">249 </span>]
-<span id="L250" class="LineNr">250 </span><span class="Comment"># this comment will go through to 'load'</span>
-<span id="L251" class="LineNr">251 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L252" class="LineNr">252 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L253" class="LineNr">253 </span>]
-<span id="L254" class="LineNr">254 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L255" class="LineNr">255 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L256" class="LineNr">256 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L257" class="LineNr">257 </span>
-<span id="L258" class="LineNr">258 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction)</span>
-<span id="L259" class="LineNr">259 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L260" class="LineNr">260 </span>  <span class="Comment"># comment</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L262" class="LineNr">262 </span>]
-<span id="L263" class="LineNr">263 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L264" class="LineNr">264 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L265" class="LineNr">265 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L266" class="LineNr">266 </span>
-<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction_2)</span>
-<span id="L268" class="LineNr">268 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L269" class="LineNr">269 </span>  <span class="Comment"># comment</span>
-<span id="L270" class="LineNr">270 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L68" class="LineNr"> 68 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> Next_recipe_ordinal<span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span>  result<span class="Delimiter">.</span>ordinal = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L70" class="LineNr"> 70 </span>  ++Next_recipe_ordinal<span class="Delimiter">;</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Recipe<span class="Delimiter">.</span>find<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span> != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L72" class="LineNr"> 72 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;already exists&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L73" class="LineNr"> 73 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L380'>should_check_for_redefine</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
+<span id="L74" class="LineNr"> 74 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;redefining <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L75" class="LineNr"> 75 </span>    Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
+<span id="L77" class="LineNr"> 77 </span>  <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> result<span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Comment">// End Recipe Body(result)</span>
+<span id="L79" class="LineNr"> 79 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">),</span> result<span class="Delimiter">);</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">}</span>
+<span id="L82" class="LineNr"> 82 </span>
+<span id="L83" class="LineNr"> 83 </span><span class="Normal">void</span> <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> recipe&amp; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L84" class="LineNr"> 84 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span>
+<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: <a href='010vm.cc.html#L19'>recipe</a> body must begin with '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  <span class="Comment">// permit trailing comment after '['</span>
+<span id="L89" class="LineNr"> 89 </span>  <a href='010vm.cc.html#L33'>instruction</a> curr<span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='011load.cc.html#L98'>next_instruction</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> &amp;curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L91" class="LineNr"> 91 </span>    curr<span class="Delimiter">.</span>original_string = to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>    <span class="Comment">// End Rewrite Instruction(curr, recipe result)</span>
+<span id="L93" class="LineNr"> 93 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;after rewriting: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>is_empty<span class="Delimiter">())</span> result<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Delimiter">}</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span>
+<span id="L98" class="LineNr"> 98 </span><span class="Normal">bool</span> <a href='011load.cc.html#L98'>next_instruction</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> instruction* curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>  curr<span class="Delimiter">-&gt;</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Delimiter">}</span>
+<span id="L105" class="LineNr">105 </span>
+<span id="L106" class="LineNr">106 </span>  vector&lt;string&gt; words<span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L108" class="LineNr">108 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L110" class="LineNr">110 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L111" class="LineNr">111 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L112" class="LineNr">112 </span>    <span class="Delimiter">}</span>
+<span id="L113" class="LineNr">113 </span>    string word = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L114" class="LineNr">114 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>word<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L115" class="LineNr">115 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L116" class="LineNr">116 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L226'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L117" class="LineNr">117 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L118" class="LineNr">118 </span>    <span class="Delimiter">}</span>
+<span id="L119" class="LineNr">119 </span>    words<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>word<span class="Delimiter">);</span>
+<span id="L120" class="LineNr">120 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Delimiter">}</span>
+<span id="L122" class="LineNr">122 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>words<span class="Delimiter">)</span> == <span class="Constant">1</span> &amp;&amp; words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span>
+<span id="L124" class="LineNr">124 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// end of recipe</span>
+<span id="L125" class="LineNr">125 </span>
+<span id="L126" class="LineNr">126 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>words<span class="Delimiter">)</span> == <span class="Constant">1</span> &amp;&amp; <a href='011load.cc.html#L181'>is_label_word</a><span class="Delimiter">(</span>words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L127" class="LineNr">127 </span>    curr<span class="Delimiter">-&gt;</span>is_label =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L128" class="LineNr">128 </span>    curr<span class="Delimiter">-&gt;</span>label = words<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L129" class="LineNr">129 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;label: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>label &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L130" class="LineNr">130 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L131" class="LineNr">131 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> at <a href='003trace.cc.html#L226'>end</a> of file (3)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L132" class="LineNr">132 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L133" class="LineNr">133 </span>    <span class="Delimiter">}</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Delimiter">}</span>
+<span id="L136" class="LineNr">136 </span>
+<span id="L137" class="LineNr">137 </span>  vector&lt;string&gt;::iterator p = words<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
+<span id="L138" class="LineNr">138 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>find<span class="Delimiter">(</span>words<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> words<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">)</span> != words<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L139" class="LineNr">139 </span>    <span class="Normal">for</span> <span class="Delimiter">(;</span>  *p != <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">;</span>  ++p<span class="Delimiter">)</span>
+<span id="L140" class="LineNr">140 </span>      curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
+<span id="L141" class="LineNr">141 </span>    ++p<span class="Delimiter">;</span>  <span class="Comment">// skip &lt;-</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Delimiter">}</span>
+<span id="L143" class="LineNr">143 </span>
+<span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p == words<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;instruction prematurely ended with '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L146" class="LineNr">146 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>  curr<span class="Delimiter">-&gt;</span>name = *p<span class="Delimiter">;</span>  ++p<span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// curr-&gt;operation will be set at transform time</span>
+<span id="L150" class="LineNr">150 </span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">for</span> <span class="Delimiter">(;</span>  p != words<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L152" class="LineNr">152 </span>    curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
+<span id="L153" class="LineNr">153 </span>
+<span id="L154" class="LineNr">154 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; curr<span class="Delimiter">-&gt;</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L155" class="LineNr">155 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  number of ingredients: &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L157" class="LineNr">157 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  ingredient: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;reagent&gt;::iterator p = curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != curr<span class="Delimiter">-&gt;</span>products<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L159" class="LineNr">159 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>*p<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L161" class="LineNr">161 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;9: unbalanced '[' for <a href='010vm.cc.html#L19'>recipe</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L162" class="LineNr">162 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Comment">// End next_instruction(curr)</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">}</span>
+<span id="L167" class="LineNr">167 </span>
+<span id="L168" class="LineNr">168 </span><span class="Comment">// can return empty string -- only if 'in' has no more data</span>
+<span id="L169" class="LineNr">169 </span>string <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Comment">// End next_word Special-cases</span>
+<span id="L172" class="LineNr">172 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>  <a href='011load.cc.html#L195'>slurp_word</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>  <a href='011load.cc.html#L222'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L176" class="LineNr">176 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result != <span class="Constant">&quot;[&quot;</span> &amp;&amp; <a href='011load.cc.html#L186'>ends_with</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> <span class="Constant">'['</span><span class="Delimiter">))</span>
+<span id="L177" class="LineNr">177 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;insert a space before '[' in '&quot;</span> &lt;&lt; result &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span><span class="Delimiter">}</span>
+<span id="L180" class="LineNr">180 </span>
+<span id="L181" class="LineNr">181 </span><span class="Normal">bool</span> <a href='011load.cc.html#L181'>is_label_word</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; word<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>word<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Identifier">return</span> !isalnum<span class="Delimiter">(</span>word<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; string<span class="Delimiter">(</span><span class="Constant">&quot;$_*@&amp;,=-[]()&quot;</span><span class="Delimiter">).</span>find<span class="Delimiter">(</span>word<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> == string::npos<span class="Delimiter">;</span>
+<span id="L184" class="LineNr">184 </span><span class="Delimiter">}</span>
+<span id="L185" class="LineNr">185 </span>
+<span id="L186" class="LineNr">186 </span><span class="Normal">bool</span> <a href='011load.cc.html#L186'>ends_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span> c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Identifier">return</span> *s<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == c<span class="Delimiter">;</span>
+<span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
+<span id="L190" class="LineNr">190 </span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L192" class="LineNr">192 </span><span class="Comment">// word boundaries</span>
+<span id="L193" class="LineNr">193 </span><span class="Normal">extern</span> <span class="Normal">const</span> string Terminators<span class="Delimiter">(</span><span class="Constant">&quot;(){}&quot;</span><span class="Delimiter">);</span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">:(code)</span>
+<span id="L195" class="LineNr">195 </span><span class="Normal">void</span> <a href='011load.cc.html#L195'>slurp_word</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L198" class="LineNr">198 </span>    in &gt;&gt; c<span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
+<span id="L200" class="LineNr">200 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L201" class="LineNr">201 </span>  <span class="Delimiter">}</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L203" class="LineNr">203 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>c<span class="Delimiter">)</span> || Terminators<span class="Delimiter">.</span>find<span class="Delimiter">(</span>c<span class="Delimiter">)</span> != string::npos || Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>c<span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L204" class="LineNr">204 </span>      in<span class="Delimiter">.</span>putback<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
+<span id="L205" class="LineNr">205 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L206" class="LineNr">206 </span>    <span class="Delimiter">}</span>
+<span id="L207" class="LineNr">207 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Delimiter">}</span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">}</span>
+<span id="L210" class="LineNr">210 </span>
+<span id="L211" class="LineNr">211 </span><span class="Normal">void</span> <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L212" class="LineNr">212 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L215" class="LineNr">215 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L216" class="LineNr">216 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <a href='011load.cc.html#L233'>skip_comment</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L217" class="LineNr">217 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L218" class="LineNr">218 </span>  <span class="Delimiter">}</span>
+<span id="L219" class="LineNr">219 </span><span class="Delimiter">}</span>
+<span id="L220" class="LineNr">220 </span>
+<span id="L221" class="LineNr">221 </span><span class="Comment">// confusing; move to the next line only to skip a comment, but never otherwise</span>
+<span id="L222" class="LineNr">222 </span><span class="Normal">void</span> <a href='011load.cc.html#L222'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L224" class="LineNr">224 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L226" class="LineNr">226 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L227" class="LineNr">227 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>Ignore<span class="Delimiter">.</span>find<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">())</span> != string::npos<span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <a href='011load.cc.html#L233'>skip_comment</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L229" class="LineNr">229 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Delimiter">}</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span>
+<span id="L233" class="LineNr">233 </span><span class="Normal">void</span> <a href='011load.cc.html#L233'>skip_comment</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L235" class="LineNr">235 </span>    in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L236" class="LineNr">236 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L237" class="LineNr">237 </span>  <span class="Delimiter">}</span>
+<span id="L238" class="LineNr">238 </span><span class="Delimiter">}</span>
+<span id="L239" class="LineNr">239 </span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(scenario recipe_instead_of_def)</span>
+<span id="L241" class="LineNr">241 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L242" class="LineNr">242 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L243" class="LineNr">243 </span>]
+<span id="L244" class="LineNr">244 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L245" class="LineNr">245 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L246" class="LineNr">246 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L247" class="LineNr">247 </span>
+<span id="L248" class="LineNr">248 </span><span class="Delimiter">:(scenario parse_comment_outside_recipe)</span>
+<span id="L249" class="LineNr">249 </span><span class="Comment"># this comment will be dropped by the tangler, so we need a dummy recipe to stop that</span>
+<span id="L250" class="LineNr">250 </span><span class="muRecipe">def</span> f1 [
+<span id="L251" class="LineNr">251 </span>]
+<span id="L252" class="LineNr">252 </span><span class="Comment"># this comment will go through to 'load'</span>
+<span id="L253" class="LineNr">253 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L254" class="LineNr">254 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L255" class="LineNr">255 </span>]
+<span id="L256" class="LineNr">256 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L257" class="LineNr">257 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L258" class="LineNr">258 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L259" class="LineNr">259 </span>
+<span id="L260" class="LineNr">260 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction)</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="Comment"># comment</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L264" class="LineNr">264 </span>]
+<span id="L265" class="LineNr">265 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L266" class="LineNr">266 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L267" class="LineNr">267 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L268" class="LineNr">268 </span>
+<span id="L269" class="LineNr">269 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction_2)</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"># comment</span>
-<span id="L272" class="LineNr">272 </span>]
-<span id="L273" class="LineNr">273 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L274" class="LineNr">274 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L275" class="LineNr">275 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L276" class="LineNr">276 </span>
-<span id="L277" class="LineNr">277 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction_3)</span>
-<span id="L278" class="LineNr">278 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L279" class="LineNr">279 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L280" class="LineNr">280 </span>  <span class="Comment"># comment</span>
-<span id="L281" class="LineNr">281 </span>  <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L282" class="LineNr">282 </span>]
-<span id="L283" class="LineNr">283 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L284" class="LineNr">284 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L285" class="LineNr">285 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L286" class="LineNr">286 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L287" class="LineNr">287 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L288" class="LineNr">288 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
-<span id="L289" class="LineNr">289 </span>
-<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(scenario parse_comment_after_instruction)</span>
-<span id="L291" class="LineNr">291 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L292" class="LineNr">292 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>  <span class="Comment"># comment</span>
-<span id="L293" class="LineNr">293 </span>]
-<span id="L294" class="LineNr">294 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L295" class="LineNr">295 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L296" class="LineNr">296 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L297" class="LineNr">297 </span>
-<span id="L298" class="LineNr">298 </span><span class="Delimiter">:(scenario parse_label)</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>  +foo
-<span id="L301" class="LineNr">301 </span>]
-<span id="L302" class="LineNr">302 </span><span class="traceContains">+parse: label: +foo</span>
-<span id="L303" class="LineNr">303 </span>
-<span id="L304" class="LineNr">304 </span><span class="Delimiter">:(scenario parse_dollar_as_recipe_name)</span>
-<span id="L305" class="LineNr">305 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L306" class="LineNr">306 </span>  $foo
-<span id="L307" class="LineNr">307 </span>]
-<span id="L308" class="LineNr">308 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: $foo</span>
-<span id="L309" class="LineNr">309 </span>
-<span id="L310" class="LineNr">310 </span><span class="Delimiter">:(scenario parse_multiple_properties)</span>
-<span id="L311" class="LineNr">311 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L312" class="LineNr">312 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>/foo:bar:baz
-<span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;, &quot;foo&quot;: (&quot;bar&quot; &quot;baz&quot;)}</span>
-<span id="L316" class="LineNr">316 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L317" class="LineNr">317 </span>
-<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(scenario parse_multiple_products)</span>
-<span id="L319" class="LineNr">319 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L320" class="LineNr">320 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L321" class="LineNr">321 </span>]
-<span id="L322" class="LineNr">322 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L323" class="LineNr">323 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L324" class="LineNr">324 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L325" class="LineNr">325 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
-<span id="L326" class="LineNr">326 </span>
-<span id="L327" class="LineNr">327 </span><span class="Delimiter">:(scenario parse_multiple_ingredients)</span>
-<span id="L328" class="LineNr">328 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L329" class="LineNr">329 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">4</span>:number
-<span id="L330" class="LineNr">330 </span>]
-<span id="L331" class="LineNr">331 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L332" class="LineNr">332 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L333" class="LineNr">333 </span><span class="traceContains">+parse:   ingredient: {4: &quot;number&quot;}</span>
-<span id="L334" class="LineNr">334 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L335" class="LineNr">335 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
-<span id="L336" class="LineNr">336 </span>
-<span id="L337" class="LineNr">337 </span><span class="Delimiter">:(scenario parse_multiple_types)</span>
-<span id="L338" class="LineNr">338 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L339" class="LineNr">339 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">4</span>:number
-<span id="L340" class="LineNr">340 </span>]
-<span id="L341" class="LineNr">341 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
-<span id="L342" class="LineNr">342 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
-<span id="L343" class="LineNr">343 </span><span class="traceContains">+parse:   ingredient: {4: &quot;number&quot;}</span>
-<span id="L344" class="LineNr">344 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
-<span id="L345" class="LineNr">345 </span><span class="traceContains">+parse:   product: {2: (&quot;address&quot; &quot;number&quot;)}</span>
-<span id="L346" class="LineNr">346 </span>
-<span id="L347" class="LineNr">347 </span><span class="Delimiter">:(scenario parse_properties)</span>
-<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L349" class="LineNr">349 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L350" class="LineNr">350 </span>]
-<span id="L351" class="LineNr">351 </span><span class="traceContains">+parse:   product: {1: (&quot;address&quot; &quot;number&quot;), &quot;lookup&quot;: ()}</span>
-<span id="L352" class="LineNr">352 </span>
-<span id="L353" class="LineNr">353 </span><span class="Comment">//: this test we can't represent with a scenario</span>
-<span id="L354" class="LineNr">354 </span><span class="Delimiter">:(code)</span>
-<span id="L355" class="LineNr">355 </span><span class="Normal">void</span> <a href='011load.cc.html#L355'>test_parse_comment_terminated_by_eof</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L356" class="LineNr">356 </span>  load<span class="Delimiter">(</span><span class="Constant">&quot;recipe <a href='000organization.cc.html#L113'>main</a> [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L357" class="LineNr">357 </span>       <span class="Constant">&quot;  a:number &lt;- copy 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L358" class="LineNr">358 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L359" class="LineNr">359 </span>       <span class="Constant">&quot;# abc&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// no newline after comment</span>
-<span id="L360" class="LineNr">360 </span>  cerr &lt;&lt; <span class="Constant">&quot;.&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// termination = success</span>
-<span id="L361" class="LineNr">361 </span><span class="Delimiter">}</span>
-<span id="L362" class="LineNr">362 </span>
-<span id="L363" class="LineNr">363 </span><span class="Delimiter">:(scenario warn_on_missing_space_before_bracket)</span>
-<span id="L364" class="LineNr">364 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L365" class="LineNr">365 </span><span class="muRecipe">def</span> main[
-<span id="L366" class="LineNr">366 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L367" class="LineNr">367 </span>]
-<span id="L368" class="LineNr">368 </span><span class="traceContains">+error: insert a space before '[' in 'main['</span>
-<span id="L369" class="LineNr">369 </span>
-<span id="L370" class="LineNr">370 </span><span class="Comment">//: Warn if a recipe gets redefined, because large codebases can accidentally</span>
-<span id="L371" class="LineNr">371 </span><span class="Comment">//: step on their own toes. But there'll be many occasions later where</span>
-<span id="L372" class="LineNr">372 </span><span class="Comment">//: we'll want to disable the errors.</span>
-<span id="L373" class="LineNr">373 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L374" class="LineNr">374 </span><span class="Normal">bool</span> Disable_redefine_checks = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L375" class="LineNr">375 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L376" class="LineNr">376 </span>Disable_redefine_checks = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">:(code)</span>
-<span id="L378" class="LineNr">378 </span><span class="Normal">bool</span> <a href='011load.cc.html#L378'>should_check_for_redefine</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L379" class="LineNr">379 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Disable_redefine_checks<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L380" class="LineNr">380 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L381" class="LineNr">381 </span><span class="Delimiter">}</span>
-<span id="L382" class="LineNr">382 </span>
-<span id="L383" class="LineNr">383 </span><span class="Delimiter">:(scenario forbid_redefining_recipes)</span>
-<span id="L384" class="LineNr">384 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L386" class="LineNr">386 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L387" class="LineNr">387 </span>]
-<span id="L388" class="LineNr">388 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L389" class="LineNr">389 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">24</span>
-<span id="L390" class="LineNr">390 </span>]
-<span id="L391" class="LineNr">391 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
-<span id="L392" class="LineNr">392 </span>
-<span id="L393" class="LineNr">393 </span><span class="Delimiter">:(scenario permit_forcibly_redefining_recipes)</span>
-<span id="L394" class="LineNr">394 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L395" class="LineNr">395 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L396" class="LineNr">396 </span>]
-<span id="L397" class="LineNr">397 </span><span class="muRecipe">def</span>! <a href='000organization.cc.html#L113'>main</a> [
-<span id="L398" class="LineNr">398 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">24</span>
-<span id="L399" class="LineNr">399 </span>]
-<span id="L400" class="LineNr">400 </span><span class="traceAbsent">-error: redefining <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
-<span id="L401" class="LineNr">401 </span>$error: <span class="Constant">0</span>
-<span id="L402" class="LineNr">402 </span>
-<span id="L403" class="LineNr">403 </span><span class="Delimiter">:(code)</span>
-<span id="L404" class="LineNr">404 </span><span class="Comment">// for debugging</span>
-<span id="L405" class="LineNr">405 </span><span class="Normal">void</span> <a href='011load.cc.html#L405'>show_rest_of_stream</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L406" class="LineNr">406 </span>  cerr &lt;&lt; <span class="Constant">'^'</span><span class="Delimiter">;</span>
-<span id="L407" class="LineNr">407 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
-<span id="L408" class="LineNr">408 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span>
-<span id="L409" class="LineNr">409 </span>    cerr &lt;&lt; c<span class="Delimiter">;</span>
-<span id="L410" class="LineNr">410 </span>  cerr &lt;&lt; <span class="Constant">&quot;$</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L411" class="LineNr">411 </span>  exit<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L412" class="LineNr">412 </span><span class="Delimiter">}</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Comment"># comment</span>
+<span id="L274" class="LineNr">274 </span>]
+<span id="L275" class="LineNr">275 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L276" class="LineNr">276 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L277" class="LineNr">277 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L278" class="LineNr">278 </span>
+<span id="L279" class="LineNr">279 </span><span class="Delimiter">:(scenario parse_comment_amongst_instruction_3)</span>
+<span id="L280" class="LineNr">280 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L281" class="LineNr">281 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L282" class="LineNr">282 </span>  <span class="Comment"># comment</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L284" class="LineNr">284 </span>]
+<span id="L285" class="LineNr">285 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L286" class="LineNr">286 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L287" class="LineNr">287 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L288" class="LineNr">288 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L289" class="LineNr">289 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L290" class="LineNr">290 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
+<span id="L291" class="LineNr">291 </span>
+<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(scenario parse_comment_after_instruction)</span>
+<span id="L293" class="LineNr">293 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L294" class="LineNr">294 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>  <span class="Comment"># comment</span>
+<span id="L295" class="LineNr">295 </span>]
+<span id="L296" class="LineNr">296 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L297" class="LineNr">297 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L298" class="LineNr">298 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L299" class="LineNr">299 </span>
+<span id="L300" class="LineNr">300 </span><span class="Delimiter">:(scenario parse_label)</span>
+<span id="L301" class="LineNr">301 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L302" class="LineNr">302 </span>  +foo
+<span id="L303" class="LineNr">303 </span>]
+<span id="L304" class="LineNr">304 </span><span class="traceContains">+parse: label: +foo</span>
+<span id="L305" class="LineNr">305 </span>
+<span id="L306" class="LineNr">306 </span><span class="Delimiter">:(scenario parse_dollar_as_recipe_name)</span>
+<span id="L307" class="LineNr">307 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L308" class="LineNr">308 </span>  $foo
+<span id="L309" class="LineNr">309 </span>]
+<span id="L310" class="LineNr">310 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: $foo</span>
+<span id="L311" class="LineNr">311 </span>
+<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(scenario parse_multiple_properties)</span>
+<span id="L313" class="LineNr">313 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L314" class="LineNr">314 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>/foo:bar:baz
+<span id="L315" class="LineNr">315 </span>]
+<span id="L316" class="LineNr">316 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L317" class="LineNr">317 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;, &quot;foo&quot;: (&quot;bar&quot; &quot;baz&quot;)}</span>
+<span id="L318" class="LineNr">318 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L319" class="LineNr">319 </span>
+<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(scenario parse_multiple_products)</span>
+<span id="L321" class="LineNr">321 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L322" class="LineNr">322 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L323" class="LineNr">323 </span>]
+<span id="L324" class="LineNr">324 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L325" class="LineNr">325 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L326" class="LineNr">326 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L327" class="LineNr">327 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
+<span id="L328" class="LineNr">328 </span>
+<span id="L329" class="LineNr">329 </span><span class="Delimiter">:(scenario parse_multiple_ingredients)</span>
+<span id="L330" class="LineNr">330 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L331" class="LineNr">331 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">4</span>:number
+<span id="L332" class="LineNr">332 </span>]
+<span id="L333" class="LineNr">333 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L334" class="LineNr">334 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L335" class="LineNr">335 </span><span class="traceContains">+parse:   ingredient: {4: &quot;number&quot;}</span>
+<span id="L336" class="LineNr">336 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L337" class="LineNr">337 </span><span class="traceContains">+parse:   product: {2: &quot;number&quot;}</span>
+<span id="L338" class="LineNr">338 </span>
+<span id="L339" class="LineNr">339 </span><span class="Delimiter">:(scenario parse_multiple_types)</span>
+<span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L341" class="LineNr">341 </span>  <span class="Constant">1</span>:number<span class="Delimiter">,</span> <span class="Constant">2</span>:<a href='043space.cc.html#L101'>address</a>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">4</span>:number
+<span id="L342" class="LineNr">342 </span>]
+<span id="L343" class="LineNr">343 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
+<span id="L344" class="LineNr">344 </span><span class="traceContains">+parse:   ingredient: {23: &quot;literal&quot;}</span>
+<span id="L345" class="LineNr">345 </span><span class="traceContains">+parse:   ingredient: {4: &quot;number&quot;}</span>
+<span id="L346" class="LineNr">346 </span><span class="traceContains">+parse:   product: {1: &quot;number&quot;}</span>
+<span id="L347" class="LineNr">347 </span><span class="traceContains">+parse:   product: {2: (&quot;address&quot; &quot;number&quot;)}</span>
+<span id="L348" class="LineNr">348 </span>
+<span id="L349" class="LineNr">349 </span><span class="Delimiter">:(scenario parse_properties)</span>
+<span id="L350" class="LineNr">350 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L351" class="LineNr">351 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:number/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L352" class="LineNr">352 </span>]
+<span id="L353" class="LineNr">353 </span><span class="traceContains">+parse:   product: {1: (&quot;address&quot; &quot;number&quot;), &quot;lookup&quot;: ()}</span>
+<span id="L354" class="LineNr">354 </span>
+<span id="L355" class="LineNr">355 </span><span class="Comment">//: this test we can't represent with a scenario</span>
+<span id="L356" class="LineNr">356 </span><span class="Delimiter">:(code)</span>
+<span id="L357" class="LineNr">357 </span><span class="Normal">void</span> <a href='011load.cc.html#L357'>test_parse_comment_terminated_by_eof</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L358" class="LineNr">358 </span>  load<span class="Delimiter">(</span><span class="Constant">&quot;recipe <a href='000organization.cc.html#L113'>main</a> [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L359" class="LineNr">359 </span>       <span class="Constant">&quot;  a:number &lt;- copy 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L360" class="LineNr">360 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L361" class="LineNr">361 </span>       <span class="Constant">&quot;# abc&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// no newline after comment</span>
+<span id="L362" class="LineNr">362 </span>  cerr &lt;&lt; <span class="Constant">&quot;.&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// termination = success</span>
+<span id="L363" class="LineNr">363 </span><span class="Delimiter">}</span>
+<span id="L364" class="LineNr">364 </span>
+<span id="L365" class="LineNr">365 </span><span class="Delimiter">:(scenario warn_on_missing_space_before_bracket)</span>
+<span id="L366" class="LineNr">366 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L367" class="LineNr">367 </span><span class="muRecipe">def</span> main[
+<span id="L368" class="LineNr">368 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L369" class="LineNr">369 </span>]
+<span id="L370" class="LineNr">370 </span><span class="traceContains">+error: insert a space before '[' in 'main['</span>
+<span id="L371" class="LineNr">371 </span>
+<span id="L372" class="LineNr">372 </span><span class="Comment">//: Warn if a recipe gets redefined, because large codebases can accidentally</span>
+<span id="L373" class="LineNr">373 </span><span class="Comment">//: step on their own toes. But there'll be many occasions later where</span>
+<span id="L374" class="LineNr">374 </span><span class="Comment">//: we'll want to disable the errors.</span>
+<span id="L375" class="LineNr">375 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L376" class="LineNr">376 </span><span class="Normal">bool</span> Disable_redefine_checks =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L377" class="LineNr">377 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L378" class="LineNr">378 </span>Disable_redefine_checks =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L379" class="LineNr">379 </span><span class="Delimiter">:(code)</span>
+<span id="L380" class="LineNr">380 </span><span class="Normal">bool</span> <a href='011load.cc.html#L380'>should_check_for_redefine</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L381" class="LineNr">381 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Disable_redefine_checks<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L382" class="LineNr">382 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L383" class="LineNr">383 </span><span class="Delimiter">}</span>
+<span id="L384" class="LineNr">384 </span>
+<span id="L385" class="LineNr">385 </span><span class="Delimiter">:(scenario forbid_redefining_recipes)</span>
+<span id="L386" class="LineNr">386 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L387" class="LineNr">387 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L388" class="LineNr">388 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L389" class="LineNr">389 </span>]
+<span id="L390" class="LineNr">390 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L391" class="LineNr">391 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">24</span>
+<span id="L392" class="LineNr">392 </span>]
+<span id="L393" class="LineNr">393 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
+<span id="L394" class="LineNr">394 </span>
+<span id="L395" class="LineNr">395 </span><span class="Delimiter">:(scenario permit_forcibly_redefining_recipes)</span>
+<span id="L396" class="LineNr">396 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L397" class="LineNr">397 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L398" class="LineNr">398 </span>]
+<span id="L399" class="LineNr">399 </span><span class="muRecipe">def</span>! <a href='000organization.cc.html#L113'>main</a> [
+<span id="L400" class="LineNr">400 </span>  <span class="Constant">1</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">24</span>
+<span id="L401" class="LineNr">401 </span>]
+<span id="L402" class="LineNr">402 </span><span class="traceAbsent">-error: redefining <a href='010vm.cc.html#L19'>recipe</a> <a href='000organization.cc.html#L113'>main</a></span>
+<span id="L403" class="LineNr">403 </span>$error: <span class="Constant">0</span>
+<span id="L404" class="LineNr">404 </span>
+<span id="L405" class="LineNr">405 </span><span class="Delimiter">:(code)</span>
+<span id="L406" class="LineNr">406 </span><span class="Comment">// for debugging</span>
+<span id="L407" class="LineNr">407 </span><span class="Normal">void</span> <a href='011load.cc.html#L407'>show_rest_of_stream</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L408" class="LineNr">408 </span>  cerr &lt;&lt; <span class="Constant">'^'</span><span class="Delimiter">;</span>
+<span id="L409" class="LineNr">409 </span>  <span class="Normal">char</span> c<span class="Delimiter">;</span>
+<span id="L410" class="LineNr">410 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>in &gt;&gt; c<span class="Delimiter">)</span>
+<span id="L411" class="LineNr">411 </span>    cerr &lt;&lt; c<span class="Delimiter">;</span>
+<span id="L412" class="LineNr">412 </span>  cerr &lt;&lt; <span class="Constant">&quot;$</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L413" class="LineNr">413 </span>  exit<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L414" class="LineNr">414 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/012transform.cc.html b/html/012transform.cc.html
index bf15b20c..c47bf7d4 100644
--- a/html/012transform.cc.html
+++ b/html/012transform.cc.html
@@ -102,10 +102,10 @@ if ('onhashchange' in window) {
 <span id="L44" class="LineNr"> 44 </span><span class="Delimiter">}</span>
 <span id="L45" class="LineNr"> 45 </span>
 <span id="L46" class="LineNr"> 46 </span><span class="Normal">void</span> <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr"> 47 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== transform_all()&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L47" class="LineNr"> 47 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== transform_all()&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Comment">// Begin transform_all</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> t = <span class="Constant">0</span><span class="Delimiter">;</span>  t &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">);</span>  ++t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L50" class="LineNr"> 50 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L50" class="LineNr"> 50 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>      recipe&amp; r = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L52" class="LineNr"> 52 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>transformed_until != t-<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L53" class="LineNr"> 53 </span>      <span class="Comment">// End Transform Checks</span>
@@ -130,8 +130,8 @@ if ('onhashchange' in window) {
 <span id="L72" class="LineNr"> 72 </span>
 <span id="L73" class="LineNr"> 73 </span><span class="Delimiter">:(code)</span>
 <span id="L74" class="LineNr"> 74 </span><span class="Normal">void</span> <a href='012transform.cc.html#L74'>parse_int_reagents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L75" class="LineNr"> 75 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- parsing any uninitialized reagents as integers&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L75" class="LineNr"> 75 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- parsing any uninitialized reagents as integers&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L77" class="LineNr"> 77 </span>    recipe&amp; r = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L78" class="LineNr"> 78 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L79" class="LineNr"> 79 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -150,7 +150,7 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Comment">// End Reagent-parsing Exceptions</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L95" class="LineNr"> 95 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>to_integer<span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L95" class="LineNr"> 95 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>to_integer<span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
 <span id="L97" class="LineNr"> 97 </span>
 <span id="L98" class="LineNr"> 98 </span><span class="Comment">// helper for tests -- temporarily suppress run</span>
diff --git a/html/013update_operation.cc.html b/html/013update_operation.cc.html
index 596e7624..747ca918 100644
--- a/html/013update_operation.cc.html
+++ b/html/013update_operation.cc.html
@@ -69,14 +69,14 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr"> 6 </span>
 <span id="L7" class="LineNr"> 7 </span><span class="Delimiter">:(code)</span>
 <span id="L8" class="LineNr"> 8 </span><span class="Normal">void</span> <a href='013update_operation.cc.html#L8'>update_instruction_operations</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L9" class="LineNr"> 9 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute <a href='010vm.cc.html#L32'>instruction</a> operations for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L9" class="LineNr"> 9 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute <a href='010vm.cc.html#L33'>instruction</a> operations for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L10" class="LineNr">10 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L11" class="LineNr">11 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;--- compute instruction operations for recipe &quot; &lt;&lt; caller.name &lt;&lt; '\n';</span>
 <span id="L12" class="LineNr">12 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L13" class="LineNr">13 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L14" class="LineNr">14 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L15" class="LineNr">15 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L16" class="LineNr">16 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has no <a href='010vm.cc.html#L19'>recipe</a> in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr">16 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has no <a href='010vm.cc.html#L19'>recipe</a> in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L17" class="LineNr">17 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L18" class="LineNr">18 </span>    <span class="Delimiter">}</span>
 <span id="L19" class="LineNr">19 </span>    inst<span class="Delimiter">.</span>operation = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
@@ -96,7 +96,7 @@ if ('onhashchange' in window) {
 <span id="L33" class="LineNr">33 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L34" class="LineNr">34 </span>  <span class="Constant">1</span>:number <span class="Delimiter">,</span> copy <span class="Constant">0</span>  <span class="Comment"># typo: ',' instead of '&lt;-'</span>
 <span id="L35" class="LineNr">35 </span>]
-<span id="L36" class="LineNr">36 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L32'>instruction</a> '1:number' has no <a href='010vm.cc.html#L19'>recipe</a> in '1:number copy, 0'</span>
+<span id="L36" class="LineNr">36 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L33'>instruction</a> '1:number' has no <a href='010vm.cc.html#L19'>recipe</a> in '1:number copy, 0'</span>
 </pre>
 </body>
 </html>
diff --git a/html/014literal_string.cc.html b/html/014literal_string.cc.html
index c5fc1143..3dcbeef5 100644
--- a/html/014literal_string.cc.html
+++ b/html/014literal_string.cc.html
@@ -71,23 +71,23 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">:(scenarios load)</span>
 <span id="L10" class="LineNr"> 10 </span><span class="Delimiter">:(scenario string_literal)</span>
 <span id="L11" class="LineNr"> 11 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L12" class="LineNr"> 12 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc def]
+<span id="L12" class="LineNr"> 12 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc def]
 <span id="L13" class="LineNr"> 13 </span>]
 <span id="L14" class="LineNr"> 14 </span><span class="traceContains">+parse:   ingredient: {&quot;abc def&quot;: &quot;literal-string&quot;}</span>
 <span id="L15" class="LineNr"> 15 </span>
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(scenario string_literal_with_colons)</span>
 <span id="L17" class="LineNr"> 17 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L18" class="LineNr"> 18 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc:def/ghi]
+<span id="L18" class="LineNr"> 18 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc:def/ghi]
 <span id="L19" class="LineNr"> 19 </span>]
 <span id="L20" class="LineNr"> 20 </span><span class="traceContains">+parse:   ingredient: {&quot;abc:def/ghi&quot;: &quot;literal-string&quot;}</span>
 <span id="L21" class="LineNr"> 21 </span>
 <span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L23" class="LineNr"> 23 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;literal-string&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L24" class="LineNr"> 24 </span>
-<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End <a href='011load.cc.html#L167'>next_word</a> Special-cases&quot;)</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End <a href='011load.cc.html#L169'>next_word</a> Special-cases&quot;)</span>
 <span id="L26" class="LineNr"> 26 </span><span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L27" class="LineNr"> 27 </span>  string result = <a href='014literal_string.cc.html#L33'>slurp_quoted</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L28" class="LineNr"> 28 </span>  <a href='011load.cc.html#L220'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L28" class="LineNr"> 28 </span>  <a href='011load.cc.html#L222'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L29" class="LineNr"> 29 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L30" class="LineNr"> 30 </span><span class="Delimiter">}</span>
 <span id="L31" class="LineNr"> 31 </span>
@@ -109,14 +109,14 @@ if ('onhashchange' in window) {
 <span id="L47" class="LineNr"> 47 </span>    <span class="Normal">char</span> c = in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
 <span id="L48" class="LineNr"> 48 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!isspace<span class="Delimiter">(</span>c<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L49" class="LineNr"> 49 </span>      in<span class="Delimiter">.</span>putback<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
-<span id="L50" class="LineNr"> 50 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L50" class="LineNr"> 50 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L51" class="LineNr"> 51 </span>    <span class="Delimiter">}</span>
 <span id="L52" class="LineNr"> 52 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
 <span id="L53" class="LineNr"> 53 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L54" class="LineNr"> 54 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L55" class="LineNr"> 55 </span>    <span class="Delimiter">}</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Delimiter">}</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
 <span id="L59" class="LineNr"> 59 </span>
 <span id="L60" class="LineNr"> 60 </span><span class="Comment">// Read a regular string. Regular strings can only contain other regular</span>
@@ -135,7 +135,7 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>brace_depth == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
 <span id="L75" class="LineNr"> 75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; brace_depth &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr"> 76 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L76" class="LineNr"> 76 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L77" class="LineNr"> 77 </span>    out<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L78" class="LineNr"> 78 </span>  <span class="Delimiter">}</span>
 <span id="L79" class="LineNr"> 79 </span><span class="Delimiter">}</span>
@@ -162,7 +162,7 @@ if ('onhashchange' in window) {
 <span id="L100" class="LineNr">100 </span>    out &lt;&lt; c<span class="Delimiter">;</span>
 <span id="L101" class="LineNr">101 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L102" class="LineNr">102 </span>  <span class="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L104" class="LineNr">104 </span>  out<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L105" class="LineNr">105 </span><span class="Delimiter">}</span>
 <span id="L106" class="LineNr">106 </span>
@@ -231,29 +231,29 @@ if ('onhashchange' in window) {
 <span id="L169" class="LineNr">169 </span>
 <span id="L170" class="LineNr">170 </span><span class="Delimiter">:(scenario string_literal_nested)</span>
 <span id="L171" class="LineNr">171 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L172" class="LineNr">172 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc [def]]
+<span id="L172" class="LineNr">172 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc [def]]
 <span id="L173" class="LineNr">173 </span>]
 <span id="L174" class="LineNr">174 </span><span class="traceContains">+parse:   ingredient: {&quot;abc [def]&quot;: &quot;literal-string&quot;}</span>
 <span id="L175" class="LineNr">175 </span>
 <span id="L176" class="LineNr">176 </span><span class="Delimiter">:(scenario string_literal_escaped)</span>
 <span id="L177" class="LineNr">177 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L178" class="LineNr">178 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc \[def]
+<span id="L178" class="LineNr">178 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc \[def]
 <span id="L179" class="LineNr">179 </span>]
 <span id="L180" class="LineNr">180 </span><span class="traceContains">+parse:   ingredient: {&quot;abc [def&quot;: &quot;literal-string&quot;}</span>
 <span id="L181" class="LineNr">181 </span>
 <span id="L182" class="LineNr">182 </span><span class="Delimiter">:(scenario string_literal_escaped_twice)</span>
 <span id="L183" class="LineNr">183 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L184" class="LineNr">184 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [
+<span id="L184" class="LineNr">184 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [
 <span id="L185" class="LineNr">185 </span>abc \\[def]
 <span id="L186" class="LineNr">186 </span>]
 <span id="L187" class="LineNr">187 </span><span class="traceContains">+parse:   ingredient: {&quot;\nabc \[def&quot;: &quot;literal-string&quot;}</span>
 <span id="L188" class="LineNr">188 </span>
 <span id="L189" class="LineNr">189 </span><span class="Delimiter">:(scenario string_literal_and_comment)</span>
 <span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L191" class="LineNr">191 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc]  <span class="Comment"># comment</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:array:character<span class="Special"> &lt;- </span>copy [abc]  <span class="Comment"># comment</span>
 <span id="L192" class="LineNr">192 </span>]
 <span id="L193" class="LineNr">193 </span><span class="traceContains">+parse: --- defining <a href='000organization.cc.html#L113'>main</a></span>
-<span id="L194" class="LineNr">194 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L32'>instruction</a>: copy</span>
+<span id="L194" class="LineNr">194 </span><span class="traceContains">+parse: <a href='010vm.cc.html#L33'>instruction</a>: copy</span>
 <span id="L195" class="LineNr">195 </span><span class="traceContains">+parse:   number of ingredients: 1</span>
 <span id="L196" class="LineNr">196 </span><span class="traceContains">+parse:   ingredient: {&quot;abc&quot;: &quot;literal-string&quot;}</span>
 <span id="L197" class="LineNr">197 </span><span class="traceContains">+parse:   product: {1: (&quot;address&quot; &quot;array&quot; &quot;character&quot;)}</span>
diff --git a/html/015literal_noninteger.cc.html b/html/015literal_noninteger.cc.html
index 073fea49..55554557 100644
--- a/html/015literal_noninteger.cc.html
+++ b/html/015literal_noninteger.cc.html
@@ -73,7 +73,7 @@ if ('onhashchange' in window) {
 <span id="L11" class="LineNr">11 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='015literal_noninteger.cc.html#L19'>is_noninteger</a><span class="Delimiter">(</span>s<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L12" class="LineNr">12 </span>  name = s<span class="Delimiter">;</span>
 <span id="L13" class="LineNr">13 </span>  type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal-fractional-number&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L14" class="LineNr">14 </span>  <a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='015literal_noninteger.cc.html#L26'>to_double</a><span class="Delimiter">(</span>s<span class="Delimiter">));</span>
+<span id="L14" class="LineNr">14 </span>  <a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='015literal_noninteger.cc.html#L26'>to_double</a><span class="Delimiter">(</span>s<span class="Delimiter">));</span>
 <span id="L15" class="LineNr">15 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L16" class="LineNr">16 </span><span class="Delimiter">}</span>
 <span id="L17" class="LineNr">17 </span>
@@ -82,11 +82,11 @@ if ('onhashchange' in window) {
 <span id="L20" class="LineNr">20 </span>  <span class="Identifier">return</span> s<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789-.&quot;</span><span class="Delimiter">)</span> == string::npos  <span class="Comment">// no other characters</span>
 <span id="L21" class="LineNr">21 </span>      &amp;&amp; s<span class="Delimiter">.</span>find_first_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos  <span class="Comment">// at least one digit</span>
 <span id="L22" class="LineNr">22 </span>      &amp;&amp; s<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'-'</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">)</span> == string::npos  <span class="Comment">// '-' only at first position</span>
-<span id="L23" class="LineNr">23 </span>      &amp;&amp; std::count<span class="Delimiter">(</span>s<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> s<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> <span class="Constant">'.'</span><span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// exactly one decimal point</span>
+<span id="L23" class="LineNr">23 </span>      &amp;&amp; std::count<span class="Delimiter">(</span>s<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> s<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> <span class="Constant">'.'</span><span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// exactly one decimal point</span>
 <span id="L24" class="LineNr">24 </span><span class="Delimiter">}</span>
 <span id="L25" class="LineNr">25 </span>
 <span id="L26" class="LineNr">26 </span><span class="Normal">double</span> <a href='015literal_noninteger.cc.html#L26'>to_double</a><span class="Delimiter">(</span>string n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L27" class="LineNr">27 </span>  <span class="Normal">char</span>* <a href='003trace.cc.html#L203'>end</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr">27 </span>  <span class="Normal">char</span>* <a href='003trace.cc.html#L226'>end</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
 <span id="L28" class="LineNr">28 </span>  <span class="Comment">// safe because string.c_str() is guaranteed to be null-terminated</span>
 <span id="L29" class="LineNr">29 </span>  <span class="Normal">double</span> result = strtod<span class="Delimiter">(</span>n<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;end<span class="Delimiter">);</span>
 <span id="L30" class="LineNr">30 </span>  assert<span class="Delimiter">(</span>*end == <span class="cSpecial">'\0'</span><span class="Delimiter">);</span>
diff --git a/html/016dilated_reagent.cc.html b/html/016dilated_reagent.cc.html
index bf41460b..dcd7bb87 100644
--- a/html/016dilated_reagent.cc.html
+++ b/html/016dilated_reagent.cc.html
@@ -95,7 +95,7 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span>
 <span id="L32" class="LineNr"> 32 </span><span class="Comment">//: First augment next_word to group balanced brackets together.</span>
 <span id="L33" class="LineNr"> 33 </span>
-<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End <a href='011load.cc.html#L167'>next_word</a> Special-cases&quot;)</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End <a href='011load.cc.html#L169'>next_word</a> Special-cases&quot;)</span>
 <span id="L35" class="LineNr"> 35 </span><span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">)</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Identifier">return</span> <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Comment">// treat curlies mostly like parens, but don't mess up labels</span>
@@ -106,7 +106,7 @@ if ('onhashchange' in window) {
 <span id="L42" class="LineNr"> 42 </span><span class="Comment">// A curly is considered a label if it's the last thing on a line. Dilated</span>
 <span id="L43" class="LineNr"> 43 </span><span class="Comment">// reagents should remain all on one line.</span>
 <span id="L44" class="LineNr"> 44 </span><span class="Normal">bool</span> <a href='016dilated_reagent.cc.html#L44'>start_of_dilated_reagent</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'{'</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'{'</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Normal">int</span> pos = in<span class="Delimiter">.</span>tellg<span class="Delimiter">();</span>
 <span id="L47" class="LineNr"> 47 </span>  in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// slurp '{'</span>
 <span id="L48" class="LineNr"> 48 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
@@ -126,7 +126,7 @@ if ('onhashchange' in window) {
 <span id="L62" class="LineNr"> 62 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'('</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">')'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L64" class="LineNr"> 64 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'('</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr"> 65 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ')'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L65" class="LineNr"> 65 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ')'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L66" class="LineNr"> 66 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L67" class="LineNr"> 67 </span>      <span class="Delimiter">}</span>
 <span id="L68" class="LineNr"> 68 </span>      assert<span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> == <span class="Constant">'('</span><span class="Delimiter">);</span>
@@ -135,7 +135,7 @@ if ('onhashchange' in window) {
 <span id="L71" class="LineNr"> 71 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'['</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
 <span id="L72" class="LineNr"> 72 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L73" class="LineNr"> 73 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L74" class="LineNr"> 74 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L74" class="LineNr"> 74 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L75" class="LineNr"> 75 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L76" class="LineNr"> 76 </span>      <span class="Delimiter">}</span>
 <span id="L77" class="LineNr"> 77 </span>      open_brackets<span class="Delimiter">.</span>pop_back<span class="Delimiter">();</span>
@@ -143,7 +143,7 @@ if ('onhashchange' in window) {
 <span id="L79" class="LineNr"> 79 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'{'</span><span class="Delimiter">)</span> open_brackets<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
 <span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>c == <span class="Constant">'}'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L81" class="LineNr"> 81 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || open_brackets<span class="Delimiter">.</span>back<span class="Delimiter">()</span> != <span class="Constant">'{'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '}'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L82" class="LineNr"> 82 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unbalanced '}'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L83" class="LineNr"> 83 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L84" class="LineNr"> 84 </span>      <span class="Delimiter">}</span>
 <span id="L85" class="LineNr"> 85 </span>      open_brackets<span class="Delimiter">.</span>pop_back<span class="Delimiter">();</span>
@@ -151,7 +151,7 @@ if ('onhashchange' in window) {
 <span id="L87" class="LineNr"> 87 </span>    result &lt;&lt; c<span class="Delimiter">;</span>
 <span id="L88" class="LineNr"> 88 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>open_brackets<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Delimiter">}</span>
-<span id="L90" class="LineNr"> 90 </span>  <a href='011load.cc.html#L220'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L90" class="LineNr"> 90 </span>  <a href='011load.cc.html#L222'>skip_whitespace_and_comments_but_not_newline</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Identifier">return</span> result<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
 <span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
 <span id="L93" class="LineNr"> 93 </span>
@@ -163,33 +163,33 @@ if ('onhashchange' in window) {
 <span id="L99" class="LineNr"> 99 </span>  in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// skip '{'</span>
 <span id="L100" class="LineNr">100 </span>  name = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;' without a name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;' without a name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L103" class="LineNr">103 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L104" class="LineNr">104 </span>  <span class="Delimiter">}</span>
 <span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L106" class="LineNr">106 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid empty reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L106" class="LineNr">106 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid empty reagent '&quot;</span> &lt;&lt; s &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L107" class="LineNr">107 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L108" class="LineNr">108 </span>  <span class="Delimiter">}</span>
 <span id="L109" class="LineNr">109 </span>  <span class="Delimiter">{</span>
-<span id="L110" class="LineNr">110 </span>    string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L110" class="LineNr">110 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L111" class="LineNr">111 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L112" class="LineNr">112 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L113" class="LineNr">113 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L113" class="LineNr">113 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L114" class="LineNr">114 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L115" class="LineNr">115 </span>    <span class="Delimiter">}</span>
 <span id="L116" class="LineNr">116 </span>    string_tree* type_names = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
 <span id="L117" class="LineNr">117 </span>    <span class="Comment">// End Parsing Dilated Reagent Type Property(type_names)</span>
-<span id="L118" class="LineNr">118 </span>    type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>    type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
 <span id="L119" class="LineNr">119 </span>    <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
 <span id="L120" class="LineNr">120 </span>  <span class="Delimiter">}</span>
 <span id="L121" class="LineNr">121 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L122" class="LineNr">122 </span>    string key = <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L123" class="LineNr">123 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>key<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L124" class="LineNr">124 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L125" class="LineNr">125 </span>    string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L125" class="LineNr">125 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L126" class="LineNr">126 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L127" class="LineNr">127 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L129" class="LineNr">129 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L130" class="LineNr">130 </span>    <span class="Delimiter">}</span>
 <span id="L131" class="LineNr">131 </span>    string_tree* value = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
@@ -201,10 +201,10 @@ if ('onhashchange' in window) {
 <span id="L137" class="LineNr">137 </span>
 <span id="L138" class="LineNr">138 </span><span class="Delimiter">:(code)</span>
 <span id="L139" class="LineNr">139 </span>string <a href='016dilated_reagent.cc.html#L139'>slurp_key</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L140" class="LineNr">140 </span>  string result = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L140" class="LineNr">140 </span>  string result = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L141" class="LineNr">141 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L142" class="LineNr">142 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L203'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete dilated reagent at <a href='003trace.cc.html#L226'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L144" class="LineNr">144 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
 <span id="L146" class="LineNr">146 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>!result<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; *result<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span>
diff --git a/html/017parse_tree.cc.html b/html/017parse_tree.cc.html
index e800c0ce..506a30b7 100644
--- a/html/017parse_tree.cc.html
+++ b/html/017parse_tree.cc.html
@@ -108,10 +108,10 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr"> 45 </span>    <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Delimiter">}</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'('</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L48" class="LineNr"> 48 </span>    string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L48" class="LineNr"> 48 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L49" class="LineNr"> 49 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L50" class="LineNr"> 50 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L51" class="LineNr"> 51 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete string tree at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L51" class="LineNr"> 51 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete string tree at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L52" class="LineNr"> 52 </span>      <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
 <span id="L53" class="LineNr"> 53 </span>    <span class="Delimiter">}</span>
 <span id="L54" class="LineNr"> 54 </span>    string_tree* result = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
@@ -129,10 +129,10 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span>      <span class="Delimiter">(</span>*curr<span class="Delimiter">)-&gt;</span>left = parse_string_tree<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L67" class="LineNr"> 67 </span>    <span class="Delimiter">}</span>
 <span id="L68" class="LineNr"> 68 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>      string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span>      string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L70" class="LineNr"> 70 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L71" class="LineNr"> 71 </span>        assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L72" class="LineNr"> 72 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete string tree at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L72" class="LineNr"> 72 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete string tree at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L73" class="LineNr"> 73 </span>        <span class="Identifier">return</span> <span class="Constant">NULL</span><span class="Delimiter">;</span>
 <span id="L74" class="LineNr"> 74 </span>      <span class="Delimiter">}</span>
 <span id="L75" class="LineNr"> 75 </span>      <span class="Delimiter">(</span>*curr<span class="Delimiter">)-&gt;</span>left = <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
@@ -147,7 +147,7 @@ if ('onhashchange' in window) {
 <span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(scenario dilated_reagent_with_type_tree)</span>
 <span id="L85" class="LineNr"> 85 </span><span class="Special">% Hide_errors = true;  // 'map' isn't defined yet</span>
 <span id="L86" class="LineNr"> 86 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>foo <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">)</span> <span class="Delimiter">(</span>bar number<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>foo <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">)</span> <span class="Delimiter">(</span>bar number<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L88" class="LineNr"> 88 </span>]
 <span id="L89" class="LineNr"> 89 </span><span class="Comment"># just to avoid errors</span>
 <span id="L90" class="LineNr"> 90 </span><span class="muData">container</span> foo [
diff --git a/html/018constant.cc.html b/html/018constant.cc.html
new file mode 100644
index 00000000..33c35cb3
--- /dev/null
+++ b/html/018constant.cc.html
@@ -0,0 +1,129 @@
+<!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 - 018constant.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.muRecipe { color: #ff8700; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: A few literal constants.</span>
+<span id="L2" class="LineNr"> 2 </span>
+<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(scenarios load)</span>  <span class="Comment">// use 'load' instead of 'run' in all scenarios in this layer</span>
+<span id="L4" class="LineNr"> 4 </span>
+<span id="L5" class="LineNr"> 5 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L6" class="LineNr"> 6 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;literal-boolean&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L7" class="LineNr"> 7 </span>
+<span id="L8" class="LineNr"> 8 </span><span class="Comment">//: 'true'</span>
+<span id="L9" class="LineNr"> 9 </span>
+<span id="L10" class="LineNr">10 </span><span class="Delimiter">:(scenario true)</span>
+<span id="L11" class="LineNr">11 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L12" class="LineNr">12 </span>  <span class="Constant">1</span>:boolean<span class="Special"> &lt;- </span>copy<span class="Constant"> true</span>
+<span id="L13" class="LineNr">13 </span>]
+<span id="L14" class="LineNr">14 </span><span class="traceContains">+parse:   ingredient: {true: &quot;literal-boolean&quot;}</span>
+<span id="L15" class="LineNr">15 </span>
+<span id="L16" class="LineNr">16 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span>
+<span id="L17" class="LineNr">17 </span><span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;true&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L18" class="LineNr">18 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L19" class="LineNr">19 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'true' is a literal and can't take a type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L20" class="LineNr">20 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L21" class="LineNr">21 </span>  <span class="Delimiter">}</span>
+<span id="L22" class="LineNr">22 </span>  type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal-boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L23" class="LineNr">23 </span>  <a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L24" class="LineNr">24 </span><span class="Delimiter">}</span>
+<span id="L25" class="LineNr">25 </span>
+<span id="L26" class="LineNr">26 </span><span class="Comment">//: 'false'</span>
+<span id="L27" class="LineNr">27 </span>
+<span id="L28" class="LineNr">28 </span><span class="Delimiter">:(scenario false)</span>
+<span id="L29" class="LineNr">29 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L30" class="LineNr">30 </span>  <span class="Constant">1</span>:boolean<span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L31" class="LineNr">31 </span>]
+<span id="L32" class="LineNr">32 </span><span class="traceContains">+parse:   ingredient: {false: &quot;literal-boolean&quot;}</span>
+<span id="L33" class="LineNr">33 </span>
+<span id="L34" class="LineNr">34 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span>
+<span id="L35" class="LineNr">35 </span><span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;false&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L36" class="LineNr">36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L37" class="LineNr">37 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'false' is a literal and can't take a type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L38" class="LineNr">38 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr">39 </span>  <span class="Delimiter">}</span>
+<span id="L40" class="LineNr">40 </span>  type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal-boolean&quot;</span><span class="Delimiter">);</span>
+<span id="L41" class="LineNr">41 </span>  <a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L42" class="LineNr">42 </span><span class="Delimiter">}</span>
+<span id="L43" class="LineNr">43 </span>
+<span id="L44" class="LineNr">44 </span><span class="Comment">//: 'null'</span>
+<span id="L45" class="LineNr">45 </span>
+<span id="L46" class="LineNr">46 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L47" class="LineNr">47 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;literal-address&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L48" class="LineNr">48 </span>
+<span id="L49" class="LineNr">49 </span><span class="Delimiter">:(scenario null)</span>
+<span id="L50" class="LineNr">50 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L51" class="LineNr">51 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L101'>address</a>:number<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L52" class="LineNr">52 </span>]
+<span id="L53" class="LineNr">53 </span><span class="traceContains">+parse:   ingredient: {null: &quot;literal-address&quot;}</span>
+<span id="L54" class="LineNr">54 </span>
+<span id="L55" class="LineNr">55 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span>
+<span id="L56" class="LineNr">56 </span><span class="Normal">if</span> <span class="Delimiter">(</span>name == <span class="Constant">&quot;null&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L57" class="LineNr">57 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L58" class="LineNr">58 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'null' is a literal and can't take a type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L59" class="LineNr">59 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr">60 </span>  <span class="Delimiter">}</span>
+<span id="L61" class="LineNr">61 </span>  type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;literal-address&quot;</span><span class="Delimiter">);</span>
+<span id="L62" class="LineNr">62 </span>  <a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L63" class="LineNr">63 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/018type_abbreviations.cc.html b/html/019type_abbreviations.cc.html
index 177b7f67..43be122b 100644
--- a/html/018type_abbreviations.cc.html
+++ b/html/019type_abbreviations.cc.html
@@ -2,7 +2,7 @@
 <html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8">
-<title>Mu - 018type_abbreviations.cc</title>
+<title>Mu - 019type_abbreviations.cc</title>
 <meta name="Generator" content="Vim/7.4">
 <meta name="plugin-version" content="vim7.4_v2">
 <meta name="syntax" content="cpp">
@@ -79,55 +79,55 @@ if ('onhashchange' in window) {
 <span id="L15" class="LineNr"> 15 </span>
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
 <span id="L17" class="LineNr"> 17 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;type&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L18" class="LineNr"> 18 </span>  <a href='018type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L18" class="LineNr"> 18 </span>  <a href='019type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L19" class="LineNr"> 19 </span><span class="Delimiter">}</span>
 <span id="L20" class="LineNr"> 20 </span>
 <span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(code)</span>
-<span id="L22" class="LineNr"> 22 </span><span class="Normal">void</span> <a href='018type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L23" class="LineNr"> 23 </span>  string new_type_name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Normal">void</span> <a href='019type_abbreviations.cc.html#L22'>load_type_abbreviations</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L23" class="LineNr"> 23 </span>  string new_type_name = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L24" class="LineNr"> 24 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">)</span> || new_type_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L26" class="LineNr"> 26 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement; must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L26" class="LineNr"> 26 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement; must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L27" class="LineNr"> 27 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Delimiter">}</span>
-<span id="L29" class="LineNr"> 29 </span>  string arrow = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L29" class="LineNr"> 29 </span>  string arrow = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L30" class="LineNr"> 30 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> || !arrow<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>arrow<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L32" class="LineNr"> 32 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L32" class="LineNr"> 32 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L33" class="LineNr"> 33 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Delimiter">}</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>arrow != <span class="Constant">&quot;=&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L36" class="LineNr"> 36 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' statements must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;' but got 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L36" class="LineNr"> 36 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' statements must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;' but got 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L37" class="LineNr"> 37 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Delimiter">}</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L40" class="LineNr"> 40 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; ='</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; ='</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L41" class="LineNr"> 41 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L42" class="LineNr"> 42 </span>  <span class="Delimiter">}</span>
-<span id="L43" class="LineNr"> 43 </span>  string old = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L43" class="LineNr"> 43 </span>  string old = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>old<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; ='</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L46" class="LineNr"> 46 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' statements must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;' but got 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'type' statement 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; ='</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L46" class="LineNr"> 46 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' statements must be of the form 'type &lt;new type name&gt; = &lt;type expression&gt;' but got 'type &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L47" class="LineNr"> 47 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Delimiter">}</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> new_type_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L50" class="LineNr"> 50 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' conflict: '&quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;' defined as both '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> new_type_name<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; old &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> new_type_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L50" class="LineNr"> 50 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'type' conflict: '&quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot;' defined as both '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> new_type_name<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; old &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L51" class="LineNr"> 51 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L52" class="LineNr"> 52 </span>  <span class="Delimiter">}</span>
-<span id="L53" class="LineNr"> 53 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;type&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;alias &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; old &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L54" class="LineNr"> 54 </span>  type_tree* old_type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>old<span class="Delimiter">);</span>
+<span id="L53" class="LineNr"> 53 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;type&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;alias &quot;</span> &lt;&lt; new_type_name &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; old &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L54" class="LineNr"> 54 </span>  type_tree* old_type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>old<span class="Delimiter">);</span>
 <span id="L55" class="LineNr"> 55 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> new_type_name<span class="Delimiter">,</span> old_type<span class="Delimiter">);</span>
 <span id="L56" class="LineNr"> 56 </span><span class="Delimiter">}</span>
 <span id="L57" class="LineNr"> 57 </span>
-<span id="L58" class="LineNr"> 58 </span>type_tree* <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L59" class="LineNr"> 59 </span>  string_tree* type_names = <a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;(&quot;</span><span class="Delimiter">)</span> ? parse_string_tree<span class="Delimiter">(</span>x<span class="Delimiter">)</span> : <a href='018type_abbreviations.cc.html#L66'>parse_string_list</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L60" class="LineNr"> 60 </span>  type_tree* result = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
+<span id="L58" class="LineNr"> 58 </span>type_tree* <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L59" class="LineNr"> 59 </span>  string_tree* type_names = <a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;(&quot;</span><span class="Delimiter">)</span> ? parse_string_tree<span class="Delimiter">(</span>x<span class="Delimiter">)</span> : <a href='019type_abbreviations.cc.html#L66'>parse_string_list</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L60" class="LineNr"> 60 </span>  type_tree* result = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>type_names<span class="Delimiter">);</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Normal">delete</span> type_names<span class="Delimiter">;</span>
 <span id="L62" class="LineNr"> 62 </span>  expand_type_abbreviations<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L64" class="LineNr"> 64 </span><span class="Delimiter">}</span>
 <span id="L65" class="LineNr"> 65 </span>
-<span id="L66" class="LineNr"> 66 </span>string_tree* <a href='018type_abbreviations.cc.html#L66'>parse_string_list</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr"> 66 </span>string_tree* <a href='019type_abbreviations.cc.html#L66'>parse_string_list</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L67" class="LineNr"> 67 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
 <span id="L68" class="LineNr"> 68 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Identifier">return</span> parse_property_list<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
@@ -155,9 +155,9 @@ if ('onhashchange' in window) {
 <span id="L91" class="LineNr"> 91 </span><span class="traceContains">+error: 'type' conflict: 'foo' defined as both 'bar' and 'baz'</span>
 <span id="L92" class="LineNr"> 92 </span>
 <span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(scenario type_abbreviation_for_compound)</span>
-<span id="L94" class="LineNr"> 94 </span><span class="muData">type</span> foo = <a href='043space.cc.html#L80'>address</a>:number
+<span id="L94" class="LineNr"> 94 </span><span class="muData">type</span> foo = <a href='043space.cc.html#L101'>address</a>:number
 <span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">a</span>:foo<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
 <span id="L97" class="LineNr"> 97 </span>]
 <span id="L98" class="LineNr"> 98 </span><span class="traceContains">+transform: product type after expanding abbreviations: (&quot;address&quot; &quot;number&quot;)</span>
 <span id="L99" class="LineNr"> 99 </span>
@@ -166,20 +166,20 @@ if ('onhashchange' in window) {
 <span id="L102" class="LineNr">102 </span><span class="Delimiter">:(before &quot;End save_snapshots&quot;)</span>
 <span id="L103" class="LineNr">103 </span>Type_abbreviations_snapshot = Type_abbreviations<span class="Delimiter">;</span>
 <span id="L104" class="LineNr">104 </span><span class="Delimiter">:(before &quot;End restore_snapshots&quot;)</span>
-<span id="L105" class="LineNr">105 </span><a href='018type_abbreviations.cc.html#L109'>restore_type_abbreviations</a><span class="Delimiter">();</span>
+<span id="L105" class="LineNr">105 </span><a href='019type_abbreviations.cc.html#L109'>restore_type_abbreviations</a><span class="Delimiter">();</span>
 <span id="L106" class="LineNr">106 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L107" class="LineNr">107 </span>atexit<span class="Delimiter">(</span><a href='018type_abbreviations.cc.html#L117'>clear_type_abbreviations</a><span class="Delimiter">);</span>
+<span id="L107" class="LineNr">107 </span>atexit<span class="Delimiter">(</span><a href='019type_abbreviations.cc.html#L117'>clear_type_abbreviations</a><span class="Delimiter">);</span>
 <span id="L108" class="LineNr">108 </span><span class="Delimiter">:(code)</span>
-<span id="L109" class="LineNr">109 </span><span class="Normal">void</span> <a href='018type_abbreviations.cc.html#L109'>restore_type_abbreviations</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt;::iterator p = Type_abbreviations<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type_abbreviations<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span><span class="Normal">void</span> <a href='019type_abbreviations.cc.html#L109'>restore_type_abbreviations</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt;::iterator p = Type_abbreviations<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type_abbreviations<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L111" class="LineNr">111 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_abbreviations_snapshot<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
 <span id="L112" class="LineNr">112 </span>      <span class="Normal">delete</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
 <span id="L114" class="LineNr">114 </span>  Type_abbreviations<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L115" class="LineNr">115 </span>  Type_abbreviations = Type_abbreviations_snapshot<span class="Delimiter">;</span>
 <span id="L116" class="LineNr">116 </span><span class="Delimiter">}</span>
-<span id="L117" class="LineNr">117 </span><span class="Normal">void</span> <a href='018type_abbreviations.cc.html#L117'>clear_type_abbreviations</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt;::iterator p = Type_abbreviations<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type_abbreviations<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L117" class="LineNr">117 </span><span class="Normal">void</span> <a href='019type_abbreviations.cc.html#L117'>clear_type_abbreviations</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt;::iterator p = Type_abbreviations<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type_abbreviations<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
 <span id="L119" class="LineNr">119 </span>    <span class="Normal">delete</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L120" class="LineNr">120 </span>  Type_abbreviations<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L121" class="LineNr">121 </span><span class="Delimiter">}</span>
@@ -187,16 +187,16 @@ if ('onhashchange' in window) {
 <span id="L123" class="LineNr">123 </span><span class="SalientComment">//:: A few default abbreviations.</span>
 <span id="L124" class="LineNr">124 </span>
 <span id="L125" class="LineNr">125 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L126" class="LineNr">126 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;&amp;&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address&quot;</span><span class="Delimiter">));</span>
-<span id="L127" class="LineNr">127 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;@&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;array&quot;</span><span class="Delimiter">));</span>
-<span id="L128" class="LineNr">128 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;num&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;number&quot;</span><span class="Delimiter">));</span>
-<span id="L129" class="LineNr">129 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;bool&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">));</span>
-<span id="L130" class="LineNr">130 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;char&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;character&quot;</span><span class="Delimiter">));</span>
+<span id="L126" class="LineNr">126 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;&amp;&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address&quot;</span><span class="Delimiter">));</span>
+<span id="L127" class="LineNr">127 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;@&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;array&quot;</span><span class="Delimiter">));</span>
+<span id="L128" class="LineNr">128 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;num&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;number&quot;</span><span class="Delimiter">));</span>
+<span id="L129" class="LineNr">129 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;bool&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;boolean&quot;</span><span class="Delimiter">));</span>
+<span id="L130" class="LineNr">130 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;char&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;character&quot;</span><span class="Delimiter">));</span>
 <span id="L131" class="LineNr">131 </span>
 <span id="L132" class="LineNr">132 </span><span class="Delimiter">:(scenario use_type_abbreviations_when_declaring_type_abbreviations)</span>
 <span id="L133" class="LineNr">133 </span><span class="muData">type</span> foo = &amp;:num
 <span id="L134" class="LineNr">134 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L135" class="LineNr">135 </span>  <span class="Normal">a</span>:foo<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
 <span id="L136" class="LineNr">136 </span>]
 <span id="L137" class="LineNr">137 </span><span class="traceContains">+transform: product type after expanding abbreviations: (&quot;address&quot; &quot;number&quot;)</span>
 <span id="L138" class="LineNr">138 </span>
@@ -232,17 +232,17 @@ if ('onhashchange' in window) {
 <span id="L168" class="LineNr">168 </span><span class="Delimiter">}</span>
 <span id="L169" class="LineNr">169 </span>
 <span id="L170" class="LineNr">170 </span><span class="Normal">void</span> expand_type_abbreviations<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L171" class="LineNr">171 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- expand type abbreviations in <a href='010vm.cc.html#L19'>recipe</a> '&quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L171" class="LineNr">171 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- expand type abbreviations in <a href='010vm.cc.html#L19'>recipe</a> '&quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L173" class="LineNr">173 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L174" class="LineNr">174 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L175" class="LineNr">175 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L176" class="LineNr">176 </span>      expand_type_abbreviations<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L177" class="LineNr">177 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient type after expanding abbreviations: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient type after expanding abbreviations: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L178" class="LineNr">178 </span>    <span class="Delimiter">}</span>
 <span id="L179" class="LineNr">179 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L180" class="LineNr">180 </span>      expand_type_abbreviations<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L181" class="LineNr">181 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product type after expanding abbreviations: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product type after expanding abbreviations: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L182" class="LineNr">182 </span>    <span class="Delimiter">}</span>
 <span id="L183" class="LineNr">183 </span>  <span class="Delimiter">}</span>
 <span id="L184" class="LineNr">184 </span>  <span class="Comment">// End Expand Type Abbreviations(caller)</span>
@@ -255,7 +255,7 @@ if ('onhashchange' in window) {
 <span id="L191" class="LineNr">191 </span>    expand_type_abbreviations<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
 <span id="L192" class="LineNr">192 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L193" class="LineNr">193 </span>  <span class="Delimiter">}</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
+<span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
 <span id="L195" class="LineNr">195 </span>    *type = type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">));</span>
 <span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
 </pre>
diff --git a/html/020run.cc.html b/html/020run.cc.html
index 06997f76..3e2dd8e7 100644
--- a/html/020run.cc.html
+++ b/html/020run.cc.html
@@ -29,7 +29,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .Special { color: #c00000; }
 .Identifier { color: #c0a020; }
-.PreProc { color: #800080; }
 -->
 </style>
 
@@ -129,10 +128,10 @@ if ('onhashchange' in window) {
 <span id="L63" class="LineNr"> 63 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='073scheduler.cc.html#L28'>should_continue_running</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// beware: may modify Current_routine</span>
 <span id="L64" class="LineNr"> 64 </span>    <span class="Comment">// Running One Instruction</span>
 <span id="L65" class="LineNr"> 65 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>is_label<span class="Delimiter">)</span> <span class="Delimiter">{</span> ++current_step_index<span class="Delimiter">();</span>  <span class="Identifier">continue</span><span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L66" class="LineNr"> 66 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span>Initial_callstack_depth + Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span><span class="CommentedCode">//?     if (Foo) cerr &lt;&lt; &quot;run: &quot; &lt;&lt; to_string(current_instruction()) &lt;&lt; '\n';</span>
 <span id="L68" class="LineNr"> 68 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;something wrote to location 0; this should never happen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;something wrote to location 0; this should never happen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L70" class="LineNr"> 70 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L71" class="LineNr"> 71 </span>    <span class="Delimiter">}</span>
 <span id="L72" class="LineNr"> 72 </span>    <span class="Comment">// read all ingredients from memory, each potentially spanning multiple locations</span>
@@ -147,23 +146,23 @@ if ('onhashchange' in window) {
 <span id="L81" class="LineNr"> 81 </span>    <span class="Comment">//: into. Never call 'continue' within it. Instead, we'll explicitly</span>
 <span id="L82" class="LineNr"> 82 </span>    <span class="Comment">//: control which of the following stages after the switch we run for each</span>
 <span id="L83" class="LineNr"> 83 </span>    <span class="Comment">//: instruction.</span>
-<span id="L84" class="LineNr"> 84 </span>    <span class="Normal">bool</span> write_products = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L85" class="LineNr"> 85 </span>    <span class="Normal">bool</span> fall_through_to_next_instruction = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span>    <span class="Normal">bool</span> write_products =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>    <span class="Normal">bool</span> fall_through_to_next_instruction =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L86" class="LineNr"> 86 </span>    <span class="Normal">switch</span> <span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L87" class="LineNr"> 87 </span>      <span class="Comment">// Primitive Recipe Implementations</span>
-<span id="L88" class="LineNr"> 88 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L195'>COPY</a>: <span class="Delimiter">{</span>
-<span id="L89" class="LineNr"> 89 </span>        copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
+<span id="L88" class="LineNr"> 88 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L196'>COPY</a>: <span class="Delimiter">{</span>
+<span id="L89" class="LineNr"> 89 </span>        copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
 <span id="L90" class="LineNr"> 90 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L91" class="LineNr"> 91 </span>      <span class="Delimiter">}</span>
 <span id="L92" class="LineNr"> 92 </span>      <span class="Comment">// End Primitive Recipe Implementations</span>
 <span id="L93" class="LineNr"> 93 </span>      <span class="Normal">default</span>: <span class="Delimiter">{</span>
-<span id="L94" class="LineNr"> 94 </span>        cout &lt;&lt; <span class="Constant">&quot;not a primitive op: &quot;</span> &lt;&lt; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L94" class="LineNr"> 94 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;not a primitive op: &quot;</span> &lt;&lt; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L95" class="LineNr"> 95 </span>      <span class="Delimiter">}</span>
 <span id="L96" class="LineNr"> 96 </span>    <span class="Delimiter">}</span>
 <span id="L97" class="LineNr"> 97 </span>    <span class="Comment">//: used by a later layer</span>
 <span id="L98" class="LineNr"> 98 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>write_products<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L99" class="LineNr"> 99 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L100" class="LineNr">100 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: failed to write to all products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: failed to write to all products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L101" class="LineNr">101 </span>      <span class="Delimiter">}</span>
 <span id="L102" class="LineNr">102 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L103" class="LineNr">103 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -188,381 +187,385 @@ if ('onhashchange' in window) {
 <span id="L122" class="LineNr">122 </span>
 <span id="L123" class="LineNr">123 </span><span class="Normal">bool</span> should_copy_ingredients<span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L124" class="LineNr">124 </span>  <span class="Comment">// End should_copy_ingredients Special-cases</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>
-<span id="L128" class="LineNr">128 </span><span class="Comment">//: Some helpers.</span>
-<span id="L129" class="LineNr">129 </span><span class="Comment">//: Important that they return references into the current routine.</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L132" class="LineNr">132 </span><span class="Normal">int</span>&amp; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Identifier">return</span> Current_routine<span class="Delimiter">-&gt;</span>running_step_index<span class="Delimiter">;</span>
-<span id="L134" class="LineNr">134 </span><span class="Delimiter">}</span>
-<span id="L135" class="LineNr">135 </span>
-<span id="L136" class="LineNr">136 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L137" class="LineNr">137 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='026call.cc.html#L85'>currently_running_recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L138" class="LineNr">138 </span>  <span class="Identifier">return</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span><span class="Delimiter">}</span>
-<span id="L140" class="LineNr">140 </span>
-<span id="L141" class="LineNr">141 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L142" class="LineNr">142 </span><span class="Normal">const</span> string&amp; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
-<span id="L145" class="LineNr">145 </span>
-<span id="L146" class="LineNr">146 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L147" class="LineNr">147 </span><span class="Normal">const</span> recipe&amp; <a href='026call.cc.html#L86'>current_recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">);</span>
-<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
-<span id="L150" class="LineNr">150 </span>
-<span id="L151" class="LineNr">151 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L152" class="LineNr">152 </span><span class="Normal">const</span> instruction&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L153" class="LineNr">153 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>running_step_index<span class="Delimiter">);</span>
-<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
-<span id="L155" class="LineNr">155 </span>
-<span id="L156" class="LineNr">156 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L157" class="LineNr">157 </span><span class="Normal">bool</span> routine::completed<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Identifier">return</span> running_step_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>
-<span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
-<span id="L160" class="LineNr">160 </span>
-<span id="L161" class="LineNr">161 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L162" class="LineNr">162 </span><span class="Normal">const</span> vector&lt;instruction&gt;&amp; routine::steps<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="SalientComment">//:: Startup flow</span>
+<span id="L128" class="LineNr">128 </span><span class="Normal">bool</span> is_mu_scalar<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Identifier">return</span> is_mu_scalar<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L130" class="LineNr">130 </span><span class="Delimiter">}</span>
+<span id="L131" class="LineNr">131 </span><span class="Normal">bool</span> is_mu_scalar<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>type<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="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span>
+<span id="L136" class="LineNr">136 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;literal-string&quot;</span><span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>type<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span>
+<span id="L140" class="LineNr">140 </span><span class="Normal">bool</span> is_mu_address<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L141" class="LineNr">141 </span>  <span class="Comment">// End Preprocess is_mu_address(reagent r)</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Identifier">return</span> is_mu_address<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">}</span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">bool</span> is_mu_address<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L149" class="LineNr">149 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L150" class="LineNr">150 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal<span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span><span class="Delimiter">}</span>
+<span id="L154" class="LineNr">154 </span>
+<span id="L155" class="LineNr">155 </span><span class="Comment">//: Some helpers.</span>
+<span id="L156" class="LineNr">156 </span><span class="Comment">//: Important that they return references into the current routine.</span>
+<span id="L157" class="LineNr">157 </span>
+<span id="L158" class="LineNr">158 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L159" class="LineNr">159 </span><span class="Normal">int</span>&amp; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Identifier">return</span> Current_routine<span class="Delimiter">-&gt;</span>running_step_index<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="Comment">//: hook replaced in a later layer</span>
+<span id="L164" class="LineNr">164 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='026call.cc.html#L85'>currently_running_recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Identifier">return</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">}</span>
 <span id="L167" class="LineNr">167 </span>
-<span id="L168" class="LineNr">168 </span><span class="Comment">//: Step 1: load all .mu files with numeric prefixes (in order)</span>
-<span id="L169" class="LineNr">169 </span><span class="Delimiter">:(before &quot;End Load Recipes&quot;)</span>
-<span id="L170" class="LineNr">170 </span><span class="Comment">// Load Mu Prelude</span>
-<span id="L171" class="LineNr">171 </span><span class="CommentedCode">//? Save_trace = true;</span>
-<span id="L172" class="LineNr">172 </span><span class="CommentedCode">//? START_TRACING_UNTIL_END_OF_SCOPE;</span>
-<span id="L173" class="LineNr">173 </span>load_file_or_directory<span class="Delimiter">(</span><span class="Constant">&quot;core.mu&quot;</span><span class="Delimiter">);</span>
-<span id="L174" class="LineNr">174 </span><span class="CommentedCode">//? DUMP(&quot;&quot;);</span>
-<span id="L175" class="LineNr">175 </span><span class="CommentedCode">//? exit(0);</span>
-<span id="L176" class="LineNr">176 </span>
-<span id="L177" class="LineNr">177 </span><span class="Comment">//: Step 2: load any .mu files provided at the commandline</span>
-<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
-<span id="L179" class="LineNr">179 </span><span class="Comment">// Check For .mu Files</span>
-<span id="L180" class="LineNr">180 </span><span class="CommentedCode">//? START_TRACING_UNTIL_END_OF_SCOPE</span>
-<span id="L181" class="LineNr">181 </span><span class="CommentedCode">//? Dump_trace = true;</span>
-<span id="L182" class="LineNr">182 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L183" class="LineNr">183 </span>  <span class="Comment">// skip argv[0]</span>
-<span id="L184" class="LineNr">184 </span>  ++argv<span class="Delimiter">;</span>
-<span id="L185" class="LineNr">185 </span>  --argc<span class="Delimiter">;</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L187" class="LineNr">187 </span>    <span class="Comment">// ignore argv past '--'; that's commandline args for 'main'</span>
-<span id="L188" class="LineNr">188 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>string<span class="Delimiter">(</span>*argv<span class="Delimiter">)</span> == <span class="Constant">&quot;--&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L189" class="LineNr">189 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>*argv<span class="Delimiter">,</span> <span class="Constant">&quot;--&quot;</span><span class="Delimiter">))</span>
-<span id="L190" class="LineNr">190 </span>      cerr &lt;&lt; <span class="Constant">&quot;treating &quot;</span> &lt;&lt; *argv &lt;&lt; <span class="Constant">&quot; as a file rather than an option</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L191" class="LineNr">191 </span>    load_file_or_directory<span class="Delimiter">(</span>*argv<span class="Delimiter">);</span>
-<span id="L192" class="LineNr">192 </span>    --argc<span class="Delimiter">;</span>
-<span id="L193" class="LineNr">193 </span>    ++argv<span class="Delimiter">;</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Delimiter">}</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">));</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
-<span id="L197" class="LineNr">197 </span><a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L198" class="LineNr">198 </span><span class="CommentedCode">//? cerr &lt;&lt; to_original_string(get(Type_ordinal, &quot;editor&quot;)) &lt;&lt; '\n';</span>
-<span id="L199" class="LineNr">199 </span><span class="CommentedCode">//? cerr &lt;&lt; to_original_string(get(Recipe, get(Recipe_ordinal, &quot;event-loop&quot;))) &lt;&lt; '\n';</span>
-<span id="L200" class="LineNr">200 </span><span class="CommentedCode">//? DUMP(&quot;&quot;);</span>
-<span id="L201" class="LineNr">201 </span><span class="CommentedCode">//? exit(0);</span>
-<span id="L202" class="LineNr">202 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L198'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Start_tracing &amp;&amp; Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
-<span id="L206" class="LineNr">206 </span>save_snapshots<span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>
-<span id="L208" class="LineNr">208 </span><span class="Comment">//: Step 3: if we aren't running tests, locate a recipe called 'main' and</span>
-<span id="L209" class="LineNr">209 </span><span class="Comment">//: start running it.</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
-<span id="L211" class="LineNr">211 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!Run_tests &amp;&amp; contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> &amp;&amp; contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Comment">// Running Main</span>
-<span id="L213" class="LineNr">213 </span>  <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Start_tracing &amp;&amp; Trace_stream == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>    Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
-<span id="L216" class="LineNr">216 </span>    Save_trace = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== Starting to run&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L219" class="LineNr">219 </span>  assert<span class="Delimiter">(</span>Num_calls_to_transform_all == <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L220" class="LineNr">220 </span>  <a href='073scheduler.cc.html#L122'>run_main</a><span class="Delimiter">(</span>argc<span class="Delimiter">,</span> argv<span class="Delimiter">);</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Start_tracing &amp;&amp; Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L222" class="LineNr">222 </span><span class="Delimiter">}</span>
-<span id="L223" class="LineNr">223 </span><span class="Delimiter">:(code)</span>
-<span id="L224" class="LineNr">224 </span><span class="Normal">void</span> <a href='073scheduler.cc.html#L122'>run_main</a><span class="Delimiter">(</span><span class="Normal">int</span> argc<span class="Delimiter">,</span> <span class="Normal">char</span>* argv[]<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L225" class="LineNr">225 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> r = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">);</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">)</span> run<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
-<span id="L228" class="LineNr">228 </span>
-<span id="L229" class="LineNr">229 </span><span class="Comment">//: By default we don't maintain the trace while running main because its</span>
-<span id="L230" class="LineNr">230 </span><span class="Comment">//: overheads can grow rapidly. However, it's useful when debugging.</span>
-<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L232" class="LineNr">232 </span><span class="Normal">bool</span> Start_tracing = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
-<span id="L234" class="LineNr">234 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--trace&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L235" class="LineNr">235 </span>  Start_tracing = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
-<span id="L237" class="LineNr">237 </span>
-<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(code)</span>
-<span id="L239" class="LineNr">239 </span><span class="Normal">void</span> cleanup_main<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span>
-<span id="L242" class="LineNr">242 </span>    Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L243" class="LineNr">243 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
-<span id="L244" class="LineNr">244 </span>  Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L169" class="LineNr">169 </span><span class="Normal">const</span> string&amp; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name<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">//: hook replaced in a later layer</span>
+<span id="L174" class="LineNr">174 </span><span class="Normal">const</span> recipe&amp; <a href='026call.cc.html#L86'>current_recipe</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">);</span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
+<span id="L177" class="LineNr">177 </span>
+<span id="L178" class="LineNr">178 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L179" class="LineNr">179 </span><span class="Normal">const</span> instruction&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> Current_routine<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>running_step_index<span class="Delimiter">);</span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">bool</span> routine::completed<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Identifier">return</span> running_step_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>
+<span id="L186" class="LineNr">186 </span><span class="Delimiter">}</span>
+<span id="L187" class="LineNr">187 </span>
+<span id="L188" class="LineNr">188 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L189" class="LineNr">189 </span><span class="Normal">const</span> vector&lt;instruction&gt;&amp; routine::steps<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">;</span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
+<span id="L192" class="LineNr">192 </span>
+<span id="L193" class="LineNr">193 </span><span class="SalientComment">//:: Startup flow</span>
+<span id="L194" class="LineNr">194 </span>
+<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(before &quot;End Mu Prelude&quot;)</span>
+<span id="L196" class="LineNr">196 </span>load_file_or_directory<span class="Delimiter">(</span><span class="Constant">&quot;core.mu&quot;</span><span class="Delimiter">);</span>
+<span id="L197" class="LineNr">197 </span><span class="CommentedCode">//? DUMP(&quot;&quot;);</span>
+<span id="L198" class="LineNr">198 </span><span class="CommentedCode">//? exit(0);</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Comment">//: Step 2: load any .mu files provided at the commandline</span>
+<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L202" class="LineNr">202 </span><span class="Comment">// Check For .mu Files</span>
+<span id="L203" class="LineNr">203 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Comment">// skip argv[0]</span>
+<span id="L205" class="LineNr">205 </span>  ++argv<span class="Delimiter">;</span>
+<span id="L206" class="LineNr">206 </span>  --argc<span class="Delimiter">;</span>
+<span id="L207" class="LineNr">207 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>    <span class="Comment">// ignore argv past '--'; that's commandline args for 'main'</span>
+<span id="L209" class="LineNr">209 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>string<span class="Delimiter">(</span>*argv<span class="Delimiter">)</span> == <span class="Constant">&quot;--&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L210" class="LineNr">210 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>*argv<span class="Delimiter">,</span> <span class="Constant">&quot;--&quot;</span><span class="Delimiter">))</span>
+<span id="L211" class="LineNr">211 </span>      cerr &lt;&lt; <span class="Constant">&quot;treating &quot;</span> &lt;&lt; *argv &lt;&lt; <span class="Constant">&quot; as a file rather than an option</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L212" class="LineNr">212 </span>    load_file_or_directory<span class="Delimiter">(</span>*argv<span class="Delimiter">);</span>
+<span id="L213" class="LineNr">213 </span>    --argc<span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>    ++argv<span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Delimiter">}</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">));</span>
+<span id="L217" class="LineNr">217 </span><span class="Delimiter">}</span>
+<span id="L218" class="LineNr">218 </span><a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L219" class="LineNr">219 </span><span class="CommentedCode">//? cerr &lt;&lt; to_original_string(get(Type_ordinal, &quot;editor&quot;)) &lt;&lt; '\n';</span>
+<span id="L220" class="LineNr">220 </span><span class="CommentedCode">//? cerr &lt;&lt; to_original_string(get(Recipe, get(Recipe_ordinal, &quot;event-loop&quot;))) &lt;&lt; '\n';</span>
+<span id="L221" class="LineNr">221 </span><span class="CommentedCode">//? DUMP(&quot;&quot;);</span>
+<span id="L222" class="LineNr">222 </span><span class="CommentedCode">//? exit(0);</span>
+<span id="L223" class="LineNr">223 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream &amp;&amp; Run_tests<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Comment">// We'll want a trace per test. Clear the trace.</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
+<span id="L227" class="LineNr">227 </span>  Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">}</span>
+<span id="L229" class="LineNr">229 </span>save_snapshots<span class="Delimiter">();</span>
+<span id="L230" class="LineNr">230 </span>
+<span id="L231" class="LineNr">231 </span><span class="Comment">//: Step 3: if we aren't running tests, locate a recipe called 'main' and</span>
+<span id="L232" class="LineNr">232 </span><span class="Comment">//: start running it.</span>
+<span id="L233" class="LineNr">233 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
+<span id="L234" class="LineNr">234 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!Run_tests &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Comment">// Running Main</span>
+<span id="L236" class="LineNr">236 </span>  <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
+<span id="L237" class="LineNr">237 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== Starting to run&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L238" class="LineNr">238 </span>  assert<span class="Delimiter">(</span>Num_calls_to_transform_all == <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L239" class="LineNr">239 </span>  <a href='073scheduler.cc.html#L122'>run_main</a><span class="Delimiter">(</span>argc<span class="Delimiter">,</span> argv<span class="Delimiter">);</span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">:(code)</span>
+<span id="L242" class="LineNr">242 </span><span class="Normal">void</span> <a href='073scheduler.cc.html#L122'>run_main</a><span class="Delimiter">(</span><span class="Normal">int</span> argc<span class="Delimiter">,</span> <span class="Normal">char</span>* argv[]<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L243" class="LineNr">243 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> r = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">);</span>
+<span id="L244" class="LineNr">244 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">)</span> run<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
 <span id="L245" class="LineNr">245 </span><span class="Delimiter">}</span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L247" class="LineNr">247 </span>atexit<span class="Delimiter">(</span>cleanup_main<span class="Delimiter">);</span>
-<span id="L248" class="LineNr">248 </span>
-<span id="L249" class="LineNr">249 </span><span class="Delimiter">:(code)</span>
-<span id="L250" class="LineNr">250 </span><span class="Normal">void</span> load_file_or_directory<span class="Delimiter">(</span>string filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L251" class="LineNr">251 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_directory<span class="Delimiter">(</span>filename<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L252" class="LineNr">252 </span>    load_all<span class="Delimiter">(</span>filename<span class="Delimiter">);</span>
-<span id="L253" class="LineNr">253 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L254" class="LineNr">254 </span>  <span class="Delimiter">}</span>
-<span id="L255" class="LineNr">255 </span>  ifstream fin<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">());</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!fin<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L257" class="LineNr">257 </span>    cerr &lt;&lt; <span class="Constant">&quot;no such file '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  <span class="Comment">// don't raise, just warn. just in case it's just a name for a scenario to run.</span>
-<span id="L258" class="LineNr">258 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Delimiter">}</span>
-<span id="L260" class="LineNr">260 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== &quot;</span> &lt;&lt; filename &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L261" class="LineNr">261 </span>  load<span class="Delimiter">(</span>fin<span class="Delimiter">);</span>
-<span id="L262" class="LineNr">262 </span>  fin<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
-<span id="L263" class="LineNr">263 </span><span class="Delimiter">}</span>
-<span id="L264" class="LineNr">264 </span>
-<span id="L265" class="LineNr">265 </span><span class="Normal">bool</span> is_directory<span class="Delimiter">(</span>string path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Normal">struct</span> stat info<span class="Delimiter">;</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>stat<span class="Delimiter">(</span>path<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;info<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// error</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>st_mode &amp; S_IFDIR<span class="Delimiter">;</span>
-<span id="L269" class="LineNr">269 </span><span class="Delimiter">}</span>
-<span id="L270" class="LineNr">270 </span>
-<span id="L271" class="LineNr">271 </span><span class="Normal">void</span> load_all<span class="Delimiter">(</span>string dir<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L272" class="LineNr">272 </span>  dirent** files<span class="Delimiter">;</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">int</span> num_files = scandir<span class="Delimiter">(</span>dir<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;files<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">,</span> alphasort<span class="Delimiter">);</span>
-<span id="L274" class="LineNr">274 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; num_files<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L275" class="LineNr">275 </span>    string curr_file = files[i]<span class="Delimiter">-&gt;</span>d_name<span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isdigit<span class="Delimiter">(</span>curr_file<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; <a href='011load.cc.html#L184'>ends_with</a><span class="Delimiter">(</span>curr_file<span class="Delimiter">,</span> <span class="Constant">&quot;.mu&quot;</span><span class="Delimiter">))</span>
-<span id="L277" class="LineNr">277 </span>      load_file_or_directory<span class="Delimiter">(</span>dir+<span class="Constant">'/'</span>+curr_file<span class="Delimiter">);</span>
-<span id="L278" class="LineNr">278 </span>    free<span class="Delimiter">(</span>files[i]<span class="Delimiter">);</span>
-<span id="L279" class="LineNr">279 </span>    files[i] = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L280" class="LineNr">280 </span>  <span class="Delimiter">}</span>
-<span id="L281" class="LineNr">281 </span>  free<span class="Delimiter">(</span>files<span class="Delimiter">);</span>
-<span id="L282" class="LineNr">282 </span><span class="Delimiter">}</span>
-<span id="L283" class="LineNr">283 </span>
-<span id="L284" class="LineNr">284 </span><span class="Normal">bool</span> <a href='011load.cc.html#L184'>ends_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; pat<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L285" class="LineNr">285 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>string::const_reverse_iterator p = s<span class="Delimiter">.</span>rbegin<span class="Delimiter">(),</span> q = pat<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span>  q != pat<span class="Delimiter">.</span>rend<span class="Delimiter">();</span>  ++p<span class="Delimiter">,</span> ++q<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L286" class="LineNr">286 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p == s<span class="Delimiter">.</span>rend<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// pat too long</span>
-<span id="L287" class="LineNr">287 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*p != *q<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L288" class="LineNr">288 </span>  <span class="Delimiter">}</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L290" class="LineNr">290 </span><span class="Delimiter">}</span>
-<span id="L291" class="LineNr">291 </span>
-<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L293" class="LineNr">293 </span><span class="PreProc">#include </span><span class="Constant">&lt;dirent.h&gt;</span>
-<span id="L294" class="LineNr">294 </span><span class="PreProc">#include </span><span class="Constant">&lt;sys/stat.h&gt;</span>
+<span id="L246" class="LineNr">246 </span>
+<span id="L247" class="LineNr">247 </span><span class="Delimiter">:(code)</span>
+<span id="L248" class="LineNr">248 </span><span class="Normal">void</span> load_file_or_directory<span class="Delimiter">(</span>string filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L249" class="LineNr">249 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_directory<span class="Delimiter">(</span>filename<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L250" class="LineNr">250 </span>    load_all<span class="Delimiter">(</span>filename<span class="Delimiter">);</span>
+<span id="L251" class="LineNr">251 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Delimiter">}</span>
+<span id="L253" class="LineNr">253 </span>  ifstream fin<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">());</span>
+<span id="L254" class="LineNr">254 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!fin<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L255" class="LineNr">255 </span>    cerr &lt;&lt; <span class="Constant">&quot;no such file '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  <span class="Comment">// don't raise, just warn. just in case it's just a name for a scenario to run.</span>
+<span id="L256" class="LineNr">256 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Delimiter">}</span>
+<span id="L258" class="LineNr">258 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;=== &quot;</span> &lt;&lt; filename &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L259" class="LineNr">259 </span>  load<span class="Delimiter">(</span>fin<span class="Delimiter">);</span>
+<span id="L260" class="LineNr">260 </span>  fin<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">}</span>
+<span id="L262" class="LineNr">262 </span>
+<span id="L263" class="LineNr">263 </span><span class="Normal">bool</span> is_directory<span class="Delimiter">(</span>string path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Normal">struct</span> stat info<span class="Delimiter">;</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>stat<span class="Delimiter">(</span>path<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;info<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// error</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>st_mode &amp; S_IFDIR<span class="Delimiter">;</span>
+<span id="L267" class="LineNr">267 </span><span class="Delimiter">}</span>
+<span id="L268" class="LineNr">268 </span>
+<span id="L269" class="LineNr">269 </span><span class="Normal">void</span> load_all<span class="Delimiter">(</span>string dir<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L270" class="LineNr">270 </span>  dirent** files<span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Normal">int</span> num_files = scandir<span class="Delimiter">(</span>dir<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> &amp;files<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">,</span> alphasort<span class="Delimiter">);</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; num_files<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L273" class="LineNr">273 </span>    string curr_file = files[i]<span class="Delimiter">-&gt;</span>d_name<span class="Delimiter">;</span>
+<span id="L274" class="LineNr">274 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isdigit<span class="Delimiter">(</span>curr_file<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; <a href='011load.cc.html#L186'>ends_with</a><span class="Delimiter">(</span>curr_file<span class="Delimiter">,</span> <span class="Constant">&quot;.mu&quot;</span><span class="Delimiter">))</span>
+<span id="L275" class="LineNr">275 </span>      load_file_or_directory<span class="Delimiter">(</span>dir+<span class="Constant">'/'</span>+curr_file<span class="Delimiter">);</span>
+<span id="L276" class="LineNr">276 </span>    free<span class="Delimiter">(</span>files[i]<span class="Delimiter">);</span>
+<span id="L277" class="LineNr">277 </span>    files[i] = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Delimiter">}</span>
+<span id="L279" class="LineNr">279 </span>  free<span class="Delimiter">(</span>files<span class="Delimiter">);</span>
+<span id="L280" class="LineNr">280 </span><span class="Delimiter">}</span>
+<span id="L281" class="LineNr">281 </span>
+<span id="L282" class="LineNr">282 </span><span class="Normal">bool</span> <a href='011load.cc.html#L186'>ends_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; pat<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>string::const_reverse_iterator p = s<span class="Delimiter">.</span>rbegin<span class="Delimiter">(),</span> q = pat<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span>  q != pat<span class="Delimiter">.</span>rend<span class="Delimiter">();</span>  ++p<span class="Delimiter">,</span> ++q<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L284" class="LineNr">284 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p == s<span class="Delimiter">.</span>rend<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// pat too long</span>
+<span id="L285" class="LineNr">285 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*p != *q<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L286" class="LineNr">286 </span>  <span class="Delimiter">}</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
+<span id="L289" class="LineNr">289 </span>
+<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L291" class="LineNr">291 </span><span class="Comment">#include &lt;dirent.h&gt;</span>
+<span id="L292" class="LineNr">292 </span><span class="Comment">#include &lt;sys/stat.h&gt;</span>
+<span id="L293" class="LineNr">293 </span>
+<span id="L294" class="LineNr">294 </span><span class="SalientComment">//:: Reading from memory, writing to memory.</span>
 <span id="L295" class="LineNr">295 </span>
-<span id="L296" class="LineNr">296 </span><span class="SalientComment">//:: Reading from memory, writing to memory.</span>
-<span id="L297" class="LineNr">297 </span>
-<span id="L298" class="LineNr">298 </span><span class="Delimiter">:(code)</span>
-<span id="L299" class="LineNr">299 </span>vector&lt;<span class="Normal">double</span>&gt; read_memory<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Comment">// Begin Preprocess read_memory(x)</span>
-<span id="L301" class="LineNr">301 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
-<span id="L302" class="LineNr">302 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L303" class="LineNr">303 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
-<span id="L304" class="LineNr">304 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L305" class="LineNr">305 </span>  <span class="Delimiter">}</span>
-<span id="L306" class="LineNr">306 </span>  <span class="Comment">// End Preprocess read_memory(x)</span>
-<span id="L307" class="LineNr">307 </span>  <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L308" class="LineNr">308 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>  offset &lt; size<span class="Delimiter">;</span>  ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L309" class="LineNr">309 </span>    <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
-<span id="L310" class="LineNr">310 </span>    <a href='003trace.cc.html#L167'>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; x<span class="Delimiter">.</span>value+offset &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L311" class="LineNr">311 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>val<span class="Delimiter">);</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Delimiter">}</span>
-<span id="L313" class="LineNr">313 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L314" class="LineNr">314 </span><span class="Delimiter">}</span>
-<span id="L315" class="LineNr">315 </span>
-<span id="L316" class="LineNr">316 </span><span class="Normal">void</span> write_memory<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; data<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L317" class="LineNr">317 </span>  assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">);</span>  <span class="Comment">// run-time only</span>
-<span id="L318" class="LineNr">318 </span>  <span class="Comment">// Begin Preprocess write_memory(x, data)</span>
-<span id="L319" class="LineNr">319 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L320" class="LineNr">320 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L321" class="LineNr">321 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Delimiter">}</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L324" class="LineNr">324 </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="L325" class="LineNr">325 </span>  <span class="Comment">// End Preprocess write_memory(x, data)</span>
-<span id="L326" class="LineNr">326 </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="L327" class="LineNr">327 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to location 0 in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L328" class="LineNr">328 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L329" class="LineNr">329 </span>  <span class="Delimiter">}</span>
-<span id="L330" class="LineNr">330 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size_mismatch<span class="Delimiter">(</span>x<span class="Delimiter">,</span> data<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L331" class="LineNr">331 </span>    <a href='003trace.cc.html#L174'>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;size mismatch in storing to '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;) at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L332" class="LineNr">332 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Delimiter">}</span>
-<span id="L334" class="LineNr">334 </span>  <span class="Comment">// End write_memory(x) Special-cases</span>
-<span id="L335" class="LineNr">335 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>  offset &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">);</span>  ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L336" class="LineNr">336 </span>    assert<span class="Delimiter">(</span>x<span class="Delimiter">.</span>value+offset &gt; <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L337" class="LineNr">337 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value+offset &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L338" class="LineNr">338 </span><span class="CommentedCode">//?     if (Foo) cerr &lt;&lt; &quot;mem: storing &quot; &lt;&lt; no_scientific(data.at(offset)) &lt;&lt; &quot; in location &quot; &lt;&lt; x.value+offset &lt;&lt; '\n';</span>
-<span id="L339" class="LineNr">339 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">,</span> data<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">));</span>
-<span id="L340" class="LineNr">340 </span>  <span class="Delimiter">}</span>
-<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
-<span id="L342" class="LineNr">342 </span>
-<span id="L343" class="LineNr">343 </span><span class="Delimiter">:(code)</span>
-<span id="L344" class="LineNr">344 </span><span class="Normal">int</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L346" class="LineNr">346 </span>  <span class="Comment">// End size_of(reagent r) Special-cases</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L348" class="LineNr">348 </span><span class="Delimiter">}</span>
-<span id="L349" class="LineNr">349 </span><span class="Normal">int</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L350" class="LineNr">350 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L351" class="LineNr">351 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L352" class="LineNr">352 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// error value, but we'll raise it elsewhere</span>
-<span id="L353" class="LineNr">353 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L354" class="LineNr">354 </span>    <span class="Comment">// End size_of(type) Atom Special-cases</span>
-<span id="L355" class="LineNr">355 </span>  <span class="Delimiter">}</span>
-<span id="L356" class="LineNr">356 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L357" class="LineNr">357 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L358" class="LineNr">358 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L359" class="LineNr">359 </span>      <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L360" class="LineNr">360 </span>    <span class="Delimiter">}</span>
-<span id="L361" class="LineNr">361 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L362" class="LineNr">362 </span>    <span class="Comment">// End size_of(type) Non-atom Special-cases</span>
-<span id="L363" class="LineNr">363 </span>  <span class="Delimiter">}</span>
-<span id="L364" class="LineNr">364 </span>  <span class="Comment">// End size_of(type) Special-cases</span>
-<span id="L365" class="LineNr">365 </span>  <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L366" class="LineNr">366 </span><span class="Delimiter">}</span>
-<span id="L367" class="LineNr">367 </span>
-<span id="L368" class="LineNr">368 </span><span class="Normal">bool</span> size_mismatch<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; data<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L369" class="LineNr">369 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L370" class="LineNr">370 </span>  <span class="Comment">// End size_mismatch(x) Special-cases</span>
-<span id="L371" class="LineNr">371 </span><span class="CommentedCode">//?   if (size_of(x) != SIZE(data)) cerr &lt;&lt; size_of(x) &lt;&lt; &quot; vs &quot; &lt;&lt; SIZE(data) &lt;&lt; '\n';</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">);</span>
-<span id="L373" class="LineNr">373 </span><span class="Delimiter">}</span>
-<span id="L374" class="LineNr">374 </span>
-<span id="L375" class="LineNr">375 </span><span class="Normal">bool</span> is_literal<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Identifier">return</span> is_literal<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span><span class="Normal">bool</span> is_literal<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L379" class="LineNr">379 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L380" class="LineNr">380 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L382" class="LineNr">382 </span><span class="Delimiter">}</span>
-<span id="L383" class="LineNr">383 </span>
-<span id="L384" class="LineNr">384 </span><span class="Normal">bool</span> scalar<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">int</span>&gt;&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L385" class="LineNr">385 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L386" class="LineNr">386 </span><span class="Delimiter">}</span>
-<span id="L387" class="LineNr">387 </span><span class="Normal">bool</span> scalar<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L389" class="LineNr">389 </span><span class="Delimiter">}</span>
-<span id="L390" class="LineNr">390 </span>
-<span id="L391" class="LineNr">391 </span><span class="Comment">// helper for tests</span>
-<span id="L392" class="LineNr">392 </span><span class="Normal">void</span> run<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; form<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L393" class="LineNr">393 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span>form<span class="Delimiter">);</span>
-<span id="L394" class="LineNr">394 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L395" class="LineNr">395 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L198'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L397" class="LineNr">397 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Start_tracing &amp;&amp; Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L398" class="LineNr">398 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L399" class="LineNr">399 </span>  <span class="Delimiter">}</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Comment">// if a test defines main, it probably wants to start there regardless of</span>
-<span id="L401" class="LineNr">401 </span>  <span class="Comment">// definition order</span>
-<span id="L402" class="LineNr">402 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)))</span>
-<span id="L403" class="LineNr">403 </span>    run<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">));</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Normal">else</span>
-<span id="L405" class="LineNr">405 </span>    run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>front<span class="Delimiter">());</span>
-<span id="L406" class="LineNr">406 </span><span class="Delimiter">}</span>
-<span id="L407" class="LineNr">407 </span>
-<span id="L408" class="LineNr">408 </span><span class="Delimiter">:(scenario run_label)</span>
-<span id="L409" class="LineNr">409 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L410" class="LineNr">410 </span>  +foo
-<span id="L411" class="LineNr">411 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L412" class="LineNr">412 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
-<span id="L413" class="LineNr">413 </span>]
-<span id="L414" class="LineNr">414 </span><span class="traceContains">+run: {1: &quot;number&quot;} &lt;- copy {23: &quot;literal&quot;}</span>
-<span id="L415" class="LineNr">415 </span><span class="traceContains">+run: {2: &quot;number&quot;} &lt;- copy {1: &quot;number&quot;}</span>
-<span id="L416" class="LineNr">416 </span><span class="traceAbsent">-run: +foo</span>
-<span id="L417" class="LineNr">417 </span>
-<span id="L418" class="LineNr">418 </span><span class="Delimiter">:(scenario run_dummy)</span>
-<span id="L419" class="LineNr">419 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L420" class="LineNr">420 </span>  _<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L421" class="LineNr">421 </span>]
-<span id="L422" class="LineNr">422 </span><span class="traceContains">+run: _ &lt;- copy {0: &quot;literal&quot;}</span>
-<span id="L423" class="LineNr">423 </span>
-<span id="L424" class="LineNr">424 </span><span class="Delimiter">:(scenario write_to_0_disallowed)</span>
-<span id="L425" class="LineNr">425 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L426" class="LineNr">426 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L427" class="LineNr">427 </span>  <span class="Constant">0</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L428" class="LineNr">428 </span>]
-<span id="L429" class="LineNr">429 </span><span class="traceAbsent">-mem: storing 34 in location 0</span>
-<span id="L430" class="LineNr">430 </span>
-<span id="L431" class="LineNr">431 </span><span class="Comment">//: Mu is robust to various combinations of commas and spaces. You just have</span>
-<span id="L432" class="LineNr">432 </span><span class="Comment">//: to put spaces around the '&lt;-'.</span>
-<span id="L433" class="LineNr">433 </span>
-<span id="L434" class="LineNr">434 </span><span class="Delimiter">:(scenario comma_without_space)</span>
-<span id="L435" class="LineNr">435 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L436" class="LineNr">436 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span><span class="Delimiter">,</span><span class="Constant">2</span>
-<span id="L437" class="LineNr">437 </span>]
-<span id="L438" class="LineNr">438 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L439" class="LineNr">439 </span>
-<span id="L440" class="LineNr">440 </span><span class="Delimiter">:(scenario space_without_comma)</span>
-<span id="L441" class="LineNr">441 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L442" class="LineNr">442 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span> <span class="Constant">2</span>
-<span id="L443" class="LineNr">443 </span>]
-<span id="L444" class="LineNr">444 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L445" class="LineNr">445 </span>
-<span id="L446" class="LineNr">446 </span><span class="Delimiter">:(scenario comma_before_space)</span>
-<span id="L447" class="LineNr">447 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L448" class="LineNr">448 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L449" class="LineNr">449 </span>]
-<span id="L450" class="LineNr">450 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L451" class="LineNr">451 </span>
-<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(scenario comma_after_space)</span>
-<span id="L453" class="LineNr">453 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L454" class="LineNr">454 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span> <span class="Delimiter">,</span><span class="Constant">2</span>
-<span id="L455" class="LineNr">455 </span>]
-<span id="L456" class="LineNr">456 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L457" class="LineNr">457 </span>
-<span id="L458" class="LineNr">458 </span><span class="SalientComment">//:: Counters for trying to understand where Mu programs are spending their</span>
-<span id="L459" class="LineNr">459 </span><span class="SalientComment">//:: time.</span>
-<span id="L460" class="LineNr">460 </span>
-<span id="L461" class="LineNr">461 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L462" class="LineNr">462 </span><span class="Normal">bool</span> Run_profiler = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L463" class="LineNr">463 </span><span class="Comment">// We'll key profile information by recipe_ordinal rather than name because</span>
-<span id="L464" class="LineNr">464 </span><span class="Comment">// it's more efficient, and because later layers will show more than just the</span>
-<span id="L465" class="LineNr">465 </span><span class="Comment">// name of a recipe.</span>
-<span id="L466" class="LineNr">466 </span><span class="Comment">//</span>
-<span id="L467" class="LineNr">467 </span><span class="Comment">// One drawback: if you're clearing recipes your profile will be inaccurate.</span>
-<span id="L468" class="LineNr">468 </span><span class="Comment">// So far that happens in tests, and in 'run-sandboxed' in a later layer.</span>
-<span id="L469" class="LineNr">469 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> <span class="Normal">int</span>&gt; Instructions_running<span class="Delimiter">;</span>
-<span id="L470" class="LineNr">470 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
-<span id="L471" class="LineNr">471 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--profile&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L472" class="LineNr">472 </span>  Run_profiler = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">}</span>
-<span id="L474" class="LineNr">474 </span><span class="Delimiter">:(after &quot;Running One Instruction&quot;)</span>
-<span id="L475" class="LineNr">475 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Run_profiler<span class="Delimiter">)</span> Instructions_running[currently_running_recipe<span class="Delimiter">()</span>]++<span class="Delimiter">;</span>
-<span id="L476" class="LineNr">476 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L477" class="LineNr">477 </span>atexit<span class="Delimiter">(</span>dump_profile<span class="Delimiter">);</span>
-<span id="L478" class="LineNr">478 </span><span class="Delimiter">:(code)</span>
-<span id="L479" class="LineNr">479 </span><span class="Normal">void</span> dump_profile<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L480" class="LineNr">480 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Run_profiler<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L481" class="LineNr">481 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L482" class="LineNr">482 </span>    cerr &lt;&lt; <span class="Constant">&quot;It's not a good idea to profile a run with tests, since tests can create conflicting recipes and mislead you. To try it anyway, comment out this check in the code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L483" class="LineNr">483 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L484" class="LineNr">484 </span>  <span class="Delimiter">}</span>
-<span id="L485" class="LineNr">485 </span>  ofstream fout<span class="Delimiter">;</span>
-<span id="L486" class="LineNr">486 </span>  fout<span class="Delimiter">.</span>open<span class="Delimiter">(</span><span class="Constant">&quot;profile.instructions&quot;</span><span class="Delimiter">);</span>
-<span id="L487" class="LineNr">487 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fout<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L488" class="LineNr">488 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;::iterator p = Instructions_running<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Instructions_running<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L489" class="LineNr">489 </span>      fout &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">9</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="Constant">' '</span> &lt;&lt; header_label<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L490" class="LineNr">490 </span>    <span class="Delimiter">}</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Delimiter">}</span>
-<span id="L492" class="LineNr">492 </span>  fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
-<span id="L493" class="LineNr">493 </span>  <span class="Comment">// End dump_profile</span>
-<span id="L494" class="LineNr">494 </span><span class="Delimiter">}</span>
-<span id="L495" class="LineNr">495 </span>
-<span id="L496" class="LineNr">496 </span><span class="Comment">// overridden in a later layer</span>
-<span id="L497" class="LineNr">497 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L498" class="LineNr">498 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L499" class="LineNr">499 </span><span class="Delimiter">}</span>
+<span id="L296" class="LineNr">296 </span><span class="Delimiter">:(code)</span>
+<span id="L297" class="LineNr">297 </span>vector&lt;<span class="Normal">double</span>&gt; read_memory<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Comment">// Begin Preprocess read_memory(x)</span>
+<span id="L299" class="LineNr">299 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;null&quot;</span><span class="Delimiter">)</span> result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L302" class="LineNr">302 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L303" class="LineNr">303 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Delimiter">}</span>
+<span id="L305" class="LineNr">305 </span>  <span class="Comment">// End Preprocess read_memory(x)</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L307" class="LineNr">307 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>  offset &lt; size<span class="Delimiter">;</span>  ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L308" class="LineNr">308 </span>    <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">);</span>
+<span id="L309" class="LineNr">309 </span>    <a href='003trace.cc.html#L190'>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; x<span class="Delimiter">.</span>value+offset &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L310" class="LineNr">310 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>val<span class="Delimiter">);</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Delimiter">}</span>
+<span id="L312" class="LineNr">312 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L313" class="LineNr">313 </span><span class="Delimiter">}</span>
+<span id="L314" class="LineNr">314 </span>
+<span id="L315" class="LineNr">315 </span><span class="Normal">void</span> write_memory<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; data<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L316" class="LineNr">316 </span>  assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">);</span>  <span class="Comment">// run-time only</span>
+<span id="L317" class="LineNr">317 </span>  <span class="Comment">// Begin Preprocess write_memory(x, data)</span>
+<span id="L318" class="LineNr">318 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'; no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L320" class="LineNr">320 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>  <span class="Delimiter">}</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L323" class="LineNr">323 </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="L324" class="LineNr">324 </span>  <span class="Comment">// End Preprocess write_memory(x, data)</span>
+<span id="L325" class="LineNr">325 </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="L326" class="LineNr">326 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't write to location 0 in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L327" class="LineNr">327 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Delimiter">}</span>
+<span id="L329" class="LineNr">329 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size_mismatch<span class="Delimiter">(</span>x<span class="Delimiter">,</span> data<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L330" class="LineNr">330 </span>    <a href='003trace.cc.html#L197'>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;size mismatch in storing to '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;) at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L331" class="LineNr">331 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L332" class="LineNr">332 </span>  <span class="Delimiter">}</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Comment">// End write_memory(x) Special-cases</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>  offset &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">);</span>  ++offset<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L335" class="LineNr">335 </span>    assert<span class="Delimiter">(</span>x<span class="Delimiter">.</span>value+offset &gt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L336" class="LineNr">336 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>value+offset &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L337" class="LineNr">337 </span><span class="CommentedCode">//?     if (Foo) cerr &lt;&lt; &quot;mem: storing &quot; &lt;&lt; no_scientific(data.at(offset)) &lt;&lt; &quot; in location &quot; &lt;&lt; x.value+offset &lt;&lt; '\n';</span>
+<span id="L338" class="LineNr">338 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value+offset<span class="Delimiter">,</span> data<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">));</span>
+<span id="L339" class="LineNr">339 </span>  <span class="Delimiter">}</span>
+<span id="L340" class="LineNr">340 </span><span class="Delimiter">}</span>
+<span id="L341" class="LineNr">341 </span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(code)</span>
+<span id="L343" class="LineNr">343 </span><span class="Normal">int</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L344" class="LineNr">344 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L345" class="LineNr">345 </span>  <span class="Comment">// End size_of(reagent r) Special-cases</span>
+<span id="L346" class="LineNr">346 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L347" class="LineNr">347 </span><span class="Delimiter">}</span>
+<span id="L348" class="LineNr">348 </span><span class="Normal">int</span> size_of<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L349" class="LineNr">349 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L351" class="LineNr">351 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// error value, but we'll raise it elsewhere</span>
+<span id="L352" class="LineNr">352 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>    <span class="Comment">// End size_of(type) Atom Special-cases</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Delimiter">}</span>
+<span id="L355" class="LineNr">355 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L356" class="LineNr">356 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L357" class="LineNr">357 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L358" class="LineNr">358 </span>      <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L359" class="LineNr">359 </span>    <span class="Delimiter">}</span>
+<span id="L360" class="LineNr">360 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">2</span><span class="Delimiter">;</span>  <span class="Comment">// address and alloc id</span>
+<span id="L361" class="LineNr">361 </span>    <span class="Comment">// End size_of(type) Non-atom Special-cases</span>
+<span id="L362" class="LineNr">362 </span>  <span class="Delimiter">}</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Comment">// End size_of(type) Special-cases</span>
+<span id="L364" class="LineNr">364 </span>  <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L365" class="LineNr">365 </span><span class="Delimiter">}</span>
+<span id="L366" class="LineNr">366 </span>
+<span id="L367" class="LineNr">367 </span><span class="Normal">bool</span> size_mismatch<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; data<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L368" class="LineNr">368 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L369" class="LineNr">369 </span>  <span class="Comment">// End size_mismatch(x) Special-cases</span>
+<span id="L370" class="LineNr">370 </span><span class="CommentedCode">//?   if (size_of(x) != SIZE(data)) cerr &lt;&lt; size_of(x) &lt;&lt; &quot; vs &quot; &lt;&lt; SIZE(data) &lt;&lt; '\n';</span>
+<span id="L371" class="LineNr">371 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<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="Normal">bool</span> is_literal<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Identifier">return</span> is_literal<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L376" class="LineNr">376 </span><span class="Delimiter">}</span>
+<span id="L377" class="LineNr">377 </span><span class="Normal">bool</span> is_literal<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L378" class="LineNr">378 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L381" class="LineNr">381 </span><span class="Delimiter">}</span>
+<span id="L382" class="LineNr">382 </span>
+<span id="L383" class="LineNr">383 </span><span class="Normal">bool</span> scalar<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">int</span>&gt;&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L385" class="LineNr">385 </span><span class="Delimiter">}</span>
+<span id="L386" class="LineNr">386 </span><span class="Normal">bool</span> scalar<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;<span class="Normal">double</span>&gt;&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L387" class="LineNr">387 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L388" class="LineNr">388 </span><span class="Delimiter">}</span>
+<span id="L389" class="LineNr">389 </span>
+<span id="L390" class="LineNr">390 </span><span class="Comment">// helper for tests</span>
+<span id="L391" class="LineNr">391 </span><span class="Normal">void</span> run<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; form<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L392" class="LineNr">392 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span>form<span class="Delimiter">);</span>
+<span id="L393" class="LineNr">393 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L394" class="LineNr">394 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L395" class="LineNr">395 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L396" class="LineNr">396 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace &amp;&amp; Trace_stream<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>save</a><span class="Delimiter">();</span>
+<span id="L397" class="LineNr">397 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Delimiter">}</span>
+<span id="L399" class="LineNr">399 </span>  <span class="Comment">// if a test defines main, it probably wants to start there regardless of</span>
+<span id="L400" class="LineNr">400 </span>  <span class="Comment">// definition order</span>
+<span id="L401" class="LineNr">401 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)))</span>
+<span id="L402" class="LineNr">402 </span>    run<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;main&quot;</span><span class="Delimiter">));</span>
+<span id="L403" class="LineNr">403 </span>  <span class="Normal">else</span>
+<span id="L404" class="LineNr">404 </span>    run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>front<span class="Delimiter">());</span>
+<span id="L405" class="LineNr">405 </span><span class="Delimiter">}</span>
+<span id="L406" class="LineNr">406 </span>
+<span id="L407" class="LineNr">407 </span><span class="Delimiter">:(scenario run_label)</span>
+<span id="L408" class="LineNr">408 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L409" class="LineNr">409 </span>  +foo
+<span id="L410" class="LineNr">410 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
+<span id="L412" class="LineNr">412 </span>]
+<span id="L413" class="LineNr">413 </span><span class="traceContains">+run: {1: &quot;number&quot;} &lt;- copy {23: &quot;literal&quot;}</span>
+<span id="L414" class="LineNr">414 </span><span class="traceContains">+run: {2: &quot;number&quot;} &lt;- copy {1: &quot;number&quot;}</span>
+<span id="L415" class="LineNr">415 </span><span class="traceAbsent">-run: +foo</span>
+<span id="L416" class="LineNr">416 </span>
+<span id="L417" class="LineNr">417 </span><span class="Delimiter">:(scenario run_dummy)</span>
+<span id="L418" class="LineNr">418 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L419" class="LineNr">419 </span>  _<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L420" class="LineNr">420 </span>]
+<span id="L421" class="LineNr">421 </span><span class="traceContains">+run: _ &lt;- copy {0: &quot;literal&quot;}</span>
+<span id="L422" class="LineNr">422 </span>
+<span id="L423" class="LineNr">423 </span><span class="Delimiter">:(scenario run_null)</span>
+<span id="L424" class="LineNr">424 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L425" class="LineNr">425 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L426" class="LineNr">426 </span>]
+<span id="L427" class="LineNr">427 </span>
+<span id="L428" class="LineNr">428 </span><span class="Delimiter">:(scenario write_to_0_disallowed)</span>
+<span id="L429" class="LineNr">429 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L430" class="LineNr">430 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L431" class="LineNr">431 </span>  <span class="Constant">0</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L432" class="LineNr">432 </span>]
+<span id="L433" class="LineNr">433 </span><span class="traceAbsent">-mem: storing 34 in location 0</span>
+<span id="L434" class="LineNr">434 </span>
+<span id="L435" class="LineNr">435 </span><span class="Comment">//: Mu is robust to various combinations of commas and spaces. You just have</span>
+<span id="L436" class="LineNr">436 </span><span class="Comment">//: to put spaces around the '&lt;-'.</span>
+<span id="L437" class="LineNr">437 </span>
+<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(scenario comma_without_space)</span>
+<span id="L439" class="LineNr">439 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L440" class="LineNr">440 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span><span class="Delimiter">,</span><span class="Constant">2</span>
+<span id="L441" class="LineNr">441 </span>]
+<span id="L442" class="LineNr">442 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L443" class="LineNr">443 </span>
+<span id="L444" class="LineNr">444 </span><span class="Delimiter">:(scenario space_without_comma)</span>
+<span id="L445" class="LineNr">445 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L446" class="LineNr">446 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span> <span class="Constant">2</span>
+<span id="L447" class="LineNr">447 </span>]
+<span id="L448" class="LineNr">448 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L449" class="LineNr">449 </span>
+<span id="L450" class="LineNr">450 </span><span class="Delimiter">:(scenario comma_before_space)</span>
+<span id="L451" class="LineNr">451 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L452" class="LineNr">452 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L453" class="LineNr">453 </span>]
+<span id="L454" class="LineNr">454 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L455" class="LineNr">455 </span>
+<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(scenario comma_after_space)</span>
+<span id="L457" class="LineNr">457 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L458" class="LineNr">458 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span> <span class="Delimiter">,</span><span class="Constant">2</span>
+<span id="L459" class="LineNr">459 </span>]
+<span id="L460" class="LineNr">460 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L461" class="LineNr">461 </span>
+<span id="L462" class="LineNr">462 </span><span class="SalientComment">//:: Counters for trying to understand where Mu programs are spending their</span>
+<span id="L463" class="LineNr">463 </span><span class="SalientComment">//:: time.</span>
+<span id="L464" class="LineNr">464 </span>
+<span id="L465" class="LineNr">465 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L466" class="LineNr">466 </span><span class="Normal">bool</span> Run_profiler =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L467" class="LineNr">467 </span><span class="Comment">// We'll key profile information by recipe_ordinal rather than name because</span>
+<span id="L468" class="LineNr">468 </span><span class="Comment">// it's more efficient, and because later layers will show more than just the</span>
+<span id="L469" class="LineNr">469 </span><span class="Comment">// name of a recipe.</span>
+<span id="L470" class="LineNr">470 </span><span class="Comment">//</span>
+<span id="L471" class="LineNr">471 </span><span class="Comment">// One drawback: if you're clearing recipes your profile will be inaccurate.</span>
+<span id="L472" class="LineNr">472 </span><span class="Comment">// So far that happens in tests, and in 'run-sandboxed' in a later layer.</span>
+<span id="L473" class="LineNr">473 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> <span class="Normal">int</span>&gt; Instructions_running<span class="Delimiter">;</span>
+<span id="L474" class="LineNr">474 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
+<span id="L475" class="LineNr">475 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--profile&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L476" class="LineNr">476 </span>  Run_profiler =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L477" class="LineNr">477 </span><span class="Delimiter">}</span>
+<span id="L478" class="LineNr">478 </span><span class="Delimiter">:(after &quot;Running One Instruction&quot;)</span>
+<span id="L479" class="LineNr">479 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Run_profiler<span class="Delimiter">)</span> Instructions_running[currently_running_recipe<span class="Delimiter">()</span>]++<span class="Delimiter">;</span>
+<span id="L480" class="LineNr">480 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L481" class="LineNr">481 </span>atexit<span class="Delimiter">(</span>dump_profile<span class="Delimiter">);</span>
+<span id="L482" class="LineNr">482 </span><span class="Delimiter">:(code)</span>
+<span id="L483" class="LineNr">483 </span><span class="Normal">void</span> dump_profile<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L484" class="LineNr">484 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Run_profiler<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L485" class="LineNr">485 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L486" class="LineNr">486 </span>    cerr &lt;&lt; <span class="Constant">&quot;It's not a good idea to profile a run with tests, since tests can create conflicting recipes and mislead you. To try it anyway, comment out this check in the code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L487" class="LineNr">487 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>  <span class="Delimiter">}</span>
+<span id="L489" class="LineNr">489 </span>  ofstream fout<span class="Delimiter">;</span>
+<span id="L490" class="LineNr">490 </span>  fout<span class="Delimiter">.</span>open<span class="Delimiter">(</span><span class="Constant">&quot;profile.instructions&quot;</span><span class="Delimiter">);</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fout<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L492" class="LineNr">492 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;::iterator p = Instructions_running<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Instructions_running<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L493" class="LineNr">493 </span>      fout &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">9</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="Constant">' '</span> &lt;&lt; header_label<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L494" class="LineNr">494 </span>    <span class="Delimiter">}</span>
+<span id="L495" class="LineNr">495 </span>  <span class="Delimiter">}</span>
+<span id="L496" class="LineNr">496 </span>  fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
+<span id="L497" class="LineNr">497 </span>  <span class="Comment">// End dump_profile</span>
+<span id="L498" class="LineNr">498 </span><span class="Delimiter">}</span>
+<span id="L499" class="LineNr">499 </span>
+<span id="L500" class="LineNr">500 </span><span class="Comment">// overridden in a later layer</span>
+<span id="L501" class="LineNr">501 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L502" class="LineNr">502 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L503" class="LineNr">503 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/021check_instruction.cc.html b/html/021check_instruction.cc.html
index 2e20d819..b9b5109c 100644
--- a/html/021check_instruction.cc.html
+++ b/html/021check_instruction.cc.html
@@ -75,21 +75,21 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr"> 13 </span>
 <span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(code)</span>
 <span id="L15" class="LineNr"> 15 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L15'>check_instruction</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L16" class="LineNr"> 16 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- perform checks for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr"> 16 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- perform checks for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L17" class="LineNr"> 17 </span>  map&lt;string<span class="Delimiter">,</span> vector&lt;type_ordinal&gt; &gt; metadata<span class="Delimiter">;</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L19" class="LineNr"> 19 </span>    instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L20" class="LineNr"> 20 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L21" class="LineNr"> 21 </span>    <span class="Normal">switch</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L22" class="LineNr"> 22 </span>      <span class="Comment">// Primitive Recipe Checks</span>
-<span id="L23" class="LineNr"> 23 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L195'>COPY</a>: <span class="Delimiter">{</span>
+<span id="L23" class="LineNr"> 23 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L196'>COPY</a>: <span class="Delimiter">{</span>
 <span id="L24" class="LineNr"> 24 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L25" class="LineNr"> 25 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L25" class="LineNr"> 25 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L26" class="LineNr"> 26 </span>          <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L27" class="LineNr"> 27 </span>        <span class="Delimiter">}</span>
 <span id="L28" class="LineNr"> 28 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L29" class="LineNr"> 29 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L30" class="LineNr"> 30 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't copy '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' to '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'; types don't match</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L30" class="LineNr"> 30 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't copy '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' to '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'; types don't match</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L31" class="LineNr"> 31 </span>            <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
 <span id="L32" class="LineNr"> 32 </span>          <span class="Delimiter">}</span>
 <span id="L33" class="LineNr"> 33 </span>        <span class="Delimiter">}</span>
@@ -129,213 +129,169 @@ if ('onhashchange' in window) {
 <span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(scenario write_scalar_to_address_disallowed)</span>
 <span id="L68" class="LineNr"> 68 </span><span class="Special">% Hide_errors = true;</span>
 <span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L70" class="LineNr"> 70 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L71" class="LineNr"> 71 </span>]
-<span id="L72" class="LineNr"> 72 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: can't copy '34' to '1:<a href='043space.cc.html#L80'>address</a>:num'; types don't match</span>
+<span id="L72" class="LineNr"> 72 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: can't copy '34' to '1:&amp;:num'; types don't match</span>
 <span id="L73" class="LineNr"> 73 </span>
-<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(scenario write_address_to_number_allowed)</span>
-<span id="L75" class="LineNr"> 75 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>/unsafe
-<span id="L77" class="LineNr"> 77 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num
-<span id="L78" class="LineNr"> 78 </span>]
-<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+mem: storing 12 in location 2</span>
-<span id="L80" class="LineNr"> 80 </span>$error: <span class="Constant">0</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(scenario write_address_to_character_disallowed)</span>
+<span id="L75" class="LineNr"> 75 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L77" class="LineNr"> 77 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>/unsafe
+<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">2</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:&amp;:num
+<span id="L79" class="LineNr"> 79 </span>]
+<span id="L80" class="LineNr"> 80 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: can't copy '1:&amp;:num' to '2:char'; types don't match</span>
 <span id="L81" class="LineNr"> 81 </span>
-<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(scenario write_address_to_character_disallowed)</span>
-<span id="L83" class="LineNr"> 83 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L84" class="LineNr"> 84 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>/unsafe
-<span id="L86" class="LineNr"> 86 </span>  <span class="Constant">2</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num
-<span id="L87" class="LineNr"> 87 </span>]
-<span id="L88" class="LineNr"> 88 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: can't copy '1:<a href='043space.cc.html#L80'>address</a>:num' to '2:char'; types don't match</span>
-<span id="L89" class="LineNr"> 89 </span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(scenario write_number_to_character_allowed)</span>
-<span id="L91" class="LineNr"> 91 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L92" class="LineNr"> 92 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Constant">2</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
-<span id="L94" class="LineNr"> 94 </span>]
-<span id="L95" class="LineNr"> 95 </span>$error: <span class="Constant">0</span>
-<span id="L96" class="LineNr"> 96 </span>
-<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario write_boolean_to_number_allowed)</span>
-<span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L99" class="LineNr"> 99 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>/<span class="Constant">true</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<span class="Normal">bool</span>
-<span id="L101" class="LineNr">101 </span>]
-<span id="L102" class="LineNr">102 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L103" class="LineNr">103 </span>$error: <span class="Constant">0</span>
-<span id="L104" class="LineNr">104 </span>
-<span id="L105" class="LineNr">105 </span><span class="Delimiter">:(scenario write_number_to_boolean_disallowed)</span>
-<span id="L106" class="LineNr">106 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L108" class="LineNr">108 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
-<span id="L110" class="LineNr">110 </span>]
-<span id="L111" class="LineNr">111 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: can't copy '1:num' to '2:bool'; types don't match</span>
-<span id="L112" class="LineNr">112 </span>
-<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(code)</span>
-<span id="L114" class="LineNr">114 </span><span class="Comment">// types_match with some leniency</span>
-<span id="L115" class="LineNr">115 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; to<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L116" class="LineNr">116 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L124'>types_match</a><span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; <a href='021check_instruction.cc.html#L244'>is_real_mu_number</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L231'>is_mu_boolean</a><span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; <a href='021check_instruction.cc.html#L244'>is_real_mu_number</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L244'>is_real_mu_number</a><span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; is_mu_character<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L120" class="LineNr">120 </span>  <span class="Comment">// End types_coercible Special-cases</span>
-<span id="L121" class="LineNr">121 </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">}</span>
-<span id="L123" class="LineNr">123 </span>
-<span id="L124" class="LineNr">124 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L124'>types_match</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; to<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Comment">// to sidestep type-checking, use /unsafe in the source.</span>
-<span id="L126" class="LineNr">126 </span>  <span class="Comment">// this will be highlighted in red inside vim. just for setting up some tests.</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L197'>is_unsafe</a><span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L129" class="LineNr">129 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<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="L130" class="LineNr">130 </span>    <span class="Comment">// End Matching Types For Literal(to)</span>
-<span id="L131" class="LineNr">131 </span>    <span class="Comment">// allow writing 0 to any address</span>
-<span id="L132" class="LineNr">132 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">.</span>type<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="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L231'>is_mu_boolean</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span> || from<span class="Delimiter">.</span>name == <span class="Constant">&quot;1&quot;</span><span class="Delimiter">;</span>
-<span id="L135" class="LineNr">135 </span>    <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>to<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// literals are always scalars</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Delimiter">}</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
-<span id="L138" class="LineNr">138 </span><span class="Delimiter">}</span>
-<span id="L139" class="LineNr">139 </span>
-<span id="L140" class="LineNr">140 </span><span class="Comment">//: copy arguments for later layers</span>
-<span id="L141" class="LineNr">141 </span><span class="Normal">bool</span> types_strictly_match<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Comment">// End Preprocess types_strictly_match(reagent to, reagent from)</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">.</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// error</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; to<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Number_type_ordinal<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Comment">// to sidestep type-checking, use /unsafe in the source.</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Comment">// this will be highlighted in red inside vim. just for setting up some tests.</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L197'>is_unsafe</a><span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Comment">// '_' never raises type error</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> !from<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(scenario write_number_to_character_allowed)</span>
+<span id="L83" class="LineNr"> 83 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L84" class="LineNr"> 84 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">2</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
+<span id="L86" class="LineNr"> 86 </span>]
+<span id="L87" class="LineNr"> 87 </span>$error: <span class="Constant">0</span>
+<span id="L88" class="LineNr"> 88 </span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(code)</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Comment">// types_match with some leniency</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L91'>types_coercible</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Comment">// Begin types_coercible(reagent to, reagent from)</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L99'>types_match_sub</a><span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L212'>is_real_mu_number</a><span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; is_mu_character<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Comment">// End types_coercible Special-cases</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
+<span id="L98" class="LineNr"> 98 </span>
+<span id="L99" class="LineNr"> 99 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L99'>types_match_sub</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; to<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Comment">// to sidestep type-checking, use /unsafe in the source.</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Comment">// this will be highlighted in red inside vim. just for setting up some tests.</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L180'>is_unsafe</a><span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L104" class="LineNr">104 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<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="L105" class="LineNr">105 </span>    <span class="Comment">// End Matching Types For Literal(to)</span>
+<span id="L106" class="LineNr">106 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span>    <span class="Comment">// allow writing null to any address</span>
+<span id="L108" class="LineNr">108 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;null&quot;</span><span class="Delimiter">;</span>
+<span id="L109" class="LineNr">109 </span>    <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>to<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// literals are always scalars</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Delimiter">}</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Identifier">return</span> <a href='021check_instruction.cc.html#L120'>types_strictly_match_sub</a><span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
+<span id="L113" class="LineNr">113 </span><span class="Comment">// variant for others to call</span>
+<span id="L114" class="LineNr">114 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L114'>types_match</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Comment">// Begin types_match(reagent to, reagent from)</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Identifier">return</span> <a href='021check_instruction.cc.html#L99'>types_match_sub</a><span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span><span class="Comment">//: copy arguments for later layers</span>
+<span id="L120" class="LineNr">120 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L120'>types_strictly_match_sub</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; to<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">.</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// error</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; to<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Number_type_ordinal<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Comment">// to sidestep type-checking, use /unsafe in the source.</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Comment">// this will be highlighted in red inside vim. just for setting up some tests.</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L180'>is_unsafe</a><span class="Delimiter">(</span>from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Comment">// '_' never raises type error</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> !from<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L130" class="LineNr">130 </span><span class="Delimiter">}</span>
+<span id="L131" class="LineNr">131 </span><span class="Comment">// variant for others to call</span>
+<span id="L132" class="LineNr">132 </span><span class="Normal">bool</span> types_strictly_match<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Comment">// Begin types_strictly_match(reagent to, reagent from)</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Identifier">return</span> <a href='021check_instruction.cc.html#L120'>types_strictly_match_sub</a><span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
+<span id="L135" class="LineNr">135 </span><span class="Delimiter">}</span>
+<span id="L136" class="LineNr">136 </span>
+<span id="L137" class="LineNr">137 </span><span class="Normal">bool</span> types_strictly_match<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* to<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L138" class="LineNr">138 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from == to<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Normal">if</span> <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="L140" class="LineNr">140 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">)</span> <span class="Identifier">return</span> to<span class="Delimiter">-&gt;</span>atom &amp;&amp; to<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L141" class="LineNr">141 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom != to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L143" class="LineNr">143 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>name == to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L144" class="LineNr">144 </span>    <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>value == to<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>right<span class="Delimiter">))</span>
+<span id="L147" class="LineNr">147 </span>    <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Comment">// fallback: (x) == x</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L152" class="LineNr">152 </span><span class="Delimiter">}</span>
 <span id="L153" class="LineNr">153 </span>
-<span id="L154" class="LineNr">154 </span><span class="Normal">bool</span> types_strictly_match<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* to<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from == to<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <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="L157" class="LineNr">157 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">)</span> <span class="Identifier">return</span> to<span class="Delimiter">-&gt;</span>atom &amp;&amp; to<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom != to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L160" class="LineNr">160 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>name == to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
-<span id="L161" class="LineNr">161 </span>    <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>value == to<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Delimiter">}</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>right<span class="Delimiter">))</span>
-<span id="L164" class="LineNr">164 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Comment">// fallback: (x) == x</span>
-<span id="L166" class="LineNr">166 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
-<span id="L170" class="LineNr">170 </span>
-<span id="L171" class="LineNr">171 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L171'>test_unknown_type_does_not_match_unknown_type</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L172" class="LineNr">172 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:foo&quot;</span><span class="Delimiter">);</span>
-<span id="L173" class="LineNr">173 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:bar&quot;</span><span class="Delimiter">);</span>
-<span id="L174" class="LineNr">174 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
-<span id="L175" class="LineNr">175 </span><span class="Delimiter">}</span>
-<span id="L176" class="LineNr">176 </span>
-<span id="L177" class="LineNr">177 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L177'>test_unknown_type_matches_itself</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:foo&quot;</span><span class="Delimiter">);</span>
-<span id="L179" class="LineNr">179 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:foo&quot;</span><span class="Delimiter">);</span>
-<span id="L180" class="LineNr">180 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
-<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
-<span id="L182" class="LineNr">182 </span>
-<span id="L183" class="LineNr">183 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L183'>test_type_abbreviations_match_raw_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L184" class="LineNr">184 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:array:character&quot;</span><span class="Delimiter">));</span>
-<span id="L185" class="LineNr">185 </span>  <span class="Comment">// a has type (address buffer (address array character))</span>
-<span id="L186" class="LineNr">186 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L80'>address</a>:buffer:text&quot;</span><span class="Delimiter">);</span>
-<span id="L187" class="LineNr">187 </span>  expand_type_abbreviations<span class="Delimiter">(</span>a<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Comment">// b has type (address buffer address array character)</span>
-<span id="L189" class="LineNr">189 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L80'>address</a>:buffer:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
-<span id="L190" class="LineNr">190 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
-<span id="L191" class="LineNr">191 </span>  <span class="Normal">delete</span> Type_abbreviations[<span class="Constant">&quot;text&quot;</span>]<span class="Delimiter">;</span>
-<span id="L192" class="LineNr">192 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>
-<span id="L193" class="LineNr">193 </span><span class="Delimiter">}</span>
-<span id="L194" class="LineNr">194 </span>
-<span id="L195" class="LineNr">195 </span><span class="Comment">//: helpers</span>
-<span id="L196" class="LineNr">196 </span>
-<span id="L197" class="LineNr">197 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L197'>is_unsafe</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Identifier">return</span> has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;unsafe&quot;</span><span class="Delimiter">);</span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span>
-<span id="L201" class="LineNr">201 </span><span class="Normal">bool</span> is_mu_array<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L202" class="LineNr">202 </span>  <span class="Comment">// End Preprocess is_mu_array(reagent r)</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Identifier">return</span> is_mu_array<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L204" class="LineNr">204 </span><span class="Delimiter">}</span>
-<span id="L205" class="LineNr">205 </span><span class="Normal">bool</span> is_mu_array<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L211" class="LineNr">211 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Delimiter">}</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal<span class="Delimiter">;</span>
-<span id="L214" class="LineNr">214 </span><span class="Delimiter">}</span>
-<span id="L215" class="LineNr">215 </span>
-<span id="L216" class="LineNr">216 </span><span class="Normal">bool</span> is_mu_address<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Comment">// End Preprocess is_mu_address(reagent r)</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Identifier">return</span> is_mu_address<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L219" class="LineNr">219 </span><span class="Delimiter">}</span>
-<span id="L220" class="LineNr">220 </span><span class="Normal">bool</span> is_mu_address<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L225" class="LineNr">225 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L226" class="LineNr">226 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Delimiter">}</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal<span class="Delimiter">;</span>
-<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L231'>is_mu_boolean</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Comment">// End Preprocess is_mu_boolean(reagent r)</span>
-<span id="L233" class="LineNr">233 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<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="L235" class="LineNr">235 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L236" class="LineNr">236 </span>  <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Boolean_type_ordinal<span class="Delimiter">;</span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">}</span>
-<span id="L238" class="LineNr">238 </span>
-<span id="L239" class="LineNr">239 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L239'>is_mu_number</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_character<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>  <span class="Comment">// permit arithmetic on unicode code points</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Identifier">return</span> <a href='021check_instruction.cc.html#L244'>is_real_mu_number</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L242" class="LineNr">242 </span><span class="Delimiter">}</span>
-<span id="L243" class="LineNr">243 </span>
-<span id="L244" class="LineNr">244 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L244'>is_real_mu_number</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L245" class="LineNr">245 </span>  <span class="Comment">// End Preprocess is_mu_number(reagent r)</span>
-<span id="L246" class="LineNr">246 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L249" class="LineNr">249 </span>    <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal-fractional-number&quot;</span>
-<span id="L250" class="LineNr">250 </span>        || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">;</span>
-<span id="L251" class="LineNr">251 </span>  <span class="Delimiter">}</span>
-<span id="L252" class="LineNr">252 </span>  <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Number_type_ordinal<span class="Delimiter">;</span>
-<span id="L253" class="LineNr">253 </span><span class="Delimiter">}</span>
-<span id="L254" class="LineNr">254 </span>
-<span id="L255" class="LineNr">255 </span><span class="Normal">bool</span> is_mu_character<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Comment">// End Preprocess is_mu_character(reagent r)</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Identifier">return</span> is_mu_character<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L258" class="LineNr">258 </span><span class="Delimiter">}</span>
-<span id="L259" class="LineNr">259 </span><span class="Normal">bool</span> is_mu_character<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value == Character_type_ordinal<span class="Delimiter">;</span>
-<span id="L264" class="LineNr">264 </span><span class="Delimiter">}</span>
-<span id="L265" class="LineNr">265 </span>
-<span id="L266" class="LineNr">266 </span><span class="Normal">bool</span> is_mu_scalar<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Identifier">return</span> is_mu_scalar<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L268" class="LineNr">268 </span><span class="Delimiter">}</span>
-<span id="L269" class="LineNr">269 </span><span class="Normal">bool</span> is_mu_scalar<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L270" class="LineNr">270 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L271" class="LineNr">271 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span>
-<span id="L274" class="LineNr">274 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;literal-string&quot;</span><span class="Delimiter">;</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>type<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span><span class="Delimiter">}</span>
+<span id="L154" class="LineNr">154 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L154'>test_unknown_type_does_not_match_unknown_type</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L155" class="LineNr">155 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:foo&quot;</span><span class="Delimiter">);</span>
+<span id="L156" class="LineNr">156 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:bar&quot;</span><span class="Delimiter">);</span>
+<span id="L157" class="LineNr">157 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
+<span id="L158" class="LineNr">158 </span><span class="Delimiter">}</span>
+<span id="L159" class="LineNr">159 </span>
+<span id="L160" class="LineNr">160 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L160'>test_unknown_type_matches_itself</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L161" class="LineNr">161 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:foo&quot;</span><span class="Delimiter">);</span>
+<span id="L162" class="LineNr">162 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:foo&quot;</span><span class="Delimiter">);</span>
+<span id="L163" class="LineNr">163 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Normal">void</span> <a href='021check_instruction.cc.html#L166'>test_type_abbreviations_match_raw_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:array:character&quot;</span><span class="Delimiter">));</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Comment">// a has type (address buffer (address array character))</span>
+<span id="L169" class="LineNr">169 </span>  reagent a<span class="Delimiter">(</span><span class="Constant">&quot;a:<a href='043space.cc.html#L101'>address</a>:buffer:text&quot;</span><span class="Delimiter">);</span>
+<span id="L170" class="LineNr">170 </span>  expand_type_abbreviations<span class="Delimiter">(</span>a<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Comment">// b has type (address buffer address array character)</span>
+<span id="L172" class="LineNr">172 </span>  reagent b<span class="Delimiter">(</span><span class="Constant">&quot;b:<a href='043space.cc.html#L101'>address</a>:buffer:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
+<span id="L173" class="LineNr">173 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>a<span class="Delimiter">,</span> b<span class="Delimiter">));</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">delete</span> Type_abbreviations[<span class="Constant">&quot;text&quot;</span>]<span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
+<span id="L177" class="LineNr">177 </span>
+<span id="L178" class="LineNr">178 </span><span class="Comment">//: helpers</span>
+<span id="L179" class="LineNr">179 </span>
+<span id="L180" class="LineNr">180 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L180'>is_unsafe</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Identifier">return</span> has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;unsafe&quot;</span><span class="Delimiter">);</span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">}</span>
+<span id="L183" class="LineNr">183 </span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">bool</span> is_mu_array<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Comment">// End Preprocess is_mu_array(reagent r)</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Identifier">return</span> is_mu_array<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L187" class="LineNr">187 </span><span class="Delimiter">}</span>
+<span id="L188" class="LineNr">188 </span><span class="Normal">bool</span> is_mu_array<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L193" class="LineNr">193 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L194" class="LineNr">194 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Delimiter">}</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal<span class="Delimiter">;</span>
+<span id="L197" class="LineNr">197 </span><span class="Delimiter">}</span>
+<span id="L198" class="LineNr">198 </span>
+<span id="L199" class="LineNr">199 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L199'>is_mu_boolean</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Comment">// End Preprocess is_mu_boolean(reagent r)</span>
+<span id="L201" class="LineNr">201 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<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="L203" class="LineNr">203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Boolean_type_ordinal<span class="Delimiter">;</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span>
+<span id="L207" class="LineNr">207 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L207'>is_mu_number</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_character<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>  <span class="Comment">// permit arithmetic on unicode code points</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Identifier">return</span> <a href='021check_instruction.cc.html#L212'>is_real_mu_number</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
+<span id="L211" class="LineNr">211 </span>
+<span id="L212" class="LineNr">212 </span><span class="Normal">bool</span> <a href='021check_instruction.cc.html#L212'>is_real_mu_number</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Comment">// End Preprocess is_mu_number(reagent r)</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L217" class="LineNr">217 </span>    <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal-fractional-number&quot;</span>
+<span id="L218" class="LineNr">218 </span>        || r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Delimiter">}</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == Number_type_ordinal<span class="Delimiter">;</span>
+<span id="L221" class="LineNr">221 </span><span class="Delimiter">}</span>
+<span id="L222" class="LineNr">222 </span>
+<span id="L223" class="LineNr">223 </span><span class="Normal">bool</span> is_mu_character<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Comment">// End Preprocess is_mu_character(reagent r)</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Identifier">return</span> is_mu_character<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L226" class="LineNr">226 </span><span class="Delimiter">}</span>
+<span id="L227" class="LineNr">227 </span><span class="Normal">bool</span> is_mu_character<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L228" class="LineNr">228 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value == Character_type_ordinal<span class="Delimiter">;</span>
+<span id="L232" class="LineNr">232 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/022arithmetic.cc.html b/html/022arithmetic.cc.html
index a92cedae..d5895683 100644
--- a/html/022arithmetic.cc.html
+++ b/html/022arithmetic.cc.html
@@ -24,7 +24,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .traceContains { color: #008000; }
 .cSpecial { color: #008000; }
 -->
@@ -72,16 +71,16 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span>  <span class="Comment">// primary goal of these checks is to forbid address arithmetic</span>
 <span id="L10" class="LineNr"> 10 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L11" class="LineNr"> 11 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L12" class="LineNr"> 12 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L12" class="LineNr"> 12 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L13" class="LineNr"> 13 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
 <span id="L14" class="LineNr"> 14 </span>    <span class="Delimiter">}</span>
 <span id="L15" class="LineNr"> 15 </span>  <span class="Delimiter">}</span>
 <span id="L16" class="LineNr"> 16 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L17" class="LineNr"> 17 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L17" class="LineNr"> 17 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L18" class="LineNr"> 18 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Delimiter">}</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'add' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L22" class="LineNr"> 22 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Delimiter">}</span>
 <span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -127,9 +126,9 @@ if ('onhashchange' in window) {
 <span id="L64" class="LineNr"> 64 </span><span class="Delimiter">:(scenario add_checks_return_type)</span>
 <span id="L65" class="LineNr"> 65 </span><span class="Special">% Hide_errors = true;</span>
 <span id="L66" class="LineNr"> 66 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L67" class="LineNr"> 67 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>
 <span id="L68" class="LineNr"> 68 </span>]
-<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'add' should yield a number, but got '1:address:num'</span>
+<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'add' should yield a number, but got '1:&amp;:num'</span>
 <span id="L70" class="LineNr"> 70 </span>
 <span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L72" class="LineNr"> 72 </span>SUBTRACT<span class="Delimiter">,</span>
@@ -138,752 +137,747 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L76" class="LineNr"> 76 </span><span class="Normal">case</span> SUBTRACT: <span class="Delimiter">{</span>
 <span id="L77" class="LineNr"> 77 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' has no ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' has no ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L79" class="LineNr"> 79 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">}</span>
 <span id="L81" class="LineNr"> 81 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// permit address offset computations in tests</span>
-<span id="L83" class="LineNr"> 83 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L84" class="LineNr"> 84 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L85" class="LineNr"> 85 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L86" class="LineNr"> 86 </span>    <span class="Delimiter">}</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">}</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L89" class="LineNr"> 89 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L90" class="LineNr"> 90 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L94" class="LineNr"> 94 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Delimiter">}</span>
-<span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
-<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L99" class="LineNr"> 99 </span><span class="Normal">case</span> SUBTRACT: <span class="Delimiter">{</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Normal">double</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L102" class="LineNr">102 </span>    result -= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L103" class="LineNr">103 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L104" class="LineNr">104 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L106" class="LineNr">106 </span><span class="Delimiter">}</span>
-<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(code)</span>
-<span id="L108" class="LineNr">108 </span><span class="Normal">bool</span> <a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Identifier">return</span> has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;raw&quot;</span><span class="Delimiter">);</span>
-<span id="L110" class="LineNr">110 </span><span class="Delimiter">}</span>
-<span id="L111" class="LineNr">111 </span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(scenario subtract_literal)</span>
-<span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L114" class="LineNr">114 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">5</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L115" class="LineNr">115 </span>]
-<span id="L116" class="LineNr">116 </span><span class="traceContains">+mem: storing 3 in location 1</span>
-<span id="L117" class="LineNr">117 </span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(scenario subtract)</span>
-<span id="L119" class="LineNr">119 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L120" class="LineNr">120 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L122" class="LineNr">122 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L123" class="LineNr">123 </span>]
-<span id="L124" class="LineNr">124 </span><span class="traceContains">+mem: storing -11 in location 3</span>
-<span id="L125" class="LineNr">125 </span>
-<span id="L126" class="LineNr">126 </span><span class="Delimiter">:(scenario subtract_multiple)</span>
-<span id="L127" class="LineNr">127 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L128" class="LineNr">128 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">6</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L129" class="LineNr">129 </span>]
-<span id="L130" class="LineNr">130 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L131" class="LineNr">131 </span>
-<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L133" class="LineNr">133 </span>MULTIPLY<span class="Delimiter">,</span>
-<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L135" class="LineNr">135 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;multiply&quot;</span><span class="Delimiter">,</span> MULTIPLY<span class="Delimiter">);</span>
-<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L137" class="LineNr">137 </span><span class="Normal">case</span> MULTIPLY: <span class="Delimiter">{</span>
-<span id="L138" class="LineNr">138 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L139" class="LineNr">139 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L140" class="LineNr">140 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L141" class="LineNr">141 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>    <span class="Delimiter">}</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Delimiter">}</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L145" class="LineNr">145 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L146" class="LineNr">146 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L149" class="LineNr">149 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L150" class="LineNr">150 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L153" class="LineNr">153 </span><span class="Delimiter">}</span>
-<span id="L154" class="LineNr">154 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L155" class="LineNr">155 </span><span class="Normal">case</span> MULTIPLY: <span class="Delimiter">{</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">double</span> result = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L158" class="LineNr">158 </span>    result *= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Delimiter">}</span>
-<span id="L160" class="LineNr">160 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L161" class="LineNr">161 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span><span class="Delimiter">}</span>
-<span id="L164" class="LineNr">164 </span>
-<span id="L165" class="LineNr">165 </span><span class="Delimiter">:(scenario multiply_literal)</span>
-<span id="L166" class="LineNr">166 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L167" class="LineNr">167 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">3</span>
-<span id="L168" class="LineNr">168 </span>]
-<span id="L169" class="LineNr">169 </span><span class="traceContains">+mem: storing 6 in location 1</span>
-<span id="L170" class="LineNr">170 </span>
-<span id="L171" class="LineNr">171 </span><span class="Delimiter">:(scenario multiply)</span>
-<span id="L172" class="LineNr">172 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L173" class="LineNr">173 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">4</span>
-<span id="L174" class="LineNr">174 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">6</span>
-<span id="L175" class="LineNr">175 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L176" class="LineNr">176 </span>]
-<span id="L177" class="LineNr">177 </span><span class="traceContains">+mem: storing 24 in location 3</span>
-<span id="L178" class="LineNr">178 </span>
-<span id="L179" class="LineNr">179 </span><span class="Delimiter">:(scenario multiply_multiple)</span>
-<span id="L180" class="LineNr">180 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L181" class="LineNr">181 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
-<span id="L182" class="LineNr">182 </span>]
-<span id="L183" class="LineNr">183 </span><span class="traceContains">+mem: storing 24 in location 1</span>
-<span id="L184" class="LineNr">184 </span>
-<span id="L185" class="LineNr">185 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L186" class="LineNr">186 </span>DIVIDE<span class="Delimiter">,</span>
-<span id="L187" class="LineNr">187 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L188" class="LineNr">188 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;divide&quot;</span><span class="Delimiter">,</span> DIVIDE<span class="Delimiter">);</span>
-<span id="L189" class="LineNr">189 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L190" class="LineNr">190 </span><span class="Normal">case</span> DIVIDE: <span class="Delimiter">{</span>
-<span id="L191" class="LineNr">191 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L192" class="LineNr">192 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' has no ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L193" class="LineNr">193 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Delimiter">}</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L196" class="LineNr">196 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L197" class="LineNr">197 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L198" class="LineNr">198 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span>    <span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span>  <span class="Delimiter">}</span>
-<span id="L201" class="LineNr">201 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L202" class="LineNr">202 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L203" class="LineNr">203 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Delimiter">}</span>
-<span id="L205" class="LineNr">205 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L212" class="LineNr">212 </span><span class="Normal">case</span> DIVIDE: <span class="Delimiter">{</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Normal">double</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L215" class="LineNr">215 </span>    result /= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L216" class="LineNr">216 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L217" class="LineNr">217 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L219" class="LineNr">219 </span><span class="Delimiter">}</span>
-<span id="L220" class="LineNr">220 </span>
-<span id="L221" class="LineNr">221 </span><span class="Delimiter">:(scenario divide_literal)</span>
-<span id="L222" class="LineNr">222 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L223" class="LineNr">223 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">8</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L224" class="LineNr">224 </span>]
-<span id="L225" class="LineNr">225 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L226" class="LineNr">226 </span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">:(scenario divide)</span>
-<span id="L228" class="LineNr">228 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L229" class="LineNr">229 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">27</span>
-<span id="L230" class="LineNr">230 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L231" class="LineNr">231 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L232" class="LineNr">232 </span>]
-<span id="L233" class="LineNr">233 </span><span class="traceContains">+mem: storing 9 in location 3</span>
-<span id="L234" class="LineNr">234 </span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(scenario divide_multiple)</span>
-<span id="L236" class="LineNr">236 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L237" class="LineNr">237 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L238" class="LineNr">238 </span>]
-<span id="L239" class="LineNr">239 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L240" class="LineNr">240 </span>
-<span id="L241" class="LineNr">241 </span><span class="Comment">//: Integer division</span>
-<span id="L242" class="LineNr">242 </span>
-<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L244" class="LineNr">244 </span>DIVIDE_WITH_REMAINDER<span class="Delimiter">,</span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L246" class="LineNr">246 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;divide-with-remainder&quot;</span><span class="Delimiter">,</span> DIVIDE_WITH_REMAINDER<span class="Delimiter">);</span>
-<span id="L247" class="LineNr">247 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L248" class="LineNr">248 </span><span class="Normal">case</span> DIVIDE_WITH_REMAINDER: <span class="Delimiter">{</span>
-<span id="L249" class="LineNr">249 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L250" class="LineNr">250 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L251" class="LineNr">251 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L252" class="LineNr">252 </span>  <span class="Delimiter">}</span>
-<span id="L253" class="LineNr">253 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L254" class="LineNr">254 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L255" class="LineNr">255 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Delimiter">}</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L258" class="LineNr">258 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' yields two products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L259" class="LineNr">259 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Delimiter">}</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L262" class="LineNr">262 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L263" class="LineNr">263 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' should yield a number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L264" class="LineNr">264 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L265" class="LineNr">265 </span>    <span class="Delimiter">}</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Delimiter">}</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L268" class="LineNr">268 </span><span class="Delimiter">}</span>
-<span id="L269" class="LineNr">269 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L270" class="LineNr">270 </span><span class="Normal">case</span> DIVIDE_WITH_REMAINDER: <span class="Delimiter">{</span>
-<span id="L271" class="LineNr">271 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Comment">// fractions will be dropped; very large numbers will overflow</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L274" class="LineNr">274 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L276" class="LineNr">276 </span>    <a href='003trace.cc.html#L174'>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;divide by zero in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L277" class="LineNr">277 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L278" class="LineNr">278 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L279" class="LineNr">279 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L280" class="LineNr">280 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L281" class="LineNr">281 </span>  <span class="Delimiter">}</span>
-<span id="L282" class="LineNr">282 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> quotient = a / b<span class="Delimiter">;</span>
-<span id="L283" class="LineNr">283 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> remainder = a % b<span class="Delimiter">;</span>
-<span id="L284" class="LineNr">284 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">double</span>&gt;<span class="Delimiter">(</span>quotient<span class="Delimiter">));</span>
-<span id="L285" class="LineNr">285 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">double</span>&gt;<span class="Delimiter">(</span>remainder<span class="Delimiter">));</span>
-<span id="L286" class="LineNr">286 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L287" class="LineNr">287 </span><span class="Delimiter">}</span>
-<span id="L288" class="LineNr">288 </span>
-<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(scenario divide_with_remainder_literal)</span>
-<span id="L290" class="LineNr">290 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L291" class="LineNr">291 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">9</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L292" class="LineNr">292 </span>]
-<span id="L293" class="LineNr">293 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L294" class="LineNr">294 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L295" class="LineNr">295 </span>
-<span id="L296" class="LineNr">296 </span><span class="Delimiter">:(scenario divide_with_remainder)</span>
-<span id="L297" class="LineNr">297 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L298" class="LineNr">298 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">27</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Constant">3</span>:num<span class="Delimiter">,</span> <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L301" class="LineNr">301 </span>]
-<span id="L302" class="LineNr">302 </span><span class="traceContains">+mem: storing 2 in location 3</span>
-<span id="L303" class="LineNr">303 </span><span class="traceContains">+mem: storing 5 in location 4</span>
-<span id="L304" class="LineNr">304 </span>
-<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(scenario divide_with_decimal_point)</span>
-<span id="L306" class="LineNr">306 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">5</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L308" class="LineNr">308 </span>]
-<span id="L309" class="LineNr">309 </span><span class="traceContains">+mem: storing 2.5 in location 1</span>
-<span id="L310" class="LineNr">310 </span>
-<span id="L311" class="LineNr">311 </span><span class="Delimiter">:(scenario divide_by_zero)</span>
-<span id="L312" class="LineNr">312 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L313" class="LineNr">313 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L314" class="LineNr">314 </span>]
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: storing inf in location 1</span>
-<span id="L316" class="LineNr">316 </span>
-<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(scenario divide_by_zero_2)</span>
-<span id="L318" class="LineNr">318 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L319" class="LineNr">319 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L320" class="LineNr">320 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L321" class="LineNr">321 </span>]
-<span id="L322" class="LineNr">322 </span><span class="Comment"># integer division can't return floating-point infinity</span>
-<span id="L323" class="LineNr">323 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: divide by zero in '1:num &lt;- divide-with-remainder 4, 0'</span>
-<span id="L324" class="LineNr">324 </span>
-<span id="L325" class="LineNr">325 </span><span class="Comment">//: Bitwise shifts</span>
-<span id="L326" class="LineNr">326 </span>
-<span id="L327" class="LineNr">327 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L328" class="LineNr">328 </span>SHIFT_LEFT<span class="Delimiter">,</span>
-<span id="L329" class="LineNr">329 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L330" class="LineNr">330 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;shift-left&quot;</span><span class="Delimiter">,</span> SHIFT_LEFT<span class="Delimiter">);</span>
-<span id="L331" class="LineNr">331 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L332" class="LineNr">332 </span><span class="Normal">case</span> SHIFT_LEFT: <span class="Delimiter">{</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L334" class="LineNr">334 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L335" class="LineNr">335 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L336" class="LineNr">336 </span>  <span class="Delimiter">}</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L338" class="LineNr">338 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L339" class="LineNr">339 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L340" class="LineNr">340 </span>  <span class="Delimiter">}</span>
-<span id="L341" class="LineNr">341 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L342" class="LineNr">342 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L343" class="LineNr">343 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L344" class="LineNr">344 </span>  <span class="Delimiter">}</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L346" class="LineNr">346 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L347" class="LineNr">347 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L348" class="LineNr">348 </span>  <span class="Delimiter">}</span>
-<span id="L349" class="LineNr">349 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L350" class="LineNr">350 </span><span class="Delimiter">}</span>
-<span id="L351" class="LineNr">351 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L352" class="LineNr">352 </span><span class="Normal">case</span> SHIFT_LEFT: <span class="Delimiter">{</span>
-<span id="L353" class="LineNr">353 </span>  <span class="Comment">// ingredients must be integers</span>
-<span id="L354" class="LineNr">354 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L355" class="LineNr">355 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L356" class="LineNr">356 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L357" class="LineNr">357 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L358" class="LineNr">358 </span>    <a href='003trace.cc.html#L174'>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;second ingredient can't be negative in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L359" class="LineNr">359 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L360" class="LineNr">360 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Delimiter">}</span>
-<span id="L362" class="LineNr">362 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&lt;&lt;b<span class="Delimiter">);</span>
-<span id="L363" class="LineNr">363 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span><span class="Delimiter">}</span>
-<span id="L365" class="LineNr">365 </span>
-<span id="L366" class="LineNr">366 </span><span class="Delimiter">:(scenario shift_left_by_zero)</span>
-<span id="L367" class="LineNr">367 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L368" class="LineNr">368 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L369" class="LineNr">369 </span>]
-<span id="L370" class="LineNr">370 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L371" class="LineNr">371 </span>
-<span id="L372" class="LineNr">372 </span><span class="Delimiter">:(scenario shift_left_1)</span>
-<span id="L373" class="LineNr">373 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L374" class="LineNr">374 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">4</span>
-<span id="L375" class="LineNr">375 </span>]
-<span id="L376" class="LineNr">376 </span><span class="traceContains">+mem: storing 16 in location 1</span>
-<span id="L377" class="LineNr">377 </span>
-<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(scenario shift_left_2)</span>
-<span id="L379" class="LineNr">379 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L380" class="LineNr">380 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L381" class="LineNr">381 </span>]
-<span id="L382" class="LineNr">382 </span><span class="traceContains">+mem: storing 12 in location 1</span>
-<span id="L383" class="LineNr">383 </span>
-<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(scenario shift_left_by_negative)</span>
-<span id="L385" class="LineNr">385 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L386" class="LineNr">386 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L387" class="LineNr">387 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">3</span><span class="Delimiter">,</span> -<span class="Constant">1</span>
-<span id="L388" class="LineNr">388 </span>]
-<span id="L389" class="LineNr">389 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: second ingredient can't be negative in '1:num &lt;- shift-left 3, -1'</span>
-<span id="L390" class="LineNr">390 </span>
-<span id="L391" class="LineNr">391 </span><span class="Delimiter">:(scenario shift_left_ignores_fractional_part)</span>
-<span id="L392" class="LineNr">392 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L393" class="LineNr">393 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L394" class="LineNr">394 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L395" class="LineNr">395 </span>]
-<span id="L396" class="LineNr">396 </span><span class="traceContains">+mem: storing 2 in location 2</span>
-<span id="L397" class="LineNr">397 </span>
-<span id="L398" class="LineNr">398 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L399" class="LineNr">399 </span>SHIFT_RIGHT<span class="Delimiter">,</span>
-<span id="L400" class="LineNr">400 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L401" class="LineNr">401 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;shift-right&quot;</span><span class="Delimiter">,</span> SHIFT_RIGHT<span class="Delimiter">);</span>
-<span id="L402" class="LineNr">402 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L403" class="LineNr">403 </span><span class="Normal">case</span> SHIFT_RIGHT: <span class="Delimiter">{</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L405" class="LineNr">405 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L406" class="LineNr">406 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L407" class="LineNr">407 </span>  <span class="Delimiter">}</span>
-<span id="L408" class="LineNr">408 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L409" class="LineNr">409 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L410" class="LineNr">410 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L411" class="LineNr">411 </span>  <span class="Delimiter">}</span>
-<span id="L412" class="LineNr">412 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L413" class="LineNr">413 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L414" class="LineNr">414 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L415" class="LineNr">415 </span>  <span class="Delimiter">}</span>
-<span id="L416" class="LineNr">416 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L417" class="LineNr">417 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L418" class="LineNr">418 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L419" class="LineNr">419 </span>  <span class="Delimiter">}</span>
-<span id="L420" class="LineNr">420 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L421" class="LineNr">421 </span><span class="Delimiter">}</span>
-<span id="L422" class="LineNr">422 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L423" class="LineNr">423 </span><span class="Normal">case</span> SHIFT_RIGHT: <span class="Delimiter">{</span>
-<span id="L424" class="LineNr">424 </span>  <span class="Comment">// ingredients must be integers</span>
-<span id="L425" class="LineNr">425 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L426" class="LineNr">426 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L427" class="LineNr">427 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L428" class="LineNr">428 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L429" class="LineNr">429 </span>    <a href='003trace.cc.html#L174'>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;second ingredient can't be negative in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L430" class="LineNr">430 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L431" class="LineNr">431 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L432" class="LineNr">432 </span>  <span class="Delimiter">}</span>
-<span id="L433" class="LineNr">433 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&gt;&gt;b<span class="Delimiter">);</span>
-<span id="L434" class="LineNr">434 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L435" class="LineNr">435 </span><span class="Delimiter">}</span>
-<span id="L436" class="LineNr">436 </span>
-<span id="L437" class="LineNr">437 </span><span class="Delimiter">:(scenario shift_right_by_zero)</span>
-<span id="L438" class="LineNr">438 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L439" class="LineNr">439 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L440" class="LineNr">440 </span>]
-<span id="L441" class="LineNr">441 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L442" class="LineNr">442 </span>
-<span id="L443" class="LineNr">443 </span><span class="Delimiter">:(scenario shift_right_1)</span>
-<span id="L444" class="LineNr">444 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L445" class="LineNr">445 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1024</span><span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L446" class="LineNr">446 </span>]
-<span id="L447" class="LineNr">447 </span><span class="traceContains">+mem: storing 512 in location 1</span>
-<span id="L448" class="LineNr">448 </span>
-<span id="L449" class="LineNr">449 </span><span class="Delimiter">:(scenario shift_right_2)</span>
-<span id="L450" class="LineNr">450 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L451" class="LineNr">451 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L452" class="LineNr">452 </span>]
-<span id="L453" class="LineNr">453 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L454" class="LineNr">454 </span>
-<span id="L455" class="LineNr">455 </span><span class="Delimiter">:(scenario shift_right_by_negative)</span>
-<span id="L456" class="LineNr">456 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L457" class="LineNr">457 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L458" class="LineNr">458 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">4</span><span class="Delimiter">,</span> -<span class="Constant">1</span>
-<span id="L459" class="LineNr">459 </span>]
-<span id="L460" class="LineNr">460 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: second ingredient can't be negative in '1:num &lt;- shift-right 4, -1'</span>
-<span id="L461" class="LineNr">461 </span>
-<span id="L462" class="LineNr">462 </span><span class="Delimiter">:(scenario shift_right_ignores_fractional_part)</span>
-<span id="L463" class="LineNr">463 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L464" class="LineNr">464 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L465" class="LineNr">465 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L466" class="LineNr">466 </span>]
-<span id="L467" class="LineNr">467 </span><span class="traceContains">+mem: storing 0 in location 2</span>
-<span id="L468" class="LineNr">468 </span>
-<span id="L469" class="LineNr">469 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L470" class="LineNr">470 </span>AND_BITS<span class="Delimiter">,</span>
-<span id="L471" class="LineNr">471 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L472" class="LineNr">472 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;and-bits&quot;</span><span class="Delimiter">,</span> AND_BITS<span class="Delimiter">);</span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L474" class="LineNr">474 </span><span class="Normal">case</span> AND_BITS: <span class="Delimiter">{</span>
-<span id="L475" class="LineNr">475 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L476" class="LineNr">476 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L477" class="LineNr">477 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L478" class="LineNr">478 </span>  <span class="Delimiter">}</span>
-<span id="L479" class="LineNr">479 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L480" class="LineNr">480 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L481" class="LineNr">481 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L482" class="LineNr">482 </span>  <span class="Delimiter">}</span>
-<span id="L483" class="LineNr">483 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L484" class="LineNr">484 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L485" class="LineNr">485 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L486" class="LineNr">486 </span>  <span class="Delimiter">}</span>
-<span id="L487" class="LineNr">487 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L488" class="LineNr">488 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L489" class="LineNr">489 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L490" class="LineNr">490 </span>  <span class="Delimiter">}</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L492" class="LineNr">492 </span><span class="Delimiter">}</span>
-<span id="L493" class="LineNr">493 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L494" class="LineNr">494 </span><span class="Normal">case</span> AND_BITS: <span class="Delimiter">{</span>
-<span id="L495" class="LineNr">495 </span>  <span class="Comment">// ingredients must be integers</span>
-<span id="L496" class="LineNr">496 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L497" class="LineNr">497 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L498" class="LineNr">498 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L499" class="LineNr">499 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&amp;b<span class="Delimiter">);</span>
-<span id="L500" class="LineNr">500 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L501" class="LineNr">501 </span><span class="Delimiter">}</span>
-<span id="L502" class="LineNr">502 </span>
-<span id="L503" class="LineNr">503 </span><span class="Delimiter">:(scenario and_bits_1)</span>
-<span id="L504" class="LineNr">504 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L505" class="LineNr">505 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">8</span><span class="Delimiter">,</span> <span class="Constant">3</span>
-<span id="L506" class="LineNr">506 </span>]
-<span id="L507" class="LineNr">507 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L508" class="LineNr">508 </span>
-<span id="L509" class="LineNr">509 </span><span class="Delimiter">:(scenario and_bits_2)</span>
-<span id="L510" class="LineNr">510 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L511" class="LineNr">511 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L512" class="LineNr">512 </span>]
-<span id="L513" class="LineNr">513 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L514" class="LineNr">514 </span>
-<span id="L515" class="LineNr">515 </span><span class="Delimiter">:(scenario and_bits_3)</span>
-<span id="L516" class="LineNr">516 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L517" class="LineNr">517 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">3</span>
-<span id="L518" class="LineNr">518 </span>]
-<span id="L519" class="LineNr">519 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L520" class="LineNr">520 </span>
-<span id="L521" class="LineNr">521 </span><span class="Delimiter">:(scenario and_bits_negative)</span>
-<span id="L522" class="LineNr">522 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L523" class="LineNr">523 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits -<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
-<span id="L524" class="LineNr">524 </span>]
-<span id="L525" class="LineNr">525 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L526" class="LineNr">526 </span>
-<span id="L527" class="LineNr">527 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L528" class="LineNr">528 </span>OR_BITS<span class="Delimiter">,</span>
-<span id="L529" class="LineNr">529 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L530" class="LineNr">530 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;or-bits&quot;</span><span class="Delimiter">,</span> OR_BITS<span class="Delimiter">);</span>
-<span id="L531" class="LineNr">531 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L532" class="LineNr">532 </span><span class="Normal">case</span> OR_BITS: <span class="Delimiter">{</span>
-<span id="L533" class="LineNr">533 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L534" class="LineNr">534 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><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>
-<span id="L537" class="LineNr">537 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L538" class="LineNr">538 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L539" class="LineNr">539 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L540" class="LineNr">540 </span>  <span class="Delimiter">}</span>
-<span id="L541" class="LineNr">541 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L542" class="LineNr">542 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L543" class="LineNr">543 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Delimiter">}</span>
-<span id="L545" class="LineNr">545 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L546" class="LineNr">546 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L547" class="LineNr">547 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L548" class="LineNr">548 </span>  <span class="Delimiter">}</span>
-<span id="L549" class="LineNr">549 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L550" class="LineNr">550 </span><span class="Delimiter">}</span>
-<span id="L551" class="LineNr">551 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L552" class="LineNr">552 </span><span class="Normal">case</span> OR_BITS: <span class="Delimiter">{</span>
-<span id="L553" class="LineNr">553 </span>  <span class="Comment">// ingredients must be integers</span>
-<span id="L554" class="LineNr">554 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L555" class="LineNr">555 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L556" class="LineNr">556 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L557" class="LineNr">557 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a|b<span class="Delimiter">);</span>
-<span id="L558" class="LineNr">558 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L559" class="LineNr">559 </span><span class="Delimiter">}</span>
-<span id="L560" class="LineNr">560 </span>
-<span id="L561" class="LineNr">561 </span><span class="Delimiter">:(scenario or_bits_1)</span>
-<span id="L562" class="LineNr">562 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L563" class="LineNr">563 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">8</span>
-<span id="L564" class="LineNr">564 </span>]
-<span id="L565" class="LineNr">565 </span><span class="traceContains">+mem: storing 11 in location 1</span>
-<span id="L566" class="LineNr">566 </span>
-<span id="L567" class="LineNr">567 </span><span class="Delimiter">:(scenario or_bits_2)</span>
-<span id="L568" class="LineNr">568 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L569" class="LineNr">569 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">10</span>
-<span id="L570" class="LineNr">570 </span>]
-<span id="L571" class="LineNr">571 </span><span class="traceContains">+mem: storing 11 in location 1</span>
-<span id="L572" class="LineNr">572 </span>
-<span id="L573" class="LineNr">573 </span><span class="Delimiter">:(scenario or_bits_3)</span>
-<span id="L574" class="LineNr">574 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L575" class="LineNr">575 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">6</span>
-<span id="L576" class="LineNr">576 </span>]
-<span id="L577" class="LineNr">577 </span><span class="traceContains">+mem: storing 6 in location 1</span>
-<span id="L578" class="LineNr">578 </span>
-<span id="L579" class="LineNr">579 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L580" class="LineNr">580 </span>XOR_BITS<span class="Delimiter">,</span>
-<span id="L581" class="LineNr">581 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L582" class="LineNr">582 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;xor-bits&quot;</span><span class="Delimiter">,</span> XOR_BITS<span class="Delimiter">);</span>
-<span id="L583" class="LineNr">583 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L584" class="LineNr">584 </span><span class="Normal">case</span> XOR_BITS: <span class="Delimiter">{</span>
-<span id="L585" class="LineNr">585 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L586" class="LineNr">586 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L587" class="LineNr">587 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L588" class="LineNr">588 </span>  <span class="Delimiter">}</span>
-<span id="L589" class="LineNr">589 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L590" class="LineNr">590 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L591" class="LineNr">591 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L592" class="LineNr">592 </span>  <span class="Delimiter">}</span>
-<span id="L593" class="LineNr">593 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L594" class="LineNr">594 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L595" class="LineNr">595 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L596" class="LineNr">596 </span>  <span class="Delimiter">}</span>
-<span id="L597" class="LineNr">597 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L598" class="LineNr">598 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L599" class="LineNr">599 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L600" class="LineNr">600 </span>  <span class="Delimiter">}</span>
-<span id="L601" class="LineNr">601 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L602" class="LineNr">602 </span><span class="Delimiter">}</span>
-<span id="L603" class="LineNr">603 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L604" class="LineNr">604 </span><span class="Normal">case</span> XOR_BITS: <span class="Delimiter">{</span>
-<span id="L605" class="LineNr">605 </span>  <span class="Comment">// ingredients must be integers</span>
-<span id="L606" class="LineNr">606 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L607" class="LineNr">607 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L608" class="LineNr">608 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L609" class="LineNr">609 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a^b<span class="Delimiter">);</span>
-<span id="L610" class="LineNr">610 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L611" class="LineNr">611 </span><span class="Delimiter">}</span>
-<span id="L612" class="LineNr">612 </span>
-<span id="L613" class="LineNr">613 </span><span class="Delimiter">:(scenario xor_bits_1)</span>
-<span id="L614" class="LineNr">614 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L615" class="LineNr">615 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">8</span>
-<span id="L616" class="LineNr">616 </span>]
-<span id="L617" class="LineNr">617 </span><span class="traceContains">+mem: storing 11 in location 1</span>
-<span id="L618" class="LineNr">618 </span>
-<span id="L619" class="LineNr">619 </span><span class="Delimiter">:(scenario xor_bits_2)</span>
-<span id="L620" class="LineNr">620 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L621" class="LineNr">621 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">10</span>
-<span id="L622" class="LineNr">622 </span>]
-<span id="L623" class="LineNr">623 </span><span class="traceContains">+mem: storing 9 in location 1</span>
-<span id="L624" class="LineNr">624 </span>
-<span id="L625" class="LineNr">625 </span><span class="Delimiter">:(scenario xor_bits_3)</span>
-<span id="L626" class="LineNr">626 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L627" class="LineNr">627 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">6</span>
-<span id="L628" class="LineNr">628 </span>]
-<span id="L629" class="LineNr">629 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L630" class="LineNr">630 </span>
-<span id="L631" class="LineNr">631 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L632" class="LineNr">632 </span>FLIP_BITS<span class="Delimiter">,</span>
-<span id="L633" class="LineNr">633 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L634" class="LineNr">634 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;flip-bits&quot;</span><span class="Delimiter">,</span> FLIP_BITS<span class="Delimiter">);</span>
-<span id="L635" class="LineNr">635 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L636" class="LineNr">636 </span><span class="Normal">case</span> FLIP_BITS: <span class="Delimiter">{</span>
-<span id="L637" class="LineNr">637 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L638" class="LineNr">638 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L639" class="LineNr">639 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L640" class="LineNr">640 </span>  <span class="Delimiter">}</span>
-<span id="L641" class="LineNr">641 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L642" class="LineNr">642 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' requires a number ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L643" class="LineNr">643 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L644" class="LineNr">644 </span>  <span class="Delimiter">}</span>
-<span id="L645" class="LineNr">645 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L646" class="LineNr">646 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L647" class="LineNr">647 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L648" class="LineNr">648 </span>  <span class="Delimiter">}</span>
-<span id="L649" class="LineNr">649 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L650" class="LineNr">650 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L651" class="LineNr">651 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L652" class="LineNr">652 </span>  <span class="Delimiter">}</span>
-<span id="L653" class="LineNr">653 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L654" class="LineNr">654 </span><span class="Delimiter">}</span>
-<span id="L655" class="LineNr">655 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L656" class="LineNr">656 </span><span class="Normal">case</span> FLIP_BITS: <span class="Delimiter">{</span>
-<span id="L657" class="LineNr">657 </span>  <span class="Comment">// ingredient must be integer</span>
-<span id="L658" class="LineNr">658 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L659" class="LineNr">659 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L660" class="LineNr">660 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>~a<span class="Delimiter">);</span>
-<span id="L661" class="LineNr">661 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L662" class="LineNr">662 </span><span class="Delimiter">}</span>
-<span id="L663" class="LineNr">663 </span>
-<span id="L664" class="LineNr">664 </span><span class="Delimiter">:(scenario flip_bits_zero)</span>
-<span id="L665" class="LineNr">665 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L666" class="LineNr">666 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">0</span>
-<span id="L667" class="LineNr">667 </span>]
-<span id="L668" class="LineNr">668 </span><span class="traceContains">+mem: storing -1 in location 1</span>
-<span id="L669" class="LineNr">669 </span>
-<span id="L670" class="LineNr">670 </span><span class="Delimiter">:(scenario flip_bits_negative)</span>
-<span id="L671" class="LineNr">671 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L672" class="LineNr">672 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits -<span class="Constant">1</span>
-<span id="L673" class="LineNr">673 </span>]
-<span id="L674" class="LineNr">674 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L675" class="LineNr">675 </span>
-<span id="L676" class="LineNr">676 </span><span class="Delimiter">:(scenario flip_bits_1)</span>
-<span id="L677" class="LineNr">677 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L678" class="LineNr">678 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">3</span>
-<span id="L679" class="LineNr">679 </span>]
-<span id="L680" class="LineNr">680 </span><span class="traceContains">+mem: storing -4 in location 1</span>
-<span id="L681" class="LineNr">681 </span>
-<span id="L682" class="LineNr">682 </span><span class="Delimiter">:(scenario flip_bits_2)</span>
-<span id="L683" class="LineNr">683 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L684" class="LineNr">684 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">12</span>
-<span id="L685" class="LineNr">685 </span>]
-<span id="L686" class="LineNr">686 </span><span class="traceContains">+mem: storing -13 in location 1</span>
-<span id="L687" class="LineNr">687 </span>
-<span id="L688" class="LineNr">688 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L689" class="LineNr">689 </span>ROUND<span class="Delimiter">,</span>
-<span id="L690" class="LineNr">690 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L691" class="LineNr">691 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;round&quot;</span><span class="Delimiter">,</span> ROUND<span class="Delimiter">);</span>
-<span id="L692" class="LineNr">692 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L693" class="LineNr">693 </span><span class="Normal">case</span> ROUND: <span class="Delimiter">{</span>
-<span id="L694" class="LineNr">694 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L695" class="LineNr">695 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'round' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L696" class="LineNr">696 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L697" class="LineNr">697 </span>  <span class="Delimiter">}</span>
-<span id="L698" class="LineNr">698 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L699" class="LineNr">699 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'round' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L700" class="LineNr">700 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L701" class="LineNr">701 </span>  <span class="Delimiter">}</span>
-<span id="L702" class="LineNr">702 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L703" class="LineNr">703 </span><span class="Delimiter">}</span>
-<span id="L704" class="LineNr">704 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L705" class="LineNr">705 </span><span class="Normal">case</span> ROUND: <span class="Delimiter">{</span>
-<span id="L706" class="LineNr">706 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L707" class="LineNr">707 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>rint<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
-<span id="L708" class="LineNr">708 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L709" class="LineNr">709 </span><span class="Delimiter">}</span>
-<span id="L710" class="LineNr">710 </span>
-<span id="L711" class="LineNr">711 </span><span class="Delimiter">:(scenario round_to_nearest_integer)</span>
-<span id="L712" class="LineNr">712 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L713" class="LineNr">713 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round <span class="Constant">12.2</span>
-<span id="L714" class="LineNr">714 </span>]
-<span id="L715" class="LineNr">715 </span><span class="traceContains">+mem: storing 12 in location 1</span>
-<span id="L716" class="LineNr">716 </span>
-<span id="L717" class="LineNr">717 </span><span class="Delimiter">:(scenario round_halves_toward_zero)</span>
-<span id="L718" class="LineNr">718 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L719" class="LineNr">719 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round <span class="Constant">12.5</span>
-<span id="L720" class="LineNr">720 </span>]
-<span id="L721" class="LineNr">721 </span><span class="traceContains">+mem: storing 12 in location 1</span>
-<span id="L722" class="LineNr">722 </span>
-<span id="L723" class="LineNr">723 </span><span class="Delimiter">:(scenario round_halves_toward_zero_2)</span>
-<span id="L724" class="LineNr">724 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L725" class="LineNr">725 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round -<span class="Constant">12.5</span>
-<span id="L726" class="LineNr">726 </span>]
-<span id="L727" class="LineNr">727 </span><span class="traceContains">+mem: storing -12 in location 1</span>
-<span id="L728" class="LineNr">728 </span>
-<span id="L729" class="LineNr">729 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L730" class="LineNr">730 </span>TRUNCATE<span class="Delimiter">,</span>
-<span id="L731" class="LineNr">731 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L732" class="LineNr">732 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;truncate&quot;</span><span class="Delimiter">,</span> TRUNCATE<span class="Delimiter">);</span>
-<span id="L733" class="LineNr">733 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L734" class="LineNr">734 </span><span class="Normal">case</span> TRUNCATE: <span class="Delimiter">{</span>
-<span id="L735" class="LineNr">735 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L736" class="LineNr">736 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'truncate' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L737" class="LineNr">737 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L738" class="LineNr">738 </span>  <span class="Delimiter">}</span>
-<span id="L739" class="LineNr">739 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L740" class="LineNr">740 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'truncate' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L741" class="LineNr">741 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L742" class="LineNr">742 </span>  <span class="Delimiter">}</span>
-<span id="L743" class="LineNr">743 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L744" class="LineNr">744 </span><span class="Delimiter">}</span>
-<span id="L745" class="LineNr">745 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L746" class="LineNr">746 </span><span class="Normal">case</span> TRUNCATE: <span class="Delimiter">{</span>
-<span id="L747" class="LineNr">747 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L748" class="LineNr">748 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>trunc<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
-<span id="L749" class="LineNr">749 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L750" class="LineNr">750 </span><span class="Delimiter">}</span>
-<span id="L751" class="LineNr">751 </span>
-<span id="L752" class="LineNr">752 </span><span class="Delimiter">:(scenario truncate_to_nearest_integer)</span>
-<span id="L753" class="LineNr">753 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L754" class="LineNr">754 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><a href='101run_sandboxed.cc.html#L523'>truncate</a> <span class="Constant">12.2</span>
-<span id="L755" class="LineNr">755 </span>]
-<span id="L756" class="LineNr">756 </span><span class="traceContains">+mem: storing 12 in location 1</span>
-<span id="L757" class="LineNr">757 </span>
-<span id="L758" class="LineNr">758 </span><span class="Delimiter">:(scenario truncate_negative)</span>
-<span id="L759" class="LineNr">759 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L760" class="LineNr">760 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><a href='101run_sandboxed.cc.html#L523'>truncate</a> -<span class="Constant">12.2</span>
-<span id="L761" class="LineNr">761 </span>]
-<span id="L762" class="LineNr">762 </span><span class="traceContains">+mem: storing -12 in location 1</span>
-<span id="L763" class="LineNr">763 </span>
-<span id="L764" class="LineNr">764 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L765" class="LineNr">765 </span>SQUARE_ROOT<span class="Delimiter">,</span>
-<span id="L766" class="LineNr">766 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L767" class="LineNr">767 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;square-root&quot;</span><span class="Delimiter">,</span> SQUARE_ROOT<span class="Delimiter">);</span>
-<span id="L768" class="LineNr">768 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L769" class="LineNr">769 </span><span class="Normal">case</span> SQUARE_ROOT: <span class="Delimiter">{</span>
-<span id="L770" class="LineNr">770 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L771" class="LineNr">771 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'square-root' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L772" class="LineNr">772 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L773" class="LineNr">773 </span>  <span class="Delimiter">}</span>
-<span id="L774" class="LineNr">774 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L775" class="LineNr">775 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'square-root' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L776" class="LineNr">776 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L777" class="LineNr">777 </span>  <span class="Delimiter">}</span>
-<span id="L778" class="LineNr">778 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L779" class="LineNr">779 </span><span class="Delimiter">}</span>
-<span id="L780" class="LineNr">780 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L781" class="LineNr">781 </span><span class="Normal">case</span> SQUARE_ROOT: <span class="Delimiter">{</span>
-<span id="L782" class="LineNr">782 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L783" class="LineNr">783 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>sqrt<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
-<span id="L784" class="LineNr">784 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L785" class="LineNr">785 </span><span class="Delimiter">}</span>
-<span id="L786" class="LineNr">786 </span>
-<span id="L787" class="LineNr">787 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L788" class="LineNr">788 </span>CHARACTER_TO_CODE<span class="Delimiter">,</span>
-<span id="L789" class="LineNr">789 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L790" class="LineNr">790 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character-to-code&quot;</span><span class="Delimiter">,</span> CHARACTER_TO_CODE<span class="Delimiter">);</span>
-<span id="L791" class="LineNr">791 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L792" class="LineNr">792 </span><span class="Normal">case</span> CHARACTER_TO_CODE: <span class="Delimiter">{</span>
-<span id="L793" class="LineNr">793 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L794" class="LineNr">794 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'character-to-code' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L795" class="LineNr">795 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L796" class="LineNr">796 </span>  <span class="Delimiter">}</span>
-<span id="L797" class="LineNr">797 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_character<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L798" class="LineNr">798 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'character-to-code' should be a character, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L799" class="LineNr">799 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L800" class="LineNr">800 </span>  <span class="Delimiter">}</span>
-<span id="L801" class="LineNr">801 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L802" class="LineNr">802 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'character-to-code' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L803" class="LineNr">803 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L804" class="LineNr">804 </span>  <span class="Delimiter">}</span>
-<span id="L805" class="LineNr">805 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L806" class="LineNr">806 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of 'character-to-code' should be a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L807" class="LineNr">807 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L808" class="LineNr">808 </span>  <span class="Delimiter">}</span>
-<span id="L809" class="LineNr">809 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L810" class="LineNr">810 </span><span class="Delimiter">}</span>
-<span id="L811" class="LineNr">811 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L812" class="LineNr">812 </span><span class="Normal">case</span> CHARACTER_TO_CODE: <span class="Delimiter">{</span>
-<span id="L813" class="LineNr">813 </span>  <span class="Normal">double</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L814" class="LineNr">814 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L815" class="LineNr">815 </span>    result += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L816" class="LineNr">816 </span>  <span class="Delimiter">}</span>
-<span id="L817" class="LineNr">817 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L818" class="LineNr">818 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L819" class="LineNr">819 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L820" class="LineNr">820 </span><span class="Delimiter">}</span>
-<span id="L821" class="LineNr">821 </span>
-<span id="L822" class="LineNr">822 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L823" class="LineNr">823 </span><span class="PreProc">#include </span><span class="Constant">&lt;math.h&gt;</span>
+<span id="L82" class="LineNr"> 82 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L83" class="LineNr"> 83 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L84" class="LineNr"> 84 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>    <span class="Delimiter">}</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'subtract' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L93" class="LineNr"> 93 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Delimiter">}</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Normal">case</span> SUBTRACT: <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Normal">double</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L101" class="LineNr">101 </span>    result -= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L102" class="LineNr">102 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span><span class="Delimiter">}</span>
+<span id="L106" class="LineNr">106 </span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(scenario subtract_literal)</span>
+<span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L109" class="LineNr">109 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">5</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L110" class="LineNr">110 </span>]
+<span id="L111" class="LineNr">111 </span><span class="traceContains">+mem: storing 3 in location 1</span>
+<span id="L112" class="LineNr">112 </span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario subtract)</span>
+<span id="L114" class="LineNr">114 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L115" class="LineNr">115 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L117" class="LineNr">117 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L118" class="LineNr">118 </span>]
+<span id="L119" class="LineNr">119 </span><span class="traceContains">+mem: storing -11 in location 3</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(scenario subtract_multiple)</span>
+<span id="L122" class="LineNr">122 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L123" class="LineNr">123 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">6</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L124" class="LineNr">124 </span>]
+<span id="L125" class="LineNr">125 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L126" class="LineNr">126 </span>
+<span id="L127" class="LineNr">127 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L128" class="LineNr">128 </span>MULTIPLY<span class="Delimiter">,</span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L130" class="LineNr">130 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;multiply&quot;</span><span class="Delimiter">,</span> MULTIPLY<span class="Delimiter">);</span>
+<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L132" class="LineNr">132 </span><span class="Normal">case</span> MULTIPLY: <span class="Delimiter">{</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L136" class="LineNr">136 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>    <span class="Delimiter">}</span>
+<span id="L138" class="LineNr">138 </span>  <span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L140" class="LineNr">140 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L141" class="LineNr">141 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Delimiter">}</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L144" class="LineNr">144 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'multiply' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L145" class="LineNr">145 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span><span class="Delimiter">}</span>
+<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L150" class="LineNr">150 </span><span class="Normal">case</span> MULTIPLY: <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">double</span> result = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L153" class="LineNr">153 </span>    result *= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
+<span id="L155" class="LineNr">155 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L156" class="LineNr">156 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span><span class="Delimiter">}</span>
+<span id="L159" class="LineNr">159 </span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(scenario multiply_literal)</span>
+<span id="L161" class="LineNr">161 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L162" class="LineNr">162 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">3</span>
+<span id="L163" class="LineNr">163 </span>]
+<span id="L164" class="LineNr">164 </span><span class="traceContains">+mem: storing 6 in location 1</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(scenario multiply)</span>
+<span id="L167" class="LineNr">167 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L168" class="LineNr">168 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">4</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">6</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L171" class="LineNr">171 </span>]
+<span id="L172" class="LineNr">172 </span><span class="traceContains">+mem: storing 24 in location 3</span>
+<span id="L173" class="LineNr">173 </span>
+<span id="L174" class="LineNr">174 </span><span class="Delimiter">:(scenario multiply_multiple)</span>
+<span id="L175" class="LineNr">175 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L176" class="LineNr">176 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>multiply <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
+<span id="L177" class="LineNr">177 </span>]
+<span id="L178" class="LineNr">178 </span><span class="traceContains">+mem: storing 24 in location 1</span>
+<span id="L179" class="LineNr">179 </span>
+<span id="L180" class="LineNr">180 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L181" class="LineNr">181 </span>DIVIDE<span class="Delimiter">,</span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L183" class="LineNr">183 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;divide&quot;</span><span class="Delimiter">,</span> DIVIDE<span class="Delimiter">);</span>
+<span id="L184" class="LineNr">184 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L185" class="LineNr">185 </span><span class="Normal">case</span> DIVIDE: <span class="Delimiter">{</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L187" class="LineNr">187 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' has no ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L188" class="LineNr">188 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Delimiter">}</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L191" class="LineNr">191 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L192" class="LineNr">192 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' requires number ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L193" class="LineNr">193 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L194" class="LineNr">194 </span>    <span class="Delimiter">}</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Delimiter">}</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L197" class="LineNr">197 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L198" class="LineNr">198 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>  <span class="Delimiter">}</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L201" class="LineNr">201 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L202" class="LineNr">202 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Delimiter">}</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L207" class="LineNr">207 </span><span class="Normal">case</span> DIVIDE: <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">double</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L210" class="LineNr">210 </span>    result /= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L211" class="LineNr">211 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L212" class="LineNr">212 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">}</span>
+<span id="L215" class="LineNr">215 </span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(scenario divide_literal)</span>
+<span id="L217" class="LineNr">217 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L218" class="LineNr">218 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">8</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L219" class="LineNr">219 </span>]
+<span id="L220" class="LineNr">220 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L221" class="LineNr">221 </span>
+<span id="L222" class="LineNr">222 </span><span class="Delimiter">:(scenario divide)</span>
+<span id="L223" class="LineNr">223 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L224" class="LineNr">224 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">27</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L227" class="LineNr">227 </span>]
+<span id="L228" class="LineNr">228 </span><span class="traceContains">+mem: storing 9 in location 3</span>
+<span id="L229" class="LineNr">229 </span>
+<span id="L230" class="LineNr">230 </span><span class="Delimiter">:(scenario divide_multiple)</span>
+<span id="L231" class="LineNr">231 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L232" class="LineNr">232 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L233" class="LineNr">233 </span>]
+<span id="L234" class="LineNr">234 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L235" class="LineNr">235 </span>
+<span id="L236" class="LineNr">236 </span><span class="Comment">//: Integer division</span>
+<span id="L237" class="LineNr">237 </span>
+<span id="L238" class="LineNr">238 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L239" class="LineNr">239 </span>DIVIDE_WITH_REMAINDER<span class="Delimiter">,</span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L241" class="LineNr">241 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;divide-with-remainder&quot;</span><span class="Delimiter">,</span> DIVIDE_WITH_REMAINDER<span class="Delimiter">);</span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L243" class="LineNr">243 </span><span class="Normal">case</span> DIVIDE_WITH_REMAINDER: <span class="Delimiter">{</span>
+<span id="L244" class="LineNr">244 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L245" class="LineNr">245 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L246" class="LineNr">246 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Delimiter">}</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L249" class="LineNr">249 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L250" class="LineNr">250 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Delimiter">}</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L253" class="LineNr">253 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' yields two products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L254" class="LineNr">254 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L255" class="LineNr">255 </span>  <span class="Delimiter">}</span>
+<span id="L256" class="LineNr">256 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L257" class="LineNr">257 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L258" class="LineNr">258 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'divide-with-remainder' should yield a number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L259" class="LineNr">259 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>    <span class="Delimiter">}</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Delimiter">}</span>
+<span id="L262" class="LineNr">262 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L263" class="LineNr">263 </span><span class="Delimiter">}</span>
+<span id="L264" class="LineNr">264 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L265" class="LineNr">265 </span><span class="Normal">case</span> DIVIDE_WITH_REMAINDER: <span class="Delimiter">{</span>
+<span id="L266" class="LineNr">266 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L267" class="LineNr">267 </span>  <span class="Comment">// fractions will be dropped; very large numbers will overflow</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L271" class="LineNr">271 </span>    <a href='003trace.cc.html#L197'>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;divide by zero in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L272" class="LineNr">272 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L273" class="LineNr">273 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L274" class="LineNr">274 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L275" class="LineNr">275 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Delimiter">}</span>
+<span id="L277" class="LineNr">277 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> quotient = a / b<span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> remainder = a % b<span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">double</span>&gt;<span class="Delimiter">(</span>quotient<span class="Delimiter">));</span>
+<span id="L280" class="LineNr">280 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">double</span>&gt;<span class="Delimiter">(</span>remainder<span class="Delimiter">));</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L282" class="LineNr">282 </span><span class="Delimiter">}</span>
+<span id="L283" class="LineNr">283 </span>
+<span id="L284" class="LineNr">284 </span><span class="Delimiter">:(scenario divide_with_remainder_literal)</span>
+<span id="L285" class="LineNr">285 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L286" class="LineNr">286 </span>  <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">9</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L287" class="LineNr">287 </span>]
+<span id="L288" class="LineNr">288 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L289" class="LineNr">289 </span><span class="traceContains">+mem: storing 1 in location 2</span>
+<span id="L290" class="LineNr">290 </span>
+<span id="L291" class="LineNr">291 </span><span class="Delimiter">:(scenario divide_with_remainder)</span>
+<span id="L292" class="LineNr">292 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L293" class="LineNr">293 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">27</span>
+<span id="L294" class="LineNr">294 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
+<span id="L295" class="LineNr">295 </span>  <span class="Constant">3</span>:num<span class="Delimiter">,</span> <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L296" class="LineNr">296 </span>]
+<span id="L297" class="LineNr">297 </span><span class="traceContains">+mem: storing 2 in location 3</span>
+<span id="L298" class="LineNr">298 </span><span class="traceContains">+mem: storing 5 in location 4</span>
+<span id="L299" class="LineNr">299 </span>
+<span id="L300" class="LineNr">300 </span><span class="Delimiter">:(scenario divide_with_decimal_point)</span>
+<span id="L301" class="LineNr">301 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L302" class="LineNr">302 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">5</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L303" class="LineNr">303 </span>]
+<span id="L304" class="LineNr">304 </span><span class="traceContains">+mem: storing 2.5 in location 1</span>
+<span id="L305" class="LineNr">305 </span>
+<span id="L306" class="LineNr">306 </span><span class="Delimiter">:(scenario divide_by_zero)</span>
+<span id="L307" class="LineNr">307 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L308" class="LineNr">308 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L309" class="LineNr">309 </span>]
+<span id="L310" class="LineNr">310 </span><span class="traceContains">+mem: storing inf in location 1</span>
+<span id="L311" class="LineNr">311 </span>
+<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(scenario divide_by_zero_2)</span>
+<span id="L313" class="LineNr">313 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L314" class="LineNr">314 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L315" class="LineNr">315 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide-with-remainder <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L316" class="LineNr">316 </span>]
+<span id="L317" class="LineNr">317 </span><span class="Comment"># integer division can't return floating-point infinity</span>
+<span id="L318" class="LineNr">318 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: divide by zero in '1:num &lt;- divide-with-remainder 4, 0'</span>
+<span id="L319" class="LineNr">319 </span>
+<span id="L320" class="LineNr">320 </span><span class="Comment">//: Bitwise shifts</span>
+<span id="L321" class="LineNr">321 </span>
+<span id="L322" class="LineNr">322 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L323" class="LineNr">323 </span>SHIFT_LEFT<span class="Delimiter">,</span>
+<span id="L324" class="LineNr">324 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L325" class="LineNr">325 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;shift-left&quot;</span><span class="Delimiter">,</span> SHIFT_LEFT<span class="Delimiter">);</span>
+<span id="L326" class="LineNr">326 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L327" class="LineNr">327 </span><span class="Normal">case</span> SHIFT_LEFT: <span class="Delimiter">{</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L329" class="LineNr">329 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L330" class="LineNr">330 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Delimiter">}</span>
+<span id="L332" class="LineNr">332 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L333" class="LineNr">333 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L334" class="LineNr">334 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Delimiter">}</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L337" class="LineNr">337 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L338" class="LineNr">338 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L339" class="LineNr">339 </span>  <span class="Delimiter">}</span>
+<span id="L340" class="LineNr">340 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L341" class="LineNr">341 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-left' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L342" class="LineNr">342 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L343" class="LineNr">343 </span>  <span class="Delimiter">}</span>
+<span id="L344" class="LineNr">344 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L345" class="LineNr">345 </span><span class="Delimiter">}</span>
+<span id="L346" class="LineNr">346 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L347" class="LineNr">347 </span><span class="Normal">case</span> SHIFT_LEFT: <span class="Delimiter">{</span>
+<span id="L348" class="LineNr">348 </span>  <span class="Comment">// ingredients must be integers</span>
+<span id="L349" class="LineNr">349 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L351" class="LineNr">351 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L352" class="LineNr">352 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L353" class="LineNr">353 </span>    <a href='003trace.cc.html#L197'>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;second ingredient can't be negative in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L354" class="LineNr">354 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L355" class="LineNr">355 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L356" class="LineNr">356 </span>  <span class="Delimiter">}</span>
+<span id="L357" class="LineNr">357 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&lt;&lt;b<span class="Delimiter">);</span>
+<span id="L358" class="LineNr">358 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L359" class="LineNr">359 </span><span class="Delimiter">}</span>
+<span id="L360" class="LineNr">360 </span>
+<span id="L361" class="LineNr">361 </span><span class="Delimiter">:(scenario shift_left_by_zero)</span>
+<span id="L362" class="LineNr">362 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L363" class="LineNr">363 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L364" class="LineNr">364 </span>]
+<span id="L365" class="LineNr">365 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L366" class="LineNr">366 </span>
+<span id="L367" class="LineNr">367 </span><span class="Delimiter">:(scenario shift_left_1)</span>
+<span id="L368" class="LineNr">368 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L369" class="LineNr">369 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">4</span>
+<span id="L370" class="LineNr">370 </span>]
+<span id="L371" class="LineNr">371 </span><span class="traceContains">+mem: storing 16 in location 1</span>
+<span id="L372" class="LineNr">372 </span>
+<span id="L373" class="LineNr">373 </span><span class="Delimiter">:(scenario shift_left_2)</span>
+<span id="L374" class="LineNr">374 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L375" class="LineNr">375 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L376" class="LineNr">376 </span>]
+<span id="L377" class="LineNr">377 </span><span class="traceContains">+mem: storing 12 in location 1</span>
+<span id="L378" class="LineNr">378 </span>
+<span id="L379" class="LineNr">379 </span><span class="Delimiter">:(scenario shift_left_by_negative)</span>
+<span id="L380" class="LineNr">380 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L381" class="LineNr">381 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L382" class="LineNr">382 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">3</span><span class="Delimiter">,</span> -<span class="Constant">1</span>
+<span id="L383" class="LineNr">383 </span>]
+<span id="L384" class="LineNr">384 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: second ingredient can't be negative in '1:num &lt;- shift-left 3, -1'</span>
+<span id="L385" class="LineNr">385 </span>
+<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(scenario shift_left_ignores_fractional_part)</span>
+<span id="L387" class="LineNr">387 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L388" class="LineNr">388 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L389" class="LineNr">389 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>shift-left <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L390" class="LineNr">390 </span>]
+<span id="L391" class="LineNr">391 </span><span class="traceContains">+mem: storing 2 in location 2</span>
+<span id="L392" class="LineNr">392 </span>
+<span id="L393" class="LineNr">393 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L394" class="LineNr">394 </span>SHIFT_RIGHT<span class="Delimiter">,</span>
+<span id="L395" class="LineNr">395 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L396" class="LineNr">396 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;shift-right&quot;</span><span class="Delimiter">,</span> SHIFT_RIGHT<span class="Delimiter">);</span>
+<span id="L397" class="LineNr">397 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L398" class="LineNr">398 </span><span class="Normal">case</span> SHIFT_RIGHT: <span class="Delimiter">{</span>
+<span id="L399" class="LineNr">399 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L400" class="LineNr">400 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L401" class="LineNr">401 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Delimiter">}</span>
+<span id="L403" class="LineNr">403 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L404" class="LineNr">404 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L405" class="LineNr">405 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Delimiter">}</span>
+<span id="L407" class="LineNr">407 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L408" class="LineNr">408 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L409" class="LineNr">409 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L410" class="LineNr">410 </span>  <span class="Delimiter">}</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L412" class="LineNr">412 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'shift-right' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L413" class="LineNr">413 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L414" class="LineNr">414 </span>  <span class="Delimiter">}</span>
+<span id="L415" class="LineNr">415 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L416" class="LineNr">416 </span><span class="Delimiter">}</span>
+<span id="L417" class="LineNr">417 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L418" class="LineNr">418 </span><span class="Normal">case</span> SHIFT_RIGHT: <span class="Delimiter">{</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Comment">// ingredients must be integers</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L422" class="LineNr">422 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L423" class="LineNr">423 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>b &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L424" class="LineNr">424 </span>    <a href='003trace.cc.html#L197'>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;second ingredient can't be negative in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L425" class="LineNr">425 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L426" class="LineNr">426 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L427" class="LineNr">427 </span>  <span class="Delimiter">}</span>
+<span id="L428" class="LineNr">428 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&gt;&gt;b<span class="Delimiter">);</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L430" class="LineNr">430 </span><span class="Delimiter">}</span>
+<span id="L431" class="LineNr">431 </span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">:(scenario shift_right_by_zero)</span>
+<span id="L433" class="LineNr">433 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L434" class="LineNr">434 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L435" class="LineNr">435 </span>]
+<span id="L436" class="LineNr">436 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L437" class="LineNr">437 </span>
+<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(scenario shift_right_1)</span>
+<span id="L439" class="LineNr">439 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L440" class="LineNr">440 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1024</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L441" class="LineNr">441 </span>]
+<span id="L442" class="LineNr">442 </span><span class="traceContains">+mem: storing 512 in location 1</span>
+<span id="L443" class="LineNr">443 </span>
+<span id="L444" class="LineNr">444 </span><span class="Delimiter">:(scenario shift_right_2)</span>
+<span id="L445" class="LineNr">445 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L446" class="LineNr">446 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L447" class="LineNr">447 </span>]
+<span id="L448" class="LineNr">448 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L449" class="LineNr">449 </span>
+<span id="L450" class="LineNr">450 </span><span class="Delimiter">:(scenario shift_right_by_negative)</span>
+<span id="L451" class="LineNr">451 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L452" class="LineNr">452 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L453" class="LineNr">453 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">4</span><span class="Delimiter">,</span> -<span class="Constant">1</span>
+<span id="L454" class="LineNr">454 </span>]
+<span id="L455" class="LineNr">455 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: second ingredient can't be negative in '1:num &lt;- shift-right 4, -1'</span>
+<span id="L456" class="LineNr">456 </span>
+<span id="L457" class="LineNr">457 </span><span class="Delimiter">:(scenario shift_right_ignores_fractional_part)</span>
+<span id="L458" class="LineNr">458 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L459" class="LineNr">459 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>divide <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L460" class="LineNr">460 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>shift-right <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L461" class="LineNr">461 </span>]
+<span id="L462" class="LineNr">462 </span><span class="traceContains">+mem: storing 0 in location 2</span>
+<span id="L463" class="LineNr">463 </span>
+<span id="L464" class="LineNr">464 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L465" class="LineNr">465 </span>AND_BITS<span class="Delimiter">,</span>
+<span id="L466" class="LineNr">466 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L467" class="LineNr">467 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;and-bits&quot;</span><span class="Delimiter">,</span> AND_BITS<span class="Delimiter">);</span>
+<span id="L468" class="LineNr">468 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L469" class="LineNr">469 </span><span class="Normal">case</span> AND_BITS: <span class="Delimiter">{</span>
+<span id="L470" class="LineNr">470 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L471" class="LineNr">471 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L472" class="LineNr">472 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L473" class="LineNr">473 </span>  <span class="Delimiter">}</span>
+<span id="L474" class="LineNr">474 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L475" class="LineNr">475 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L476" class="LineNr">476 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L477" class="LineNr">477 </span>  <span class="Delimiter">}</span>
+<span id="L478" class="LineNr">478 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L479" class="LineNr">479 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L480" class="LineNr">480 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L481" class="LineNr">481 </span>  <span class="Delimiter">}</span>
+<span id="L482" class="LineNr">482 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L483" class="LineNr">483 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L484" class="LineNr">484 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L485" class="LineNr">485 </span>  <span class="Delimiter">}</span>
+<span id="L486" class="LineNr">486 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L487" class="LineNr">487 </span><span class="Delimiter">}</span>
+<span id="L488" class="LineNr">488 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L489" class="LineNr">489 </span><span class="Normal">case</span> AND_BITS: <span class="Delimiter">{</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Comment">// ingredients must be integers</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L492" class="LineNr">492 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L493" class="LineNr">493 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L494" class="LineNr">494 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a&amp;b<span class="Delimiter">);</span>
+<span id="L495" class="LineNr">495 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L496" class="LineNr">496 </span><span class="Delimiter">}</span>
+<span id="L497" class="LineNr">497 </span>
+<span id="L498" class="LineNr">498 </span><span class="Delimiter">:(scenario and_bits_1)</span>
+<span id="L499" class="LineNr">499 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L500" class="LineNr">500 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">8</span><span class="Delimiter">,</span> <span class="Constant">3</span>
+<span id="L501" class="LineNr">501 </span>]
+<span id="L502" class="LineNr">502 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L503" class="LineNr">503 </span>
+<span id="L504" class="LineNr">504 </span><span class="Delimiter">:(scenario and_bits_2)</span>
+<span id="L505" class="LineNr">505 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L506" class="LineNr">506 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L507" class="LineNr">507 </span>]
+<span id="L508" class="LineNr">508 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L509" class="LineNr">509 </span>
+<span id="L510" class="LineNr">510 </span><span class="Delimiter">:(scenario and_bits_3)</span>
+<span id="L511" class="LineNr">511 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L512" class="LineNr">512 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">3</span>
+<span id="L513" class="LineNr">513 </span>]
+<span id="L514" class="LineNr">514 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L515" class="LineNr">515 </span>
+<span id="L516" class="LineNr">516 </span><span class="Delimiter">:(scenario and_bits_negative)</span>
+<span id="L517" class="LineNr">517 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L518" class="LineNr">518 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">and</span>-bits -<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
+<span id="L519" class="LineNr">519 </span>]
+<span id="L520" class="LineNr">520 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L521" class="LineNr">521 </span>
+<span id="L522" class="LineNr">522 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L523" class="LineNr">523 </span>OR_BITS<span class="Delimiter">,</span>
+<span id="L524" class="LineNr">524 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L525" class="LineNr">525 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;or-bits&quot;</span><span class="Delimiter">,</span> OR_BITS<span class="Delimiter">);</span>
+<span id="L526" class="LineNr">526 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L527" class="LineNr">527 </span><span class="Normal">case</span> OR_BITS: <span class="Delimiter">{</span>
+<span id="L528" class="LineNr">528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L529" class="LineNr">529 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L530" class="LineNr">530 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>  <span class="Delimiter">}</span>
+<span id="L532" class="LineNr">532 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L533" class="LineNr">533 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L534" class="LineNr">534 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L535" class="LineNr">535 </span>  <span class="Delimiter">}</span>
+<span id="L536" class="LineNr">536 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L537" class="LineNr">537 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L538" class="LineNr">538 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L539" class="LineNr">539 </span>  <span class="Delimiter">}</span>
+<span id="L540" class="LineNr">540 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L541" class="LineNr">541 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L542" class="LineNr">542 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L543" class="LineNr">543 </span>  <span class="Delimiter">}</span>
+<span id="L544" class="LineNr">544 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L545" class="LineNr">545 </span><span class="Delimiter">}</span>
+<span id="L546" class="LineNr">546 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L547" class="LineNr">547 </span><span class="Normal">case</span> OR_BITS: <span class="Delimiter">{</span>
+<span id="L548" class="LineNr">548 </span>  <span class="Comment">// ingredients must be integers</span>
+<span id="L549" class="LineNr">549 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L550" class="LineNr">550 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L551" class="LineNr">551 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L552" class="LineNr">552 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a|b<span class="Delimiter">);</span>
+<span id="L553" class="LineNr">553 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L554" class="LineNr">554 </span><span class="Delimiter">}</span>
+<span id="L555" class="LineNr">555 </span>
+<span id="L556" class="LineNr">556 </span><span class="Delimiter">:(scenario or_bits_1)</span>
+<span id="L557" class="LineNr">557 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L558" class="LineNr">558 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">8</span>
+<span id="L559" class="LineNr">559 </span>]
+<span id="L560" class="LineNr">560 </span><span class="traceContains">+mem: storing 11 in location 1</span>
+<span id="L561" class="LineNr">561 </span>
+<span id="L562" class="LineNr">562 </span><span class="Delimiter">:(scenario or_bits_2)</span>
+<span id="L563" class="LineNr">563 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L564" class="LineNr">564 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">10</span>
+<span id="L565" class="LineNr">565 </span>]
+<span id="L566" class="LineNr">566 </span><span class="traceContains">+mem: storing 11 in location 1</span>
+<span id="L567" class="LineNr">567 </span>
+<span id="L568" class="LineNr">568 </span><span class="Delimiter">:(scenario or_bits_3)</span>
+<span id="L569" class="LineNr">569 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L570" class="LineNr">570 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">or</span>-bits <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">6</span>
+<span id="L571" class="LineNr">571 </span>]
+<span id="L572" class="LineNr">572 </span><span class="traceContains">+mem: storing 6 in location 1</span>
+<span id="L573" class="LineNr">573 </span>
+<span id="L574" class="LineNr">574 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L575" class="LineNr">575 </span>XOR_BITS<span class="Delimiter">,</span>
+<span id="L576" class="LineNr">576 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L577" class="LineNr">577 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;xor-bits&quot;</span><span class="Delimiter">,</span> XOR_BITS<span class="Delimiter">);</span>
+<span id="L578" class="LineNr">578 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L579" class="LineNr">579 </span><span class="Normal">case</span> XOR_BITS: <span class="Delimiter">{</span>
+<span id="L580" class="LineNr">580 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L581" class="LineNr">581 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L582" class="LineNr">582 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L583" class="LineNr">583 </span>  <span class="Delimiter">}</span>
+<span id="L584" class="LineNr">584 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L585" class="LineNr">585 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' requires number ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L586" class="LineNr">586 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L587" class="LineNr">587 </span>  <span class="Delimiter">}</span>
+<span id="L588" class="LineNr">588 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L589" class="LineNr">589 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L590" class="LineNr">590 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L591" class="LineNr">591 </span>  <span class="Delimiter">}</span>
+<span id="L592" class="LineNr">592 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L593" class="LineNr">593 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'xor-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L594" class="LineNr">594 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L595" class="LineNr">595 </span>  <span class="Delimiter">}</span>
+<span id="L596" class="LineNr">596 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L597" class="LineNr">597 </span><span class="Delimiter">}</span>
+<span id="L598" class="LineNr">598 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L599" class="LineNr">599 </span><span class="Normal">case</span> XOR_BITS: <span class="Delimiter">{</span>
+<span id="L600" class="LineNr">600 </span>  <span class="Comment">// ingredients must be integers</span>
+<span id="L601" class="LineNr">601 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L602" class="LineNr">602 </span>  <span class="Normal">int</span> b = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L603" class="LineNr">603 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L604" class="LineNr">604 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>a^b<span class="Delimiter">);</span>
+<span id="L605" class="LineNr">605 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L606" class="LineNr">606 </span><span class="Delimiter">}</span>
+<span id="L607" class="LineNr">607 </span>
+<span id="L608" class="LineNr">608 </span><span class="Delimiter">:(scenario xor_bits_1)</span>
+<span id="L609" class="LineNr">609 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L610" class="LineNr">610 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">8</span>
+<span id="L611" class="LineNr">611 </span>]
+<span id="L612" class="LineNr">612 </span><span class="traceContains">+mem: storing 11 in location 1</span>
+<span id="L613" class="LineNr">613 </span>
+<span id="L614" class="LineNr">614 </span><span class="Delimiter">:(scenario xor_bits_2)</span>
+<span id="L615" class="LineNr">615 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L616" class="LineNr">616 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">10</span>
+<span id="L617" class="LineNr">617 </span>]
+<span id="L618" class="LineNr">618 </span><span class="traceContains">+mem: storing 9 in location 1</span>
+<span id="L619" class="LineNr">619 </span>
+<span id="L620" class="LineNr">620 </span><span class="Delimiter">:(scenario xor_bits_3)</span>
+<span id="L621" class="LineNr">621 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L622" class="LineNr">622 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><span class="Normal">xor</span>-bits <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">6</span>
+<span id="L623" class="LineNr">623 </span>]
+<span id="L624" class="LineNr">624 </span><span class="traceContains">+mem: storing 2 in location 1</span>
+<span id="L625" class="LineNr">625 </span>
+<span id="L626" class="LineNr">626 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L627" class="LineNr">627 </span>FLIP_BITS<span class="Delimiter">,</span>
+<span id="L628" class="LineNr">628 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L629" class="LineNr">629 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;flip-bits&quot;</span><span class="Delimiter">,</span> FLIP_BITS<span class="Delimiter">);</span>
+<span id="L630" class="LineNr">630 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L631" class="LineNr">631 </span><span class="Normal">case</span> FLIP_BITS: <span class="Delimiter">{</span>
+<span id="L632" class="LineNr">632 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L633" class="LineNr">633 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L634" class="LineNr">634 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L635" class="LineNr">635 </span>  <span class="Delimiter">}</span>
+<span id="L636" class="LineNr">636 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L637" class="LineNr">637 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' requires a number ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L638" class="LineNr">638 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L639" class="LineNr">639 </span>  <span class="Delimiter">}</span>
+<span id="L640" class="LineNr">640 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L641" class="LineNr">641 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' yields one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L642" class="LineNr">642 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L643" class="LineNr">643 </span>  <span class="Delimiter">}</span>
+<span id="L644" class="LineNr">644 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L645" class="LineNr">645 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'flip-bits' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L646" class="LineNr">646 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L647" class="LineNr">647 </span>  <span class="Delimiter">}</span>
+<span id="L648" class="LineNr">648 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L649" class="LineNr">649 </span><span class="Delimiter">}</span>
+<span id="L650" class="LineNr">650 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L651" class="LineNr">651 </span><span class="Normal">case</span> FLIP_BITS: <span class="Delimiter">{</span>
+<span id="L652" class="LineNr">652 </span>  <span class="Comment">// ingredient must be integer</span>
+<span id="L653" class="LineNr">653 </span>  <span class="Normal">int</span> a = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L654" class="LineNr">654 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L655" class="LineNr">655 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>~a<span class="Delimiter">);</span>
+<span id="L656" class="LineNr">656 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L657" class="LineNr">657 </span><span class="Delimiter">}</span>
+<span id="L658" class="LineNr">658 </span>
+<span id="L659" class="LineNr">659 </span><span class="Delimiter">:(scenario flip_bits_zero)</span>
+<span id="L660" class="LineNr">660 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L661" class="LineNr">661 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">0</span>
+<span id="L662" class="LineNr">662 </span>]
+<span id="L663" class="LineNr">663 </span><span class="traceContains">+mem: storing -1 in location 1</span>
+<span id="L664" class="LineNr">664 </span>
+<span id="L665" class="LineNr">665 </span><span class="Delimiter">:(scenario flip_bits_negative)</span>
+<span id="L666" class="LineNr">666 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L667" class="LineNr">667 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits -<span class="Constant">1</span>
+<span id="L668" class="LineNr">668 </span>]
+<span id="L669" class="LineNr">669 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L670" class="LineNr">670 </span>
+<span id="L671" class="LineNr">671 </span><span class="Delimiter">:(scenario flip_bits_1)</span>
+<span id="L672" class="LineNr">672 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L673" class="LineNr">673 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">3</span>
+<span id="L674" class="LineNr">674 </span>]
+<span id="L675" class="LineNr">675 </span><span class="traceContains">+mem: storing -4 in location 1</span>
+<span id="L676" class="LineNr">676 </span>
+<span id="L677" class="LineNr">677 </span><span class="Delimiter">:(scenario flip_bits_2)</span>
+<span id="L678" class="LineNr">678 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L679" class="LineNr">679 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>flip-bits <span class="Constant">12</span>
+<span id="L680" class="LineNr">680 </span>]
+<span id="L681" class="LineNr">681 </span><span class="traceContains">+mem: storing -13 in location 1</span>
+<span id="L682" class="LineNr">682 </span>
+<span id="L683" class="LineNr">683 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L684" class="LineNr">684 </span>ROUND<span class="Delimiter">,</span>
+<span id="L685" class="LineNr">685 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L686" class="LineNr">686 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;round&quot;</span><span class="Delimiter">,</span> ROUND<span class="Delimiter">);</span>
+<span id="L687" class="LineNr">687 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L688" class="LineNr">688 </span><span class="Normal">case</span> ROUND: <span class="Delimiter">{</span>
+<span id="L689" class="LineNr">689 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L690" class="LineNr">690 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'round' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L691" class="LineNr">691 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L692" class="LineNr">692 </span>  <span class="Delimiter">}</span>
+<span id="L693" class="LineNr">693 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L694" class="LineNr">694 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'round' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L695" class="LineNr">695 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L696" class="LineNr">696 </span>  <span class="Delimiter">}</span>
+<span id="L697" class="LineNr">697 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L698" class="LineNr">698 </span><span class="Delimiter">}</span>
+<span id="L699" class="LineNr">699 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L700" class="LineNr">700 </span><span class="Normal">case</span> ROUND: <span class="Delimiter">{</span>
+<span id="L701" class="LineNr">701 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L702" class="LineNr">702 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>rint<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
+<span id="L703" class="LineNr">703 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L704" class="LineNr">704 </span><span class="Delimiter">}</span>
+<span id="L705" class="LineNr">705 </span>
+<span id="L706" class="LineNr">706 </span><span class="Delimiter">:(scenario round_to_nearest_integer)</span>
+<span id="L707" class="LineNr">707 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L708" class="LineNr">708 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round <span class="Constant">12.2</span>
+<span id="L709" class="LineNr">709 </span>]
+<span id="L710" class="LineNr">710 </span><span class="traceContains">+mem: storing 12 in location 1</span>
+<span id="L711" class="LineNr">711 </span>
+<span id="L712" class="LineNr">712 </span><span class="Delimiter">:(scenario round_halves_toward_zero)</span>
+<span id="L713" class="LineNr">713 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L714" class="LineNr">714 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round <span class="Constant">12.5</span>
+<span id="L715" class="LineNr">715 </span>]
+<span id="L716" class="LineNr">716 </span><span class="traceContains">+mem: storing 12 in location 1</span>
+<span id="L717" class="LineNr">717 </span>
+<span id="L718" class="LineNr">718 </span><span class="Delimiter">:(scenario round_halves_toward_zero_2)</span>
+<span id="L719" class="LineNr">719 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L720" class="LineNr">720 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>round -<span class="Constant">12.5</span>
+<span id="L721" class="LineNr">721 </span>]
+<span id="L722" class="LineNr">722 </span><span class="traceContains">+mem: storing -12 in location 1</span>
+<span id="L723" class="LineNr">723 </span>
+<span id="L724" class="LineNr">724 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L725" class="LineNr">725 </span>TRUNCATE<span class="Delimiter">,</span>
+<span id="L726" class="LineNr">726 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L727" class="LineNr">727 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;truncate&quot;</span><span class="Delimiter">,</span> TRUNCATE<span class="Delimiter">);</span>
+<span id="L728" class="LineNr">728 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L729" class="LineNr">729 </span><span class="Normal">case</span> TRUNCATE: <span class="Delimiter">{</span>
+<span id="L730" class="LineNr">730 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L731" class="LineNr">731 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'truncate' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L732" class="LineNr">732 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L733" class="LineNr">733 </span>  <span class="Delimiter">}</span>
+<span id="L734" class="LineNr">734 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L735" class="LineNr">735 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'truncate' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L736" class="LineNr">736 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L737" class="LineNr">737 </span>  <span class="Delimiter">}</span>
+<span id="L738" class="LineNr">738 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L739" class="LineNr">739 </span><span class="Delimiter">}</span>
+<span id="L740" class="LineNr">740 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L741" class="LineNr">741 </span><span class="Normal">case</span> TRUNCATE: <span class="Delimiter">{</span>
+<span id="L742" class="LineNr">742 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L743" class="LineNr">743 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>trunc<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
+<span id="L744" class="LineNr">744 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L745" class="LineNr">745 </span><span class="Delimiter">}</span>
+<span id="L746" class="LineNr">746 </span>
+<span id="L747" class="LineNr">747 </span><span class="Delimiter">:(scenario truncate_to_nearest_integer)</span>
+<span id="L748" class="LineNr">748 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L749" class="LineNr">749 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><a href='101run_sandboxed.cc.html#L543'>truncate</a> <span class="Constant">12.2</span>
+<span id="L750" class="LineNr">750 </span>]
+<span id="L751" class="LineNr">751 </span><span class="traceContains">+mem: storing 12 in location 1</span>
+<span id="L752" class="LineNr">752 </span>
+<span id="L753" class="LineNr">753 </span><span class="Delimiter">:(scenario truncate_negative)</span>
+<span id="L754" class="LineNr">754 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L755" class="LineNr">755 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span><a href='101run_sandboxed.cc.html#L543'>truncate</a> -<span class="Constant">12.2</span>
+<span id="L756" class="LineNr">756 </span>]
+<span id="L757" class="LineNr">757 </span><span class="traceContains">+mem: storing -12 in location 1</span>
+<span id="L758" class="LineNr">758 </span>
+<span id="L759" class="LineNr">759 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L760" class="LineNr">760 </span>SQUARE_ROOT<span class="Delimiter">,</span>
+<span id="L761" class="LineNr">761 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L762" class="LineNr">762 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;square-root&quot;</span><span class="Delimiter">,</span> SQUARE_ROOT<span class="Delimiter">);</span>
+<span id="L763" class="LineNr">763 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L764" class="LineNr">764 </span><span class="Normal">case</span> SQUARE_ROOT: <span class="Delimiter">{</span>
+<span id="L765" class="LineNr">765 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L766" class="LineNr">766 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'square-root' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L767" class="LineNr">767 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L768" class="LineNr">768 </span>  <span class="Delimiter">}</span>
+<span id="L769" class="LineNr">769 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L770" class="LineNr">770 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'square-root' should be a number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L771" class="LineNr">771 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L772" class="LineNr">772 </span>  <span class="Delimiter">}</span>
+<span id="L773" class="LineNr">773 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L774" class="LineNr">774 </span><span class="Delimiter">}</span>
+<span id="L775" class="LineNr">775 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L776" class="LineNr">776 </span><span class="Normal">case</span> SQUARE_ROOT: <span class="Delimiter">{</span>
+<span id="L777" class="LineNr">777 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L778" class="LineNr">778 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>sqrt<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
+<span id="L779" class="LineNr">779 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L780" class="LineNr">780 </span><span class="Delimiter">}</span>
+<span id="L781" class="LineNr">781 </span>
+<span id="L782" class="LineNr">782 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L783" class="LineNr">783 </span>CHARACTER_TO_CODE<span class="Delimiter">,</span>
+<span id="L784" class="LineNr">784 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L785" class="LineNr">785 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;character-to-code&quot;</span><span class="Delimiter">,</span> CHARACTER_TO_CODE<span class="Delimiter">);</span>
+<span id="L786" class="LineNr">786 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L787" class="LineNr">787 </span><span class="Normal">case</span> CHARACTER_TO_CODE: <span class="Delimiter">{</span>
+<span id="L788" class="LineNr">788 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L789" class="LineNr">789 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'character-to-code' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L790" class="LineNr">790 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L791" class="LineNr">791 </span>  <span class="Delimiter">}</span>
+<span id="L792" class="LineNr">792 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_character<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L793" class="LineNr">793 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'character-to-code' should be a character, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L794" class="LineNr">794 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L795" class="LineNr">795 </span>  <span class="Delimiter">}</span>
+<span id="L796" class="LineNr">796 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L797" class="LineNr">797 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'character-to-code' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L798" class="LineNr">798 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L799" class="LineNr">799 </span>  <span class="Delimiter">}</span>
+<span id="L800" class="LineNr">800 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L801" class="LineNr">801 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of 'character-to-code' should be a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L802" class="LineNr">802 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L803" class="LineNr">803 </span>  <span class="Delimiter">}</span>
+<span id="L804" class="LineNr">804 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L805" class="LineNr">805 </span><span class="Delimiter">}</span>
+<span id="L806" class="LineNr">806 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L807" class="LineNr">807 </span><span class="Normal">case</span> CHARACTER_TO_CODE: <span class="Delimiter">{</span>
+<span id="L808" class="LineNr">808 </span>  <span class="Normal">double</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L809" class="LineNr">809 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L810" class="LineNr">810 </span>    result += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L811" class="LineNr">811 </span>  <span class="Delimiter">}</span>
+<span id="L812" class="LineNr">812 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L813" class="LineNr">813 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L814" class="LineNr">814 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L815" class="LineNr">815 </span><span class="Delimiter">}</span>
+<span id="L816" class="LineNr">816 </span>
+<span id="L817" class="LineNr">817 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L818" class="LineNr">818 </span><span class="Comment">#include &lt;math.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/023boolean.cc.html b/html/023boolean.cc.html
index eb220299..56a4896d 100644
--- a/html/023boolean.cc.html
+++ b/html/023boolean.cc.html
@@ -70,162 +70,168 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr">  8 </span><span class="Normal">case</span> AND: <span class="Delimiter">{</span>
 <span id="L9" class="LineNr">  9 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L10" class="LineNr"> 10 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L11" class="LineNr"> 11 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' requires boolean ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L11" class="LineNr"> 11 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' requires boolean ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L12" class="LineNr"> 12 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
 <span id="L13" class="LineNr"> 13 </span>    <span class="Delimiter">}</span>
 <span id="L14" class="LineNr"> 14 </span>  <span class="Delimiter">}</span>
 <span id="L15" class="LineNr"> 15 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L16" class="LineNr"> 16 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr"> 16 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L17" class="LineNr"> 17 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Delimiter">}</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L21" class="LineNr"> 21 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Delimiter">}</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L24" class="LineNr"> 24 </span><span class="Delimiter">}</span>
 <span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L26" class="LineNr"> 26 </span><span class="Normal">case</span> AND: <span class="Delimiter">{</span>
-<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L29" class="LineNr"> 29 </span>    result = result &amp;&amp; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L29" class="LineNr"> 29 </span>    result = result &amp;&amp; <a href='023boolean.cc.html#L35'>scalar_ingredient</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
 <span id="L30" class="LineNr"> 30 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L31" class="LineNr"> 31 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
 <span id="L32" class="LineNr"> 32 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L33" class="LineNr"> 33 </span><span class="Delimiter">}</span>
-<span id="L34" class="LineNr"> 34 </span>
-<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(scenario and)</span>
-<span id="L36" class="LineNr"> 36 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L37" class="LineNr"> 37 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L38" class="LineNr"> 38 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span>
-<span id="L40" class="LineNr"> 40 </span>]
-<span id="L41" class="LineNr"> 41 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L42" class="LineNr"> 42 </span>
-<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(scenario and_2)</span>
-<span id="L44" class="LineNr"> 44 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L45" class="LineNr"> 45 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(code)</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Normal">double</span> <a href='023boolean.cc.html#L35'>scalar_ingredient</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;vector&lt;<span class="Normal">double</span>&gt; &gt;&amp; ingredients<span class="Delimiter">,</span> <span class="Normal">int</span> i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<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>i<span class="Delimiter">)))</span>
+<span id="L37" class="LineNr"> 37 </span>    <span class="Identifier">return</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Identifier">return</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
+<span id="L40" class="LineNr"> 40 </span>
+<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(scenario and)</span>
+<span id="L42" class="LineNr"> 42 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> true</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span>
 <span id="L46" class="LineNr"> 46 </span>]
-<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+mem: storing 0 in location 3</span>
 <span id="L48" class="LineNr"> 48 </span>
-<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(scenario and_multiple)</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(scenario and_2)</span>
 <span id="L50" class="LineNr"> 50 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> true</span>
 <span id="L52" class="LineNr"> 52 </span>]
-<span id="L53" class="LineNr"> 53 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L53" class="LineNr"> 53 </span><span class="traceContains">+mem: storing 1 in location 1</span>
 <span id="L54" class="LineNr"> 54 </span>
-<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(scenario and_multiple_2)</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(scenario and_multiple)</span>
 <span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L57" class="LineNr"> 57 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> false</span>
 <span id="L58" class="LineNr"> 58 </span>]
-<span id="L59" class="LineNr"> 59 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L59" class="LineNr"> 59 </span><span class="traceContains">+mem: storing 0 in location 1</span>
 <span id="L60" class="LineNr"> 60 </span>
-<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L62" class="LineNr"> 62 </span>OR<span class="Delimiter">,</span>
-<span id="L63" class="LineNr"> 63 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L64" class="LineNr"> 64 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;or&quot;</span><span class="Delimiter">,</span> OR<span class="Delimiter">);</span>
-<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L66" class="LineNr"> 66 </span><span class="Normal">case</span> OR: <span class="Delimiter">{</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L68" class="LineNr"> 68 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' requires boolean ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L70" class="LineNr"> 70 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L71" class="LineNr"> 71 </span>    <span class="Delimiter">}</span>
-<span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">}</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L74" class="LineNr"> 74 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L75" class="LineNr"> 75 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">}</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
-<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Normal">case</span> OR: <span class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">bool</span> result = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L87" class="LineNr"> 87 </span>    result = result || ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L88" class="LineNr"> 88 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L89" class="LineNr"> 89 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span>
-<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(scenario or)</span>
-<span id="L94" class="LineNr"> 94 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L95" class="LineNr"> 95 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L96" class="LineNr"> 96 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span>
-<span id="L98" class="LineNr"> 98 </span>]
-<span id="L99" class="LineNr"> 99 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L100" class="LineNr">100 </span>
-<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(scenario or_2)</span>
-<span id="L102" class="LineNr">102 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L103" class="LineNr">103 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">:(scenario and_multiple_2)</span>
+<span id="L62" class="LineNr"> 62 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L63" class="LineNr"> 63 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> true</span>
+<span id="L64" class="LineNr"> 64 </span>]
+<span id="L65" class="LineNr"> 65 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L66" class="LineNr"> 66 </span>
+<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L68" class="LineNr"> 68 </span>OR<span class="Delimiter">,</span>
+<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L70" class="LineNr"> 70 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;or&quot;</span><span class="Delimiter">,</span> OR<span class="Delimiter">);</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L72" class="LineNr"> 72 </span><span class="Normal">case</span> OR: <span class="Delimiter">{</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L74" class="LineNr"> 74 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L75" class="LineNr"> 75 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'and' requires boolean ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L76" class="LineNr"> 76 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L77" class="LineNr"> 77 </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="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L80" class="LineNr"> 80 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L81" class="LineNr"> 81 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Delimiter">}</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'or' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L85" class="LineNr"> 85 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">}</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> OR: <span class="Delimiter">{</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">bool</span> result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L93" class="LineNr"> 93 </span>    result = result || <a href='023boolean.cc.html#L35'>scalar_ingredient</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
+<span id="L98" class="LineNr"> 98 </span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(scenario or)</span>
+<span id="L100" class="LineNr">100 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L101" class="LineNr">101 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> true</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span>
 <span id="L104" class="LineNr">104 </span>]
-<span id="L105" class="LineNr">105 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L105" class="LineNr">105 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L106" class="LineNr">106 </span>
-<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(scenario or_multiple)</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(scenario or_2)</span>
 <span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L109" class="LineNr">109 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">and</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> false</span>
 <span id="L110" class="LineNr">110 </span>]
 <span id="L111" class="LineNr">111 </span><span class="traceContains">+mem: storing 0 in location 1</span>
 <span id="L112" class="LineNr">112 </span>
-<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario or_multiple_2)</span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario or_multiple)</span>
 <span id="L114" class="LineNr">114 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L115" class="LineNr">115 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> false</span>
 <span id="L116" class="LineNr">116 </span>]
-<span id="L117" class="LineNr">117 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L117" class="LineNr">117 </span><span class="traceContains">+mem: storing 0 in location 1</span>
 <span id="L118" class="LineNr">118 </span>
-<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L120" class="LineNr">120 </span>NOT<span class="Delimiter">,</span>
-<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L122" class="LineNr">122 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;not&quot;</span><span class="Delimiter">,</span> NOT<span class="Delimiter">);</span>
-<span id="L123" class="LineNr">123 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L124" class="LineNr">124 </span><span class="Normal">case</span> NOT: <span class="Delimiter">{</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L126" class="LineNr">126 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;ingredients and products should match in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L127" class="LineNr">127 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span>  <span class="Delimiter">}</span>
-<span id="L129" class="LineNr">129 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L130" class="LineNr">130 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L131" class="LineNr">131 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'not' requires boolean ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L132" class="LineNr">132 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>    <span class="Delimiter">}</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario or_multiple_2)</span>
+<span id="L120" class="LineNr">120 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L121" class="LineNr">121 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">or</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> true</span>
+<span id="L122" class="LineNr">122 </span>]
+<span id="L123" class="LineNr">123 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L124" class="LineNr">124 </span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L126" class="LineNr">126 </span>NOT<span class="Delimiter">,</span>
+<span id="L127" class="LineNr">127 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L128" class="LineNr">128 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;not&quot;</span><span class="Delimiter">,</span> NOT<span class="Delimiter">);</span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L130" class="LineNr">130 </span><span class="Normal">case</span> NOT: <span class="Delimiter">{</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L132" class="LineNr">132 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;ingredients and products should match in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L133" class="LineNr">133 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L136" class="LineNr">136 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_boolean<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L138" class="LineNr">138 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'not' should yield a boolean, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L139" class="LineNr">139 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span>    <span class="Delimiter">}</span>
-<span id="L141" class="LineNr">141 </span>  <span class="Delimiter">}</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">}</span>
-<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L145" class="LineNr">145 </span><span class="Normal">case</span> NOT: <span class="Delimiter">{</span>
-<span id="L146" class="LineNr">146 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">));</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L148" class="LineNr">148 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>!ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Delimiter">}</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span><span class="Delimiter">}</span>
-<span id="L152" class="LineNr">152 </span>
-<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario not)</span>
-<span id="L154" class="LineNr">154 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L155" class="LineNr">155 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span> <span class="Constant">1</span>:<span class="Normal">bool</span>
-<span id="L157" class="LineNr">157 </span>]
-<span id="L158" class="LineNr">158 </span><span class="traceContains">+mem: storing 0 in location 2</span>
-<span id="L159" class="LineNr">159 </span>
-<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(scenario not_multiple)</span>
-<span id="L161" class="LineNr">161 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L162" class="LineNr">162 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L136" class="LineNr">136 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'not' requires ingredients that can be interpreted as boolean, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L138" class="LineNr">138 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>    <span class="Delimiter">}</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L142" class="LineNr">142 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_boolean<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L144" class="LineNr">144 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'not' should yield a boolean, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L145" class="LineNr">145 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>    <span class="Delimiter">}</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
+<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L151" class="LineNr">151 </span><span class="Normal">case</span> NOT: <span class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">));</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L154" class="LineNr">154 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>!scalar_ingredient<span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span><span class="Delimiter">}</span>
+<span id="L158" class="LineNr">158 </span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(scenario not)</span>
+<span id="L160" class="LineNr">160 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L161" class="LineNr">161 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> true</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span> <span class="Constant">1</span>:<span class="Normal">bool</span>
 <span id="L163" class="LineNr">163 </span>]
-<span id="L164" class="LineNr">164 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L165" class="LineNr">165 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L166" class="LineNr">166 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L164" class="LineNr">164 </span><span class="traceContains">+mem: storing 0 in location 2</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(scenario not_multiple)</span>
+<span id="L167" class="LineNr">167 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L168" class="LineNr">168 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span><span class="Constant"> true</span><span class="Delimiter">,</span><span class="Constant"> false</span><span class="Delimiter">,</span><span class="Constant"> true</span>
+<span id="L169" class="LineNr">169 </span>]
+<span id="L170" class="LineNr">170 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L171" class="LineNr">171 </span><span class="traceContains">+mem: storing 1 in location 2</span>
+<span id="L172" class="LineNr">172 </span><span class="traceContains">+mem: storing 0 in location 3</span>
 </pre>
 </body>
 </html>
diff --git a/html/024jump.cc.html b/html/024jump.cc.html
index 35cc5ef2..9f87a0fa 100644
--- a/html/024jump.cc.html
+++ b/html/024jump.cc.html
@@ -79,152 +79,182 @@ if ('onhashchange' in window) {
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L17" class="LineNr"> 17 </span><span class="Normal">case</span> JUMP: <span class="Delimiter">{</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L19" class="LineNr"> 19 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly one ingredient</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L19" class="LineNr"> 19 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly one ingredient</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L20" class="LineNr"> 20 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L21" class="LineNr"> 21 </span>  <span class="Delimiter">}</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should be a label or offset, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should be a label or offset, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L24" class="LineNr"> 24 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">}</span>
-<span id="L26" class="LineNr"> 26 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">}</span>
-<span id="L28" class="LineNr"> 28 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L29" class="LineNr"> 29 </span><span class="Normal">case</span> JUMP: <span class="Delimiter">{</span>
-<span id="L30" class="LineNr"> 30 </span>  assert<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>initialized<span class="Delimiter">);</span>
-<span id="L31" class="LineNr"> 31 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L32" class="LineNr"> 32 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L32'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L33" class="LineNr"> 33 </span>  <span class="Comment">// skip rest of this instruction</span>
-<span id="L34" class="LineNr"> 34 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L35" class="LineNr"> 35 </span>  fall_through_to_next_instruction = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L36" class="LineNr"> 36 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">}</span>
-<span id="L38" class="LineNr"> 38 </span>
-<span id="L39" class="LineNr"> 39 </span><span class="Comment">//: special type to designate jump targets</span>
-<span id="L40" class="LineNr"> 40 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L41" class="LineNr"> 41 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;offset&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L27" class="LineNr"> 27 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'jump' instructions write no products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L28" class="LineNr"> 28 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L29" class="LineNr"> 29 </span>  <span class="Delimiter">}</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">}</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Normal">case</span> JUMP: <span class="Delimiter">{</span>
+<span id="L34" class="LineNr"> 34 </span>  assert<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>initialized<span class="Delimiter">);</span>
+<span id="L35" class="LineNr"> 35 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L33'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Comment">// skip rest of this instruction</span>
+<span id="L38" class="LineNr"> 38 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span>  fall_through_to_next_instruction =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">}</span>
 <span id="L42" class="LineNr"> 42 </span>
-<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(scenario jump_backward)</span>
-<span id="L44" class="LineNr"> 44 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L45" class="LineNr"> 45 </span>  jump <span class="Constant">1:offset</span>  <span class="Comment"># 0 -+</span>
-<span id="L46" class="LineNr"> 46 </span>  jump <span class="Constant">3:offset</span>  <span class="Comment">#    |   +-+ 1</span>
-<span id="L47" class="LineNr"> 47 </span>                 <span class="Comment">#   \/  /\ |</span>
-<span id="L48" class="LineNr"> 48 </span>  jump <span class="Constant">-2:offset</span> <span class="Comment">#  2 +--&gt;+ |</span>
-<span id="L49" class="LineNr"> 49 </span>]                <span class="Comment">#         \/ 3</span>
-<span id="L50" class="LineNr"> 50 </span><span class="traceContains">+run: jump {1: &quot;offset&quot;}</span>
-<span id="L51" class="LineNr"> 51 </span><span class="traceContains">+run: jump {-2: &quot;offset&quot;}</span>
-<span id="L52" class="LineNr"> 52 </span><span class="traceContains">+run: jump {3: &quot;offset&quot;}</span>
-<span id="L53" class="LineNr"> 53 </span>
-<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L55" class="LineNr"> 55 </span>JUMP_IF<span class="Delimiter">,</span>
-<span id="L56" class="LineNr"> 56 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L57" class="LineNr"> 57 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;jump-if&quot;</span><span class="Delimiter">,</span> JUMP_IF<span class="Delimiter">);</span>
-<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L59" class="LineNr"> 59 </span><span class="Normal">case</span> JUMP_IF: <span class="Delimiter">{</span>
-<span id="L60" class="LineNr"> 60 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L61" class="LineNr"> 61 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly two ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L62" class="LineNr"> 62 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L63" class="LineNr"> 63 </span>  <span class="Delimiter">}</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L65" class="LineNr"> 65 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a boolean for its first ingredient, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L66" class="LineNr"> 66 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Delimiter">}</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a label or offset for its second ingredient, but '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L70" class="LineNr"> 70 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Delimiter">}</span>
-<span id="L72" class="LineNr"> 72 </span>  <span class="Comment">// End JUMP_IF Checks</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
-<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L76" class="LineNr"> 76 </span><span class="Normal">case</span> JUMP_IF: <span class="Delimiter">{</span>
-<span id="L77" class="LineNr"> 77 </span>  assert<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">1</span><span class="Delimiter">).</span>initialized<span class="Delimiter">);</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L79" class="LineNr"> 79 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump-if fell through&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L80" class="LineNr"> 80 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">}</span>
-<span id="L82" class="LineNr"> 82 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L83" class="LineNr"> 83 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L32'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Comment">// skip rest of this instruction</span>
-<span id="L85" class="LineNr"> 85 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L86" class="LineNr"> 86 </span>  fall_through_to_next_instruction = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">}</span>
-<span id="L89" class="LineNr"> 89 </span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(scenario jump_if)</span>
-<span id="L91" class="LineNr"> 91 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L92" class="LineNr"> 92 </span>  jump-<span class="Normal">if</span> <span class="Constant">999</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L94" class="LineNr"> 94 </span>]
-<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+run: jump-if {999: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
-<span id="L96" class="LineNr"> 96 </span><span class="traceContains">+run: jumping to <a href='010vm.cc.html#L32'>instruction</a> 2</span>
-<span id="L97" class="LineNr"> 97 </span><span class="traceAbsent">-run: {1: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
-<span id="L98" class="LineNr"> 98 </span><span class="traceAbsent">-mem: storing 1 in location 123</span>
-<span id="L99" class="LineNr"> 99 </span>
-<span id="L100" class="LineNr">100 </span><span class="Delimiter">:(scenario jump_if_fallthrough)</span>
-<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L102" class="LineNr">102 </span>  jump-<span class="Normal">if</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L104" class="LineNr">104 </span>]
-<span id="L105" class="LineNr">105 </span><span class="traceContains">+run: jump-if {0: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
-<span id="L106" class="LineNr">106 </span><span class="traceContains">+run: jump-if fell through</span>
-<span id="L107" class="LineNr">107 </span><span class="traceContains">+run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
-<span id="L108" class="LineNr">108 </span><span class="traceContains">+mem: storing 1 in location 123</span>
-<span id="L109" class="LineNr">109 </span>
-<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L111" class="LineNr">111 </span>JUMP_UNLESS<span class="Delimiter">,</span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L113" class="LineNr">113 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;jump-unless&quot;</span><span class="Delimiter">,</span> JUMP_UNLESS<span class="Delimiter">);</span>
-<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L115" class="LineNr">115 </span><span class="Normal">case</span> JUMP_UNLESS: <span class="Delimiter">{</span>
-<span id="L116" class="LineNr">116 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L117" class="LineNr">117 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly two ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L118" class="LineNr">118 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Delimiter">}</span>
-<span id="L120" class="LineNr">120 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L121" class="LineNr">121 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a boolean for its first ingredient, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L122" class="LineNr">122 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>  <span class="Delimiter">}</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L125" class="LineNr">125 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a label or offset for its second ingredient, but '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L126" class="LineNr">126 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Delimiter">}</span>
-<span id="L128" class="LineNr">128 </span>  <span class="Comment">// End JUMP_UNLESS Checks</span>
-<span id="L129" class="LineNr">129 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L130" class="LineNr">130 </span><span class="Delimiter">}</span>
-<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L132" class="LineNr">132 </span><span class="Normal">case</span> JUMP_UNLESS: <span class="Delimiter">{</span>
-<span id="L133" class="LineNr">133 </span>  assert<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">1</span><span class="Delimiter">).</span>initialized<span class="Delimiter">);</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump-unless fell through&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L136" class="LineNr">136 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Delimiter">}</span>
-<span id="L138" class="LineNr">138 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L32'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Comment">// skip rest of this instruction</span>
-<span id="L141" class="LineNr">141 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>  fall_through_to_next_instruction = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
-<span id="L145" class="LineNr">145 </span>
-<span id="L146" class="LineNr">146 </span><span class="Delimiter">:(scenario jump_unless)</span>
-<span id="L147" class="LineNr">147 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L148" class="LineNr">148 </span>  jump-unless <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L150" class="LineNr">150 </span>]
-<span id="L151" class="LineNr">151 </span><span class="traceContains">+run: jump-unless {0: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
-<span id="L152" class="LineNr">152 </span><span class="traceContains">+run: jumping to <a href='010vm.cc.html#L32'>instruction</a> 2</span>
-<span id="L153" class="LineNr">153 </span><span class="traceAbsent">-run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
-<span id="L154" class="LineNr">154 </span><span class="traceAbsent">-mem: storing 1 in location 123</span>
-<span id="L155" class="LineNr">155 </span>
-<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(scenario jump_unless_fallthrough)</span>
-<span id="L157" class="LineNr">157 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L158" class="LineNr">158 </span>  jump-unless <span class="Constant">999</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L160" class="LineNr">160 </span>]
-<span id="L161" class="LineNr">161 </span><span class="traceContains">+run: jump-unless {999: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
-<span id="L162" class="LineNr">162 </span><span class="traceContains">+run: jump-unless fell through</span>
-<span id="L163" class="LineNr">163 </span><span class="traceContains">+run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
-<span id="L164" class="LineNr">164 </span><span class="traceContains">+mem: storing 1 in location 123</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Comment">//: special type to designate jump targets</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L45" class="LineNr"> 45 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;offset&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">:(scenario jump_backward)</span>
+<span id="L48" class="LineNr"> 48 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L49" class="LineNr"> 49 </span>  jump <span class="Constant">1:offset</span>  <span class="Comment"># 0 -+</span>
+<span id="L50" class="LineNr"> 50 </span>  jump <span class="Constant">3:offset</span>  <span class="Comment">#    |   +-+ 1</span>
+<span id="L51" class="LineNr"> 51 </span>                 <span class="Comment">#   \/  /\ |</span>
+<span id="L52" class="LineNr"> 52 </span>  jump <span class="Constant">-2:offset</span> <span class="Comment">#  2 +--&gt;+ |</span>
+<span id="L53" class="LineNr"> 53 </span>]                <span class="Comment">#         \/ 3</span>
+<span id="L54" class="LineNr"> 54 </span><span class="traceContains">+run: jump {1: &quot;offset&quot;}</span>
+<span id="L55" class="LineNr"> 55 </span><span class="traceContains">+run: jump {-2: &quot;offset&quot;}</span>
+<span id="L56" class="LineNr"> 56 </span><span class="traceContains">+run: jump {3: &quot;offset&quot;}</span>
+<span id="L57" class="LineNr"> 57 </span>
+<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(scenario jump_takes_no_products)</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L60" class="LineNr"> 60 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L61" class="LineNr"> 61 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>jump <span class="Constant">1</span>
+<span id="L62" class="LineNr"> 62 </span>]
+<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'jump' instructions write no products</span>
+<span id="L64" class="LineNr"> 64 </span>
+<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L66" class="LineNr"> 66 </span>JUMP_IF<span class="Delimiter">,</span>
+<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L68" class="LineNr"> 68 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;jump-if&quot;</span><span class="Delimiter">,</span> JUMP_IF<span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L70" class="LineNr"> 70 </span><span class="Normal">case</span> JUMP_IF: <span class="Delimiter">{</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L72" class="LineNr"> 72 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly two ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L73" class="LineNr"> 73 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L76" class="LineNr"> 76 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a boolean for its first ingredient, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L77" class="LineNr"> 77 </span>    <span class="Identifier">break</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="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L80" class="LineNr"> 80 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a label or offset for its second ingredient, but '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L81" class="LineNr"> 81 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Delimiter">}</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'jump-if' instructions write no products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L85" class="LineNr"> 85 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Comment">// End JUMP_IF Checks</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Normal">case</span> JUMP_IF: <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  assert<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">1</span><span class="Delimiter">).</span>initialized<span class="Delimiter">);</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar_ingredient<span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L94" class="LineNr"> 94 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump-if fell through&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L95" class="LineNr"> 95 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L33'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Comment">// skip rest of this instruction</span>
+<span id="L100" class="LineNr">100 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L101" class="LineNr">101 </span>  fall_through_to_next_instruction =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L103" class="LineNr">103 </span><span class="Delimiter">}</span>
+<span id="L104" class="LineNr">104 </span>
+<span id="L105" class="LineNr">105 </span><span class="Delimiter">:(scenario jump_if)</span>
+<span id="L106" class="LineNr">106 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L107" class="LineNr">107 </span>  jump-<span class="Normal">if</span> <span class="Constant">999</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L109" class="LineNr">109 </span>]
+<span id="L110" class="LineNr">110 </span><span class="traceContains">+run: jump-if {999: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
+<span id="L111" class="LineNr">111 </span><span class="traceContains">+run: jumping to <a href='010vm.cc.html#L33'>instruction</a> 2</span>
+<span id="L112" class="LineNr">112 </span><span class="traceAbsent">-run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
+<span id="L113" class="LineNr">113 </span><span class="traceAbsent">-mem: storing 1 in location 123</span>
+<span id="L114" class="LineNr">114 </span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(scenario jump_if_fallthrough)</span>
+<span id="L116" class="LineNr">116 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L117" class="LineNr">117 </span>  jump-<span class="Normal">if</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L119" class="LineNr">119 </span>]
+<span id="L120" class="LineNr">120 </span><span class="traceContains">+run: jump-if {0: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
+<span id="L121" class="LineNr">121 </span><span class="traceContains">+run: jump-if fell through</span>
+<span id="L122" class="LineNr">122 </span><span class="traceContains">+run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
+<span id="L123" class="LineNr">123 </span><span class="traceContains">+mem: storing 1 in location 123</span>
+<span id="L124" class="LineNr">124 </span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(scenario jump_if_on_address)</span>
+<span id="L126" class="LineNr">126 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L127" class="LineNr">127 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">999</span>
+<span id="L128" class="LineNr">128 </span>  jump-<span class="Normal">if</span> <span class="Constant">10</span>:&amp;:number<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L130" class="LineNr">130 </span>]
+<span id="L131" class="LineNr">131 </span><span class="traceContains">+run: jump-if {10: (&quot;address&quot; &quot;number&quot;)}, {1: &quot;offset&quot;}</span>
+<span id="L132" class="LineNr">132 </span><span class="traceContains">+run: jumping to <a href='010vm.cc.html#L33'>instruction</a> 3</span>
+<span id="L133" class="LineNr">133 </span><span class="traceAbsent">-run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
+<span id="L134" class="LineNr">134 </span><span class="traceAbsent">-mem: storing 1 in location 123</span>
+<span id="L135" class="LineNr">135 </span>
+<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L137" class="LineNr">137 </span>JUMP_UNLESS<span class="Delimiter">,</span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L139" class="LineNr">139 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;jump-unless&quot;</span><span class="Delimiter">,</span> JUMP_UNLESS<span class="Delimiter">);</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L141" class="LineNr">141 </span><span class="Normal">case</span> JUMP_UNLESS: <span class="Delimiter">{</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should get exactly two ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L144" class="LineNr">144 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L147" class="LineNr">147 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a boolean for its first ingredient, but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L148" class="LineNr">148 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Delimiter">}</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires a label or offset for its second ingredient, but '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L152" class="LineNr">152 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Delimiter">}</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L155" class="LineNr">155 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'jump' instructions write no products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L156" class="LineNr">156 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Delimiter">}</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Comment">// End JUMP_UNLESS Checks</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">}</span>
+<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L162" class="LineNr">162 </span><span class="Normal">case</span> JUMP_UNLESS: <span class="Delimiter">{</span>
+<span id="L163" class="LineNr">163 </span>  assert<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">1</span><span class="Delimiter">).</span>initialized<span class="Delimiter">);</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='023boolean.cc.html#L35'>scalar_ingredient</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L165" class="LineNr">165 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump-unless fell through&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L166" class="LineNr">166 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Delimiter">}</span>
+<span id="L168" class="LineNr">168 </span>  <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> += ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>+<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to <a href='010vm.cc.html#L33'>instruction</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Comment">// skip rest of this instruction</span>
+<span id="L171" class="LineNr">171 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L172" class="LineNr">172 </span>  fall_through_to_next_instruction =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
+<span id="L175" class="LineNr">175 </span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(scenario jump_unless)</span>
+<span id="L177" class="LineNr">177 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L178" class="LineNr">178 </span>  jump-unless <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L180" class="LineNr">180 </span>]
+<span id="L181" class="LineNr">181 </span><span class="traceContains">+run: jump-unless {0: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
+<span id="L182" class="LineNr">182 </span><span class="traceContains">+run: jumping to <a href='010vm.cc.html#L33'>instruction</a> 2</span>
+<span id="L183" class="LineNr">183 </span><span class="traceAbsent">-run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
+<span id="L184" class="LineNr">184 </span><span class="traceAbsent">-mem: storing 1 in location 123</span>
+<span id="L185" class="LineNr">185 </span>
+<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(scenario jump_unless_fallthrough)</span>
+<span id="L187" class="LineNr">187 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L188" class="LineNr">188 </span>  jump-unless <span class="Constant">999</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Constant">123</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L190" class="LineNr">190 </span>]
+<span id="L191" class="LineNr">191 </span><span class="traceContains">+run: jump-unless {999: &quot;literal&quot;}, {1: &quot;offset&quot;}</span>
+<span id="L192" class="LineNr">192 </span><span class="traceContains">+run: jump-unless fell through</span>
+<span id="L193" class="LineNr">193 </span><span class="traceContains">+run: {123: &quot;number&quot;} &lt;- copy {1: &quot;literal&quot;}</span>
+<span id="L194" class="LineNr">194 </span><span class="traceContains">+mem: storing 1 in location 123</span>
 </pre>
 </body>
 </html>
diff --git a/html/025compare.cc.html b/html/025compare.cc.html
index a7b77ddf..0bcdfc43 100644
--- a/html/025compare.cc.html
+++ b/html/025compare.cc.html
@@ -69,22 +69,22 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L8" class="LineNr">  8 </span><span class="Normal">case</span> EQUAL: <span class="Delimiter">{</span>
 <span id="L9" class="LineNr">  9 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L10" class="LineNr"> 10 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L10" class="LineNr"> 10 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L11" class="LineNr"> 11 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L12" class="LineNr"> 12 </span>  <span class="Delimiter">}</span>
 <span id="L13" class="LineNr"> 13 </span>  <span class="Normal">const</span> reagent&amp; exemplar = 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="L14" class="LineNr"> 14 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip exemplar</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L15" class="LineNr"> 15 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> exemplar<span class="Delimiter">)</span> &amp;&amp; !types_match<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L16" class="LineNr"> 16 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' expects ingredients to be all of the same type, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr"> 16 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' expects ingredients to be all of the same type, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L17" class="LineNr"> 17 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
 <span id="L18" class="LineNr"> 18 </span>    <span class="Delimiter">}</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Delimiter">}</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L22" class="LineNr"> 22 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Delimiter">}</span>
 <span id="L24" class="LineNr"> 24 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L25" class="LineNr"> 25 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L25" class="LineNr"> 25 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L26" class="LineNr"> 26 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L27" class="LineNr"> 27 </span>  <span class="Delimiter">}</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -92,465 +92,473 @@ if ('onhashchange' in window) {
 <span id="L30" class="LineNr"> 30 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L31" class="LineNr"> 31 </span><span class="Normal">case</span> EQUAL: <span class="Delimiter">{</span>
 <span id="L32" class="LineNr"> 32 </span>  vector&lt;<span class="Normal">double</span>&gt;&amp; exemplar = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip exemplar</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L35" class="LineNr"> 35 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!equal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> exemplar<span class="Delimiter">.</span>begin<span class="Delimiter">()))</span> <span class="Delimiter">{</span>
-<span id="L36" class="LineNr"> 36 </span>      result = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L35" class="LineNr"> 35 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L36" class="LineNr"> 36 </span>      result =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L37" class="LineNr"> 37 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L38" class="LineNr"> 38 </span>    <span class="Delimiter">}</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Delimiter">}</span>
-<span id="L40" class="LineNr"> 40 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L41" class="LineNr"> 41 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L42" class="LineNr"> 42 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">}</span>
-<span id="L44" class="LineNr"> 44 </span>
-<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(scenario equal)</span>
-<span id="L46" class="LineNr"> 46 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L47" class="LineNr"> 47 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L50" class="LineNr"> 50 </span>]
-<span id="L51" class="LineNr"> 51 </span><span class="traceContains">+mem: location 1 is 34</span>
-<span id="L52" class="LineNr"> 52 </span><span class="traceContains">+mem: location 2 is 33</span>
-<span id="L53" class="LineNr"> 53 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L54" class="LineNr"> 54 </span>
-<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(scenario equal_2)</span>
-<span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L57" class="LineNr"> 57 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L59" class="LineNr"> 59 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L60" class="LineNr"> 60 </span>]
-<span id="L61" class="LineNr"> 61 </span><span class="traceContains">+mem: location 1 is 34</span>
-<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+mem: location 2 is 34</span>
-<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L64" class="LineNr"> 64 </span>
-<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(scenario equal_multiple)</span>
-<span id="L66" class="LineNr"> 66 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L67" class="LineNr"> 67 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L68" class="LineNr"> 68 </span>]
-<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L70" class="LineNr"> 70 </span>
-<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(scenario equal_multiple_2)</span>
-<span id="L72" class="LineNr"> 72 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L73" class="LineNr"> 73 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L74" class="LineNr"> 74 </span>]
-<span id="L75" class="LineNr"> 75 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L76" class="LineNr"> 76 </span>
-<span id="L77" class="LineNr"> 77 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L78" class="LineNr"> 78 </span>NOT_EQUAL<span class="Delimiter">,</span>
-<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L80" class="LineNr"> 80 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;not-equal&quot;</span><span class="Delimiter">,</span> NOT_EQUAL<span class="Delimiter">);</span>
-<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Normal">case</span> NOT_EQUAL: <span class="Delimiter">{</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' needs two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L85" class="LineNr"> 85 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">const</span> reagent&amp; exemplar = 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="L88" class="LineNr"> 88 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> exemplar<span class="Delimiter">)</span> &amp;&amp; !types_match<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L89" class="LineNr"> 89 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' expects ingredients to be all of the same type, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L90" class="LineNr"> 90 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L94" class="LineNr"> 94 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!equal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> exemplar<span class="Delimiter">.</span>begin<span class="Delimiter">()))</span> <span class="Delimiter">{</span>
+<span id="L40" class="LineNr"> 40 </span>      result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L42" class="LineNr"> 42 </span>    <span class="Delimiter">}</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Delimiter">}</span>
+<span id="L44" class="LineNr"> 44 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L45" class="LineNr"> 45 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">}</span>
+<span id="L48" class="LineNr"> 48 </span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(scenario equal)</span>
+<span id="L50" class="LineNr"> 50 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L54" class="LineNr"> 54 </span>]
+<span id="L55" class="LineNr"> 55 </span><span class="traceContains">+mem: location 1 is 34</span>
+<span id="L56" class="LineNr"> 56 </span><span class="traceContains">+mem: location 2 is 33</span>
+<span id="L57" class="LineNr"> 57 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L58" class="LineNr"> 58 </span>
+<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(scenario equal_2)</span>
+<span id="L60" class="LineNr"> 60 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L61" class="LineNr"> 61 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L64" class="LineNr"> 64 </span>]
+<span id="L65" class="LineNr"> 65 </span><span class="traceContains">+mem: location 1 is 34</span>
+<span id="L66" class="LineNr"> 66 </span><span class="traceContains">+mem: location 2 is 34</span>
+<span id="L67" class="LineNr"> 67 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L68" class="LineNr"> 68 </span>
+<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">:(scenario equal_multiple)</span>
+<span id="L70" class="LineNr"> 70 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L72" class="LineNr"> 72 </span>]
+<span id="L73" class="LineNr"> 73 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L74" class="LineNr"> 74 </span>
+<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">:(scenario equal_multiple_2)</span>
+<span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L77" class="LineNr"> 77 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L78" class="LineNr"> 78 </span>]
+<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L80" class="LineNr"> 80 </span>
+<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L82" class="LineNr"> 82 </span>NOT_EQUAL<span class="Delimiter">,</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L84" class="LineNr"> 84 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;not-equal&quot;</span><span class="Delimiter">,</span> NOT_EQUAL<span class="Delimiter">);</span>
+<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Normal">case</span> NOT_EQUAL: <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' needs two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">const</span> reagent&amp; exemplar = 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="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> exemplar<span class="Delimiter">)</span> &amp;&amp; !types_match<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' expects ingredients to be all of the same type, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>    <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
 <span id="L95" class="LineNr"> 95 </span>  <span class="Delimiter">}</span>
-<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L97" class="LineNr"> 97 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L98" class="LineNr"> 98 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L99" class="LineNr"> 99 </span>  <span class="Delimiter">}</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Identifier">break</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="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L103" class="LineNr">103 </span><span class="Normal">case</span> NOT_EQUAL: <span class="Delimiter">{</span>
-<span id="L104" class="LineNr">104 </span>  vector&lt;<span class="Normal">double</span>&gt;&amp; exemplar = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L105" class="LineNr">105 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L106" class="LineNr">106 </span>  <span class="Normal">bool</span> equal_ingredients = equal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> exemplar<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>
-<span id="L107" class="LineNr">107 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>!equal_ingredients<span class="Delimiter">);</span>
-<span id="L108" class="LineNr">108 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L109" class="LineNr">109 </span><span class="Delimiter">}</span>
-<span id="L110" class="LineNr">110 </span>
-<span id="L111" class="LineNr">111 </span><span class="Delimiter">:(scenario not_equal)</span>
-<span id="L112" class="LineNr">112 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L113" class="LineNr">113 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L116" class="LineNr">116 </span>]
-<span id="L117" class="LineNr">117 </span><span class="traceContains">+mem: location 1 is 34</span>
-<span id="L118" class="LineNr">118 </span><span class="traceContains">+mem: location 2 is 33</span>
-<span id="L119" class="LineNr">119 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L120" class="LineNr">120 </span>
-<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(scenario not_equal_2)</span>
-<span id="L122" class="LineNr">122 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L123" class="LineNr">123 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L126" class="LineNr">126 </span>]
-<span id="L127" class="LineNr">127 </span><span class="traceContains">+mem: location 1 is 34</span>
-<span id="L128" class="LineNr">128 </span><span class="traceContains">+mem: location 2 is 34</span>
-<span id="L129" class="LineNr">129 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L132" class="LineNr">132 </span>GREATER_THAN<span class="Delimiter">,</span>
-<span id="L133" class="LineNr">133 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L134" class="LineNr">134 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;greater-than&quot;</span><span class="Delimiter">,</span> GREATER_THAN<span class="Delimiter">);</span>
-<span id="L135" class="LineNr">135 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L136" class="LineNr">136 </span><span class="Normal">case</span> GREATER_THAN: <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L138" class="LineNr">138 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L139" class="LineNr">139 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
-<span id="L141" class="LineNr">141 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L142" class="LineNr">142 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L144" class="LineNr">144 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>    <span class="Delimiter">}</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L148" class="LineNr">148 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L149" class="LineNr">149 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Delimiter">}</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L152" class="LineNr">152 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L153" class="LineNr">153 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L101" class="LineNr">101 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L102" class="LineNr">102 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Delimiter">}</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span><span class="Delimiter">}</span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L107" class="LineNr">107 </span><span class="Normal">case</span> NOT_EQUAL: <span class="Delimiter">{</span>
+<span id="L108" class="LineNr">108 </span>  vector&lt;<span class="Normal">double</span>&gt;&amp; exemplar = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L111" class="LineNr">111 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Normal">bool</span> equal_ingredients = equal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> exemplar<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>
+<span id="L115" class="LineNr">115 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>!equal_ingredients<span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario not_equal)</span>
+<span id="L120" class="LineNr">120 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L121" class="LineNr">121 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L124" class="LineNr">124 </span>]
+<span id="L125" class="LineNr">125 </span><span class="traceContains">+mem: location 1 is 34</span>
+<span id="L126" class="LineNr">126 </span><span class="traceContains">+mem: location 2 is 33</span>
+<span id="L127" class="LineNr">127 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L128" class="LineNr">128 </span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(scenario not_equal_2)</span>
+<span id="L130" class="LineNr">130 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L131" class="LineNr">131 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">not</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L134" class="LineNr">134 </span>]
+<span id="L135" class="LineNr">135 </span><span class="traceContains">+mem: location 1 is 34</span>
+<span id="L136" class="LineNr">136 </span><span class="traceContains">+mem: location 2 is 34</span>
+<span id="L137" class="LineNr">137 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L138" class="LineNr">138 </span>
+<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L140" class="LineNr">140 </span>GREATER_THAN<span class="Delimiter">,</span>
+<span id="L141" class="LineNr">141 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L142" class="LineNr">142 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;greater-than&quot;</span><span class="Delimiter">,</span> GREATER_THAN<span class="Delimiter">);</span>
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">case</span> GREATER_THAN: <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Delimiter">}</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L150" class="LineNr">150 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L152" class="LineNr">152 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span>    <span class="Delimiter">}</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
-<span id="L157" class="LineNr">157 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L158" class="LineNr">158 </span><span class="Normal">case</span> GREATER_THAN: <span class="Delimiter">{</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L161" class="LineNr">161 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>      result = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span>    <span class="Delimiter">}</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L166" class="LineNr">166 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L168" class="LineNr">168 </span><span class="Delimiter">}</span>
-<span id="L169" class="LineNr">169 </span>
-<span id="L170" class="LineNr">170 </span><span class="Delimiter">:(scenario greater_than)</span>
-<span id="L171" class="LineNr">171 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L172" class="LineNr">172 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L174" class="LineNr">174 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L175" class="LineNr">175 </span>]
-<span id="L176" class="LineNr">176 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L156" class="LineNr">156 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L157" class="LineNr">157 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Delimiter">}</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-than' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L161" class="LineNr">161 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Delimiter">}</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L166" class="LineNr">166 </span><span class="Normal">case</span> GREATER_THAN: <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L169" class="LineNr">169 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>      result =<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 class="Delimiter">}</span>
+<span id="L173" class="LineNr">173 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span>
-<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(scenario greater_than_2)</span>
+<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(scenario greater_than)</span>
 <span id="L179" class="LineNr">179 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L180" class="LineNr">180 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L181" class="LineNr">181 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L182" class="LineNr">182 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L183" class="LineNr">183 </span>]
-<span id="L184" class="LineNr">184 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L184" class="LineNr">184 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L185" class="LineNr">185 </span>
-<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(scenario greater_than_multiple)</span>
+<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(scenario greater_than_2)</span>
 <span id="L187" class="LineNr">187 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L188" class="LineNr">188 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L189" class="LineNr">189 </span>]
-<span id="L190" class="LineNr">190 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L191" class="LineNr">191 </span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(scenario greater_than_multiple_2)</span>
-<span id="L193" class="LineNr">193 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L194" class="LineNr">194 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L195" class="LineNr">195 </span>]
-<span id="L196" class="LineNr">196 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L197" class="LineNr">197 </span>
-<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L199" class="LineNr">199 </span>LESSER_THAN<span class="Delimiter">,</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L201" class="LineNr">201 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;lesser-than&quot;</span><span class="Delimiter">,</span> LESSER_THAN<span class="Delimiter">);</span>
-<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L203" class="LineNr">203 </span><span class="Normal">case</span> LESSER_THAN: <span class="Delimiter">{</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L205" class="LineNr">205 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L206" class="LineNr">206 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Delimiter">}</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L209" class="LineNr">209 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L211" class="LineNr">211 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>    <span class="Delimiter">}</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Delimiter">}</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L216" class="LineNr">216 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L219" class="LineNr">219 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L220" class="LineNr">220 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L191" class="LineNr">191 </span>]
+<span id="L192" class="LineNr">192 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L193" class="LineNr">193 </span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">:(scenario greater_than_multiple)</span>
+<span id="L195" class="LineNr">195 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L196" class="LineNr">196 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L197" class="LineNr">197 </span>]
+<span id="L198" class="LineNr">198 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(scenario greater_than_multiple_2)</span>
+<span id="L201" class="LineNr">201 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L202" class="LineNr">202 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-than <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L203" class="LineNr">203 </span>]
+<span id="L204" class="LineNr">204 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L205" class="LineNr">205 </span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L207" class="LineNr">207 </span>LESSER_THAN<span class="Delimiter">,</span>
+<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L209" class="LineNr">209 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;lesser-than&quot;</span><span class="Delimiter">,</span> LESSER_THAN<span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L211" class="LineNr">211 </span><span class="Normal">case</span> LESSER_THAN: <span class="Delimiter">{</span>
+<span id="L212" class="LineNr">212 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L214" class="LineNr">214 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Delimiter">}</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L217" class="LineNr">217 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L218" class="LineNr">218 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L219" class="LineNr">219 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span>    <span class="Delimiter">}</span>
 <span id="L221" class="LineNr">221 </span>  <span class="Delimiter">}</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L223" class="LineNr">223 </span><span class="Delimiter">}</span>
-<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L225" class="LineNr">225 </span><span class="Normal">case</span> LESSER_THAN: <span class="Delimiter">{</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L228" class="LineNr">228 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L229" class="LineNr">229 </span>      result = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L230" class="LineNr">230 </span>    <span class="Delimiter">}</span>
-<span id="L231" class="LineNr">231 </span>  <span class="Delimiter">}</span>
-<span id="L232" class="LineNr">232 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L233" class="LineNr">233 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(scenario lesser_than)</span>
-<span id="L238" class="LineNr">238 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L239" class="LineNr">239 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">32</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L242" class="LineNr">242 </span>]
-<span id="L243" class="LineNr">243 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L223" class="LineNr">223 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L224" class="LineNr">224 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Delimiter">}</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L227" class="LineNr">227 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-than' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Delimiter">}</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L233" class="LineNr">233 </span><span class="Normal">case</span> LESSER_THAN: <span class="Delimiter">{</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L236" class="LineNr">236 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L237" class="LineNr">237 </span>      result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L238" class="LineNr">238 </span>    <span class="Delimiter">}</span>
+<span id="L239" class="LineNr">239 </span>  <span class="Delimiter">}</span>
+<span id="L240" class="LineNr">240 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L241" class="LineNr">241 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L242" class="LineNr">242 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">}</span>
 <span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(scenario lesser_than_2)</span>
+<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(scenario lesser_than)</span>
 <span id="L246" class="LineNr">246 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L247" class="LineNr">247 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">32</span>
 <span id="L248" class="LineNr">248 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L249" class="LineNr">249 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L250" class="LineNr">250 </span>]
-<span id="L251" class="LineNr">251 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L251" class="LineNr">251 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L252" class="LineNr">252 </span>
-<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(scenario lesser_than_multiple)</span>
+<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(scenario lesser_than_2)</span>
 <span id="L254" class="LineNr">254 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L255" class="LineNr">255 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L256" class="LineNr">256 </span>]
-<span id="L257" class="LineNr">257 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L258" class="LineNr">258 </span>
-<span id="L259" class="LineNr">259 </span><span class="Delimiter">:(scenario lesser_than_multiple_2)</span>
-<span id="L260" class="LineNr">260 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L261" class="LineNr">261 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L262" class="LineNr">262 </span>]
-<span id="L263" class="LineNr">263 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L264" class="LineNr">264 </span>
-<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L266" class="LineNr">266 </span>GREATER_OR_EQUAL<span class="Delimiter">,</span>
-<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L268" class="LineNr">268 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;greater-or-equal&quot;</span><span class="Delimiter">,</span> GREATER_OR_EQUAL<span class="Delimiter">);</span>
-<span id="L269" class="LineNr">269 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L270" class="LineNr">270 </span><span class="Normal">case</span> GREATER_OR_EQUAL: <span class="Delimiter">{</span>
-<span id="L271" class="LineNr">271 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L272" class="LineNr">272 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L273" class="LineNr">273 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L274" class="LineNr">274 </span>  <span class="Delimiter">}</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L276" class="LineNr">276 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L277" class="LineNr">277 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L278" class="LineNr">278 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L279" class="LineNr">279 </span>    <span class="Delimiter">}</span>
-<span id="L280" class="LineNr">280 </span>  <span class="Delimiter">}</span>
-<span id="L281" class="LineNr">281 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L282" class="LineNr">282 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L283" class="LineNr">283 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Delimiter">}</span>
-<span id="L285" class="LineNr">285 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L286" class="LineNr">286 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L287" class="LineNr">287 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L255" class="LineNr">255 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L256" class="LineNr">256 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L258" class="LineNr">258 </span>]
+<span id="L259" class="LineNr">259 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L260" class="LineNr">260 </span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(scenario lesser_than_multiple)</span>
+<span id="L262" class="LineNr">262 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L263" class="LineNr">263 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">36</span>
+<span id="L264" class="LineNr">264 </span>]
+<span id="L265" class="LineNr">265 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L266" class="LineNr">266 </span>
+<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(scenario lesser_than_multiple_2)</span>
+<span id="L268" class="LineNr">268 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L269" class="LineNr">269 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-than <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L270" class="LineNr">270 </span>]
+<span id="L271" class="LineNr">271 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L272" class="LineNr">272 </span>
+<span id="L273" class="LineNr">273 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L274" class="LineNr">274 </span>GREATER_OR_EQUAL<span class="Delimiter">,</span>
+<span id="L275" class="LineNr">275 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L276" class="LineNr">276 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;greater-or-equal&quot;</span><span class="Delimiter">,</span> GREATER_OR_EQUAL<span class="Delimiter">);</span>
+<span id="L277" class="LineNr">277 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L278" class="LineNr">278 </span><span class="Normal">case</span> GREATER_OR_EQUAL: <span class="Delimiter">{</span>
+<span id="L279" class="LineNr">279 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L280" class="LineNr">280 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L281" class="LineNr">281 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L282" class="LineNr">282 </span>  <span class="Delimiter">}</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L284" class="LineNr">284 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L285" class="LineNr">285 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L286" class="LineNr">286 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L287" class="LineNr">287 </span>    <span class="Delimiter">}</span>
 <span id="L288" class="LineNr">288 </span>  <span class="Delimiter">}</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L290" class="LineNr">290 </span><span class="Delimiter">}</span>
-<span id="L291" class="LineNr">291 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L292" class="LineNr">292 </span><span class="Normal">case</span> GREATER_OR_EQUAL: <span class="Delimiter">{</span>
-<span id="L293" class="LineNr">293 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L295" class="LineNr">295 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L296" class="LineNr">296 </span>      result = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L297" class="LineNr">297 </span>    <span class="Delimiter">}</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Delimiter">}</span>
-<span id="L299" class="LineNr">299 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L300" class="LineNr">300 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L301" class="LineNr">301 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L302" class="LineNr">302 </span><span class="Delimiter">}</span>
-<span id="L303" class="LineNr">303 </span>
-<span id="L304" class="LineNr">304 </span><span class="Delimiter">:(scenario greater_or_equal)</span>
-<span id="L305" class="LineNr">305 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L306" class="LineNr">306 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L308" class="LineNr">308 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L309" class="LineNr">309 </span>]
-<span id="L310" class="LineNr">310 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L289" class="LineNr">289 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L290" class="LineNr">290 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L291" class="LineNr">291 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L292" class="LineNr">292 </span>  <span class="Delimiter">}</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L294" class="LineNr">294 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L295" class="LineNr">295 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L296" class="LineNr">296 </span>  <span class="Delimiter">}</span>
+<span id="L297" class="LineNr">297 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L298" class="LineNr">298 </span><span class="Delimiter">}</span>
+<span id="L299" class="LineNr">299 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L300" class="LineNr">300 </span><span class="Normal">case</span> GREATER_OR_EQUAL: <span class="Delimiter">{</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L302" class="LineNr">302 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L303" class="LineNr">303 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L304" class="LineNr">304 </span>      result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L305" class="LineNr">305 </span>    <span class="Delimiter">}</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Delimiter">}</span>
+<span id="L307" class="LineNr">307 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L308" class="LineNr">308 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L310" class="LineNr">310 </span><span class="Delimiter">}</span>
 <span id="L311" class="LineNr">311 </span>
-<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(scenario greater_or_equal_2)</span>
+<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(scenario greater_or_equal)</span>
 <span id="L313" class="LineNr">313 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L314" class="LineNr">314 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L316" class="LineNr">316 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L317" class="LineNr">317 </span>]
 <span id="L318" class="LineNr">318 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L319" class="LineNr">319 </span>
-<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(scenario greater_or_equal_3)</span>
+<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(scenario greater_or_equal_2)</span>
 <span id="L321" class="LineNr">321 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L322" class="LineNr">322 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L324" class="LineNr">324 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L325" class="LineNr">325 </span>]
-<span id="L326" class="LineNr">326 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L326" class="LineNr">326 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L327" class="LineNr">327 </span>
-<span id="L328" class="LineNr">328 </span><span class="Delimiter">:(scenario greater_or_equal_multiple)</span>
+<span id="L328" class="LineNr">328 </span><span class="Delimiter">:(scenario greater_or_equal_3)</span>
 <span id="L329" class="LineNr">329 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L330" class="LineNr">330 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L331" class="LineNr">331 </span>]
-<span id="L332" class="LineNr">332 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L333" class="LineNr">333 </span>
-<span id="L334" class="LineNr">334 </span><span class="Delimiter">:(scenario greater_or_equal_multiple_2)</span>
-<span id="L335" class="LineNr">335 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L336" class="LineNr">336 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L337" class="LineNr">337 </span>]
-<span id="L338" class="LineNr">338 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L339" class="LineNr">339 </span>
-<span id="L340" class="LineNr">340 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L341" class="LineNr">341 </span>LESSER_OR_EQUAL<span class="Delimiter">,</span>
-<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L343" class="LineNr">343 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;lesser-or-equal&quot;</span><span class="Delimiter">,</span> LESSER_OR_EQUAL<span class="Delimiter">);</span>
-<span id="L344" class="LineNr">344 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L345" class="LineNr">345 </span><span class="Normal">case</span> LESSER_OR_EQUAL: <span class="Delimiter">{</span>
-<span id="L346" class="LineNr">346 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L347" class="LineNr">347 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-or-equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L348" class="LineNr">348 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L349" class="LineNr">349 </span>  <span class="Delimiter">}</span>
-<span id="L350" class="LineNr">350 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L351" class="LineNr">351 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L352" class="LineNr">352 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-or-equal' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L353" class="LineNr">353 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L354" class="LineNr">354 </span>    <span class="Delimiter">}</span>
-<span id="L355" class="LineNr">355 </span>  <span class="Delimiter">}</span>
-<span id="L356" class="LineNr">356 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L357" class="LineNr">357 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L358" class="LineNr">358 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L359" class="LineNr">359 </span>  <span class="Delimiter">}</span>
-<span id="L360" class="LineNr">360 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L361" class="LineNr">361 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L362" class="LineNr">362 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L332" class="LineNr">332 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L333" class="LineNr">333 </span>]
+<span id="L334" class="LineNr">334 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L335" class="LineNr">335 </span>
+<span id="L336" class="LineNr">336 </span><span class="Delimiter">:(scenario greater_or_equal_multiple)</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">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L339" class="LineNr">339 </span>]
+<span id="L340" class="LineNr">340 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L341" class="LineNr">341 </span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(scenario greater_or_equal_multiple_2)</span>
+<span id="L343" class="LineNr">343 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L344" class="LineNr">344 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">36</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">36</span>
+<span id="L345" class="LineNr">345 </span>]
+<span id="L346" class="LineNr">346 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L347" class="LineNr">347 </span>
+<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L349" class="LineNr">349 </span>LESSER_OR_EQUAL<span class="Delimiter">,</span>
+<span id="L350" class="LineNr">350 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L351" class="LineNr">351 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;lesser-or-equal&quot;</span><span class="Delimiter">,</span> LESSER_OR_EQUAL<span class="Delimiter">);</span>
+<span id="L352" class="LineNr">352 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L353" class="LineNr">353 </span><span class="Normal">case</span> LESSER_OR_EQUAL: <span class="Delimiter">{</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L355" class="LineNr">355 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-or-equal' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L356" class="LineNr">356 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L357" class="LineNr">357 </span>  <span class="Delimiter">}</span>
+<span id="L358" class="LineNr">358 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L359" class="LineNr">359 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L360" class="LineNr">360 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'lesser-or-equal' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L361" class="LineNr">361 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L362" class="LineNr">362 </span>    <span class="Delimiter">}</span>
 <span id="L363" class="LineNr">363 </span>  <span class="Delimiter">}</span>
-<span id="L364" class="LineNr">364 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L365" class="LineNr">365 </span><span class="Delimiter">}</span>
-<span id="L366" class="LineNr">366 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L367" class="LineNr">367 </span><span class="Normal">case</span> LESSER_OR_EQUAL: <span class="Delimiter">{</span>
-<span id="L368" class="LineNr">368 </span>  <span class="Normal">bool</span> result = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L369" class="LineNr">369 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L370" class="LineNr">370 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L371" class="LineNr">371 </span>      result = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L372" class="LineNr">372 </span>    <span class="Delimiter">}</span>
-<span id="L373" class="LineNr">373 </span>  <span class="Delimiter">}</span>
-<span id="L374" class="LineNr">374 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L375" class="LineNr">375 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span>
-<span id="L379" class="LineNr">379 </span><span class="Delimiter">:(scenario lesser_or_equal)</span>
-<span id="L380" class="LineNr">380 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L381" class="LineNr">381 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">32</span>
-<span id="L382" class="LineNr">382 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L383" class="LineNr">383 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L384" class="LineNr">384 </span>]
-<span id="L385" class="LineNr">385 </span><span class="traceContains">+mem: storing 1 in location 3</span>
+<span id="L364" class="LineNr">364 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L365" class="LineNr">365 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L366" class="LineNr">366 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L367" class="LineNr">367 </span>  <span class="Delimiter">}</span>
+<span id="L368" class="LineNr">368 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L369" class="LineNr">369 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'greater-or-equal' should yield a boolean, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L370" class="LineNr">370 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L371" class="LineNr">371 </span>  <span class="Delimiter">}</span>
+<span id="L372" class="LineNr">372 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L373" class="LineNr">373 </span><span class="Delimiter">}</span>
+<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L375" class="LineNr">375 </span><span class="Normal">case</span> LESSER_OR_EQUAL: <span class="Delimiter">{</span>
+<span id="L376" class="LineNr">376 </span>  <span class="Normal">bool</span> result =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L377" class="LineNr">377 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L378" class="LineNr">378 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L379" class="LineNr">379 </span>      result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span>    <span class="Delimiter">}</span>
+<span id="L381" class="LineNr">381 </span>  <span class="Delimiter">}</span>
+<span id="L382" class="LineNr">382 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L383" class="LineNr">383 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L385" class="LineNr">385 </span><span class="Delimiter">}</span>
 <span id="L386" class="LineNr">386 </span>
-<span id="L387" class="LineNr">387 </span><span class="Delimiter">:(scenario lesser_or_equal_2)</span>
+<span id="L387" class="LineNr">387 </span><span class="Delimiter">:(scenario lesser_or_equal)</span>
 <span id="L388" class="LineNr">388 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L389" class="LineNr">389 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
+<span id="L389" class="LineNr">389 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">32</span>
 <span id="L390" class="LineNr">390 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L391" class="LineNr">391 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L392" class="LineNr">392 </span>]
 <span id="L393" class="LineNr">393 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L394" class="LineNr">394 </span>
-<span id="L395" class="LineNr">395 </span><span class="Delimiter">:(scenario lesser_or_equal_3)</span>
+<span id="L395" class="LineNr">395 </span><span class="Delimiter">:(scenario lesser_or_equal_2)</span>
 <span id="L396" class="LineNr">396 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L397" class="LineNr">397 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L397" class="LineNr">397 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L398" class="LineNr">398 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
 <span id="L399" class="LineNr">399 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
 <span id="L400" class="LineNr">400 </span>]
-<span id="L401" class="LineNr">401 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L401" class="LineNr">401 </span><span class="traceContains">+mem: storing 1 in location 3</span>
 <span id="L402" class="LineNr">402 </span>
-<span id="L403" class="LineNr">403 </span><span class="Delimiter">:(scenario lesser_or_equal_multiple)</span>
+<span id="L403" class="LineNr">403 </span><span class="Delimiter">:(scenario lesser_or_equal_3)</span>
 <span id="L404" class="LineNr">404 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L405" class="LineNr">405 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L406" class="LineNr">406 </span>]
-<span id="L407" class="LineNr">407 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L408" class="LineNr">408 </span>
-<span id="L409" class="LineNr">409 </span><span class="Delimiter">:(scenario lesser_or_equal_multiple_2)</span>
-<span id="L410" class="LineNr">410 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L411" class="LineNr">411 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L412" class="LineNr">412 </span>]
-<span id="L413" class="LineNr">413 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L414" class="LineNr">414 </span>
-<span id="L415" class="LineNr">415 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L416" class="LineNr">416 </span>MAX<span class="Delimiter">,</span>
-<span id="L417" class="LineNr">417 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L418" class="LineNr">418 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;max&quot;</span><span class="Delimiter">,</span> MAX<span class="Delimiter">);</span>
-<span id="L419" class="LineNr">419 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L420" class="LineNr">420 </span><span class="Normal">case</span> MAX: <span class="Delimiter">{</span>
-<span id="L421" class="LineNr">421 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L422" class="LineNr">422 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L423" class="LineNr">423 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L424" class="LineNr">424 </span>  <span class="Delimiter">}</span>
-<span id="L425" class="LineNr">425 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L426" class="LineNr">426 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L427" class="LineNr">427 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L428" class="LineNr">428 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L429" class="LineNr">429 </span>    <span class="Delimiter">}</span>
-<span id="L430" class="LineNr">430 </span>  <span class="Delimiter">}</span>
-<span id="L431" class="LineNr">431 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L432" class="LineNr">432 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L433" class="LineNr">433 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L434" class="LineNr">434 </span>  <span class="Delimiter">}</span>
-<span id="L435" class="LineNr">435 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L436" class="LineNr">436 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L437" class="LineNr">437 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
+<span id="L407" class="LineNr">407 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L408" class="LineNr">408 </span>]
+<span id="L409" class="LineNr">409 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L410" class="LineNr">410 </span>
+<span id="L411" class="LineNr">411 </span><span class="Delimiter">:(scenario lesser_or_equal_multiple)</span>
+<span id="L412" class="LineNr">412 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L413" class="LineNr">413 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L414" class="LineNr">414 </span>]
+<span id="L415" class="LineNr">415 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L416" class="LineNr">416 </span>
+<span id="L417" class="LineNr">417 </span><span class="Delimiter">:(scenario lesser_or_equal_multiple_2)</span>
+<span id="L418" class="LineNr">418 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L419" class="LineNr">419 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>lesser-<span class="Normal">or</span>-equal <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L420" class="LineNr">420 </span>]
+<span id="L421" class="LineNr">421 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L422" class="LineNr">422 </span>
+<span id="L423" class="LineNr">423 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L424" class="LineNr">424 </span>MAX<span class="Delimiter">,</span>
+<span id="L425" class="LineNr">425 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L426" class="LineNr">426 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;max&quot;</span><span class="Delimiter">,</span> MAX<span class="Delimiter">);</span>
+<span id="L427" class="LineNr">427 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L428" class="LineNr">428 </span><span class="Normal">case</span> MAX: <span class="Delimiter">{</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L430" class="LineNr">430 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L431" class="LineNr">431 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span>  <span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L434" class="LineNr">434 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L435" class="LineNr">435 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L436" class="LineNr">436 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L437" class="LineNr">437 </span>    <span class="Delimiter">}</span>
 <span id="L438" class="LineNr">438 </span>  <span class="Delimiter">}</span>
-<span id="L439" class="LineNr">439 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L440" class="LineNr">440 </span><span class="Delimiter">}</span>
-<span id="L441" class="LineNr">441 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L442" class="LineNr">442 </span><span class="Normal">case</span> MAX: <span class="Delimiter">{</span>
-<span id="L443" class="LineNr">443 </span>  <span class="Normal">int</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L444" class="LineNr">444 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L445" class="LineNr">445 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L446" class="LineNr">446 </span>      result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L447" class="LineNr">447 </span>    <span class="Delimiter">}</span>
-<span id="L448" class="LineNr">448 </span>  <span class="Delimiter">}</span>
-<span id="L449" class="LineNr">449 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L450" class="LineNr">450 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L451" class="LineNr">451 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L452" class="LineNr">452 </span><span class="Delimiter">}</span>
-<span id="L453" class="LineNr">453 </span>
-<span id="L454" class="LineNr">454 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L455" class="LineNr">455 </span>MIN<span class="Delimiter">,</span>
-<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L457" class="LineNr">457 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;min&quot;</span><span class="Delimiter">,</span> MIN<span class="Delimiter">);</span>
-<span id="L458" class="LineNr">458 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L459" class="LineNr">459 </span><span class="Normal">case</span> MIN: <span class="Delimiter">{</span>
-<span id="L460" class="LineNr">460 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L461" class="LineNr">461 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L462" class="LineNr">462 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L463" class="LineNr">463 </span>  <span class="Delimiter">}</span>
-<span id="L464" class="LineNr">464 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L465" class="LineNr">465 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L466" class="LineNr">466 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L467" class="LineNr">467 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
-<span id="L468" class="LineNr">468 </span>    <span class="Delimiter">}</span>
-<span id="L469" class="LineNr">469 </span>  <span class="Delimiter">}</span>
-<span id="L470" class="LineNr">470 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L471" class="LineNr">471 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L472" class="LineNr">472 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L473" class="LineNr">473 </span>  <span class="Delimiter">}</span>
-<span id="L474" class="LineNr">474 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L475" class="LineNr">475 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L476" class="LineNr">476 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L439" class="LineNr">439 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L440" class="LineNr">440 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L441" class="LineNr">441 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L442" class="LineNr">442 </span>  <span class="Delimiter">}</span>
+<span id="L443" class="LineNr">443 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L444" class="LineNr">444 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'max' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L445" class="LineNr">445 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L446" class="LineNr">446 </span>  <span class="Delimiter">}</span>
+<span id="L447" class="LineNr">447 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L448" class="LineNr">448 </span><span class="Delimiter">}</span>
+<span id="L449" class="LineNr">449 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L450" class="LineNr">450 </span><span class="Normal">case</span> MAX: <span class="Delimiter">{</span>
+<span id="L451" class="LineNr">451 </span>  <span class="Normal">int</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L452" class="LineNr">452 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L453" class="LineNr">453 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L454" class="LineNr">454 </span>      result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L455" class="LineNr">455 </span>    <span class="Delimiter">}</span>
+<span id="L456" class="LineNr">456 </span>  <span class="Delimiter">}</span>
+<span id="L457" class="LineNr">457 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L458" class="LineNr">458 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L459" class="LineNr">459 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L460" class="LineNr">460 </span><span class="Delimiter">}</span>
+<span id="L461" class="LineNr">461 </span>
+<span id="L462" class="LineNr">462 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L463" class="LineNr">463 </span>MIN<span class="Delimiter">,</span>
+<span id="L464" class="LineNr">464 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L465" class="LineNr">465 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;min&quot;</span><span class="Delimiter">,</span> MIN<span class="Delimiter">);</span>
+<span id="L466" class="LineNr">466 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L467" class="LineNr">467 </span><span class="Normal">case</span> MIN: <span class="Delimiter">{</span>
+<span id="L468" class="LineNr">468 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L469" class="LineNr">469 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' needs at least two ingredients to compare in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L470" class="LineNr">470 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L471" class="LineNr">471 </span>  <span class="Delimiter">}</span>
+<span id="L472" class="LineNr">472 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L473" class="LineNr">473 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L474" class="LineNr">474 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' can only compare numbers; got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L475" class="LineNr">475 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L476" class="LineNr">476 </span>    <span class="Delimiter">}</span>
 <span id="L477" class="LineNr">477 </span>  <span class="Delimiter">}</span>
-<span id="L478" class="LineNr">478 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L479" class="LineNr">479 </span><span class="Delimiter">}</span>
-<span id="L480" class="LineNr">480 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L481" class="LineNr">481 </span><span class="Normal">case</span> MIN: <span class="Delimiter">{</span>
-<span id="L482" class="LineNr">482 </span>  <span class="Normal">int</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L483" class="LineNr">483 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L484" class="LineNr">484 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L485" class="LineNr">485 </span>      result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L486" class="LineNr">486 </span>    <span class="Delimiter">}</span>
-<span id="L487" class="LineNr">487 </span>  <span class="Delimiter">}</span>
-<span id="L488" class="LineNr">488 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L489" class="LineNr">489 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L490" class="LineNr">490 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L491" class="LineNr">491 </span><span class="Delimiter">}</span>
+<span id="L478" class="LineNr">478 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L479" class="LineNr">479 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' yields exactly one product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L480" class="LineNr">480 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L481" class="LineNr">481 </span>  <span class="Delimiter">}</span>
+<span id="L482" class="LineNr">482 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; !is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L483" class="LineNr">483 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'min' should yield a number, 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L484" class="LineNr">484 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L485" class="LineNr">485 </span>  <span class="Delimiter">}</span>
+<span id="L486" class="LineNr">486 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L487" class="LineNr">487 </span><span class="Delimiter">}</span>
+<span id="L488" class="LineNr">488 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L489" class="LineNr">489 </span><span class="Normal">case</span> MIN: <span class="Delimiter">{</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Normal">int</span> result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/**/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L492" class="LineNr">492 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L493" class="LineNr">493 </span>      result = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L494" class="LineNr">494 </span>    <span class="Delimiter">}</span>
+<span id="L495" class="LineNr">495 </span>  <span class="Delimiter">}</span>
+<span id="L496" class="LineNr">496 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L497" class="LineNr">497 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L498" class="LineNr">498 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L499" class="LineNr">499 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/026call.cc.html b/html/026call.cc.html
index 92d57b36..b4e9eb8b 100644
--- a/html/026call.cc.html
+++ b/html/026call.cc.html
@@ -15,20 +15,19 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.muRecipe { color: #ff8700; }
 .SalientComment { color: #00ffff; }
-.CommentedCode { color: #6c6c6c; }
-.LineNr { color: #444444; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
 .Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.CommentedCode { color: #6c6c6c; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
 .traceContains { color: #008000; }
-.cSpecial { color: #008000; }
-.muRecipe { color: #ff8700; }
-.Comment { color: #9090ff; }
-.Comment a { color:#0000ee; text-decoration:underline; }
-.Constant { color: #00a0a0; }
-.Special { color: #c00000; }
 .Identifier { color: #c0a020; }
-.PreProc { color: #800080; }
+.cSpecial { color: #008000; }
 -->
 </style>
 
@@ -127,7 +126,7 @@ if ('onhashchange' in window) {
 <span id="L62" class="LineNr"> 62 </span>routine::routine<span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L64" class="LineNr"> 64 </span>    ++Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L65" class="LineNr"> 65 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new routine; incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L65" class="LineNr"> 65 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new routine; incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L66" class="LineNr"> 66 </span>    assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Delimiter">}</span>
 <span id="L68" class="LineNr"> 68 </span>  calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>r<span class="Delimiter">));</span>
@@ -145,13 +144,13 @@ if ('onhashchange' in window) {
 <span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(delete{} &quot;const instruction&amp; current_instruction()&quot;)</span>
 <span id="L81" class="LineNr"> 81 </span>
 <span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L83" class="LineNr"> 83 </span><span class="PreProc">#define current_call() Current_routine</span><span class="Delimiter">-&gt;</span><span class="PreProc">calls</span><span class="Delimiter">.</span><span class="PreProc">front()</span>
-<span id="L84" class="LineNr"> 84 </span><span class="PreProc">#define current_step_index() current_call()</span><span class="Delimiter">.</span><span class="PreProc">running_step_index</span>
-<span id="L85" class="LineNr"> 85 </span><span class="PreProc">#define currently_running_recipe() current_call()</span><span class="Delimiter">.</span><span class="PreProc">running_recipe</span>
-<span id="L86" class="LineNr"> 86 </span><span class="PreProc">#define current_recipe() get(Recipe</span><span class="Delimiter">,</span><span class="PreProc"> currently_running_recipe())</span>
-<span id="L87" class="LineNr"> 87 </span><span class="PreProc">#define current_recipe_name() current_recipe()</span><span class="Delimiter">.</span><span class="PreProc">name</span>
-<span id="L88" class="LineNr"> 88 </span><span class="PreProc">#define to_instruction(call) get(Recipe</span><span class="Delimiter">,</span><span class="PreProc"> (call)</span><span class="Delimiter">.</span><span class="PreProc">running_recipe)</span><span class="Delimiter">.</span><span class="PreProc">steps</span><span class="Delimiter">.</span><span class="PreProc">at((call)</span><span class="Delimiter">.</span><span class="PreProc">running_step_index)</span>
-<span id="L89" class="LineNr"> 89 </span><span class="PreProc">#define current_instruction() to_instruction(current_call())</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Comment">#define current_call() Current_routine-&gt;calls.front()</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Comment">#define current_step_index() current_call().running_step_index</span>
+<span id="L85" class="LineNr"> 85 </span><span class="Comment">#define currently_running_recipe() current_call().running_recipe</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Comment">#define current_recipe() get(Recipe, currently_running_recipe())</span>
+<span id="L87" class="LineNr"> 87 </span><span class="Comment">#define current_recipe_name() current_recipe().name</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Comment">#define to_instruction(call) get(Recipe, (call).running_recipe).steps.at((call).running_step_index)</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Comment">#define current_instruction() to_instruction(current_call())</span>
 <span id="L90" class="LineNr"> 90 </span>
 <span id="L91" class="LineNr"> 91 </span><span class="Comment">//: function versions for debugging</span>
 <span id="L92" class="LineNr"> 92 </span>
@@ -202,31 +201,31 @@ if ('onhashchange' in window) {
 <span id="L137" class="LineNr">137 </span><span class="Normal">void</span> dump_callstack<span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L138" class="LineNr">138 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Current_routine<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L139" class="LineNr">139 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>size<span class="Delimiter">()</span> &lt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = ++Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L141" class="LineNr">141 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  called from &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>*p<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = ++Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L141" class="LineNr">141 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  called from &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>*p<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L142" class="LineNr">142 </span><span class="Delimiter">}</span>
 <span id="L143" class="LineNr">143 </span>
 <span id="L144" class="LineNr">144 </span><span class="Delimiter">:(after &quot;Defined Recipe Checks&quot;)</span>
 <span id="L145" class="LineNr">145 </span><span class="Comment">// not a primitive; check that it's present in the book of recipes</span>
 <span id="L146" class="LineNr">146 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;undefined operation in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;undefined operation in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L148" class="LineNr">148 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
 <span id="L150" class="LineNr">150 </span><span class="Delimiter">:(replace{} &quot;default:&quot; following &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L151" class="LineNr">151 </span><span class="Normal">default</span>: <span class="Delimiter">{</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// error already raised in Checks above</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// error already raised in Checks above</span>
 <span id="L153" class="LineNr">153 </span>    <span class="Comment">// not a primitive; look up the book of recipes</span>
 <span id="L154" class="LineNr">154 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L155" class="LineNr">155 </span>      ++Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L156" class="LineNr">156 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L157" class="LineNr">157 </span>      assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
 <span id="L158" class="LineNr">158 </span>    <span class="Delimiter">}</span>
 <span id="L159" class="LineNr">159 </span>    <span class="Normal">const</span> call&amp; caller_frame = <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">();</span>
 <span id="L160" class="LineNr">160 </span>    Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span><a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>caller_frame<span class="Delimiter">).</span>operation<span class="Delimiter">));</span>
 <span id="L161" class="LineNr">161 </span>    finish_call_housekeeping<span class="Delimiter">(</span><a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>caller_frame<span class="Delimiter">),</span> ingredients<span class="Delimiter">);</span>
 <span id="L162" class="LineNr">162 </span>    <span class="Comment">// not done with caller</span>
-<span id="L163" class="LineNr">163 </span>    write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>    fall_through_to_next_instruction = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span>    write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L164" class="LineNr">164 </span>    fall_through_to_next_instruction =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L165" class="LineNr">165 </span>    <span class="Comment">// End Non-primitive Call(caller_frame)</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Delimiter">}</span>
 <span id="L167" class="LineNr">167 </span><span class="Delimiter">}</span>
@@ -268,7 +267,7 @@ if ('onhashchange' in window) {
 <span id="L203" class="LineNr">203 </span><span class="Normal">while</span> <span class="Delimiter">(</span><a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>steps<span class="Delimiter">()))</span> <span class="Delimiter">{</span>
 <span id="L204" class="LineNr">204 </span>  <span class="Comment">// Falling Through End Of Recipe</span>
 <span id="L205" class="LineNr">205 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;fall-through: exiting &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;; decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L206" class="LineNr">206 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;fall-through: exiting &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;; decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L207" class="LineNr">207 </span>    --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
 <span id="L208" class="LineNr">208 </span>    assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Delimiter">}</span>
@@ -289,11 +288,11 @@ if ('onhashchange' in window) {
 <span id="L224" class="LineNr">224 </span><span class="Delimiter">}</span>
 <span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L226" class="LineNr">226 </span><span class="Normal">case</span> _DUMP_CALL_STACK: <span class="Delimiter">{</span>
-<span id="L227" class="LineNr">227 </span>  <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
+<span id="L227" class="LineNr">227 </span>  dump<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
 <span id="L228" class="LineNr">228 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
 <span id="L230" class="LineNr">230 </span><span class="Delimiter">:(code)</span>
-<span id="L231" class="LineNr">231 </span><span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span><span class="Normal">const</span> call_stack&amp; calls<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L231" class="LineNr">231 </span><span class="Normal">void</span> dump<span class="Delimiter">(</span><span class="Normal">const</span> call_stack&amp; calls<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L232" class="LineNr">232 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = calls<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != calls<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
 <span id="L233" class="LineNr">233 </span>    cerr &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>running_step_index &lt;&lt; <span class="Constant">&quot; -- &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>*p<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
 <span id="L234" class="LineNr">234 </span><span class="Delimiter">}</span>
diff --git a/html/027call_ingredient.cc.html b/html/027call_ingredient.cc.html
index 60734e1d..525c90d2 100644
--- a/html/027call_ingredient.cc.html
+++ b/html/027call_ingredient.cc.html
@@ -106,7 +106,7 @@ if ('onhashchange' in window) {
 <span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L45" class="LineNr"> 45 </span><span class="Normal">case</span> NEXT_INGREDIENT: <span class="Delimiter">{</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr"> 47 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L47" class="LineNr"> 47 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'next-ingredient' didn't expect any ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L48" class="LineNr"> 48 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Delimiter">}</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -121,11 +121,11 @@ if ('onhashchange' in window) {
 <span id="L59" class="LineNr"> 59 </span>      <span class="Comment">// no ingredient types since the call might be implicit; assume ingredients are always strings</span>
 <span id="L60" class="LineNr"> 60 </span>      <span class="Comment">// todo: how to test this?</span>
 <span id="L61" class="LineNr"> 61 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>product<span class="Delimiter">))</span>
-<span id="L62" class="LineNr"> 62 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L62" class="LineNr"> 62 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;main: wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L63" class="LineNr"> 63 </span>    <span class="Delimiter">}</span>
 <span id="L64" class="LineNr"> 64 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span>
 <span id="L65" class="LineNr"> 65 </span>                              <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L66" class="LineNr"> 66 </span>      <a href='003trace.cc.html#L174'>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;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;': &quot;</span> &lt;&lt; <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>      <a href='003trace.cc.html#L197'>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;wrong type for ingredient '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;': &quot;</span> &lt;&lt; <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">).</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span>      <span class="Comment">// End next-ingredient Type Mismatch Error</span>
 <span id="L68" class="LineNr"> 68 </span>    <span class="Delimiter">}</span>
 <span id="L69" class="LineNr"> 69 </span>    products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
@@ -136,7 +136,7 @@ if ('onhashchange' in window) {
 <span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
 <span id="L75" class="LineNr"> 75 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L76" class="LineNr"> 76 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
-<span id="L77" class="LineNr"> 77 </span>      <a href='003trace.cc.html#L174'>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;no ingredient to save in '&quot;</span> &lt;&lt; current_instruction<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L77" class="LineNr"> 77 </span>      <a href='003trace.cc.html#L197'>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;no ingredient to <a href='003trace.cc.html#L142'>save</a> in '&quot;</span> &lt;&lt; current_instruction<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L78" class="LineNr"> 78 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L79" class="LineNr"> 79 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L80" class="LineNr"> 80 </span>    <span class="Comment">// pad the first product with sufficient zeros to match its type</span>
@@ -154,7 +154,7 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span><span class="muRecipe">def</span> f [
 <span id="L93" class="LineNr"> 93 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
 <span id="L94" class="LineNr"> 94 </span>]
-<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+error: f: no ingredient to save in '11:num'</span>
+<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+error: f: no ingredient to <a href='003trace.cc.html#L142'>save</a> in '11:num'</span>
 <span id="L96" class="LineNr"> 96 </span>
 <span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario rewind_ingredients)</span>
 <span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
@@ -186,71 +186,73 @@ if ('onhashchange' in window) {
 <span id="L124" class="LineNr">124 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
 <span id="L126" class="LineNr">126 </span>
-<span id="L127" class="LineNr">127 </span><span class="Delimiter">:(scenario ingredient)</span>
-<span id="L128" class="LineNr">128 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L129" class="LineNr">129 </span>  f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
-<span id="L130" class="LineNr">130 </span>]
-<span id="L131" class="LineNr">131 </span><span class="muRecipe">def</span> f [
-<span id="L132" class="LineNr">132 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span>  <span class="Comment"># consume second ingredient first</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># next-ingredient tries to scan past that</span>
-<span id="L134" class="LineNr">134 </span>]
-<span id="L135" class="LineNr">135 </span><span class="traceContains">+mem: storing 2 in location 12</span>
-<span id="L136" class="LineNr">136 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L137" class="LineNr">137 </span>
-<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L139" class="LineNr">139 </span>INGREDIENT<span class="Delimiter">,</span>
-<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L141" class="LineNr">141 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
-<span id="L142" class="LineNr">142 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;input&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L144" class="LineNr">144 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L146" class="LineNr">146 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L147" class="LineNr">147 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Delimiter">}</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L150" class="LineNr">150 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L151" class="LineNr">151 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Delimiter">}</span>
-<span id="L153" class="LineNr">153 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
-<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L156" class="LineNr">156 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L158" class="LineNr">158 </span>    <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L159" class="LineNr">159 </span>    products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
-<span id="L160" class="LineNr">160 </span>        <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
-<span id="L161" class="LineNr">161 </span>    assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
-<span id="L162" class="LineNr">162 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L163" class="LineNr">163 </span>    ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L166" class="LineNr">166 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>      products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L168" class="LineNr">168 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
-<span id="L169" class="LineNr">169 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L170" class="LineNr">170 </span>    <span class="Delimiter">}</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Delimiter">}</span>
-<span id="L172" class="LineNr">172 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
-<span id="L174" class="LineNr">174 </span>
-<span id="L175" class="LineNr">175 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
-<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(code)</span>
-<span id="L177" class="LineNr">177 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
-<span id="L179" class="LineNr">179 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
-<span id="L180" class="LineNr">180 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
-<span id="L181" class="LineNr">181 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
-<span id="L182" class="LineNr">182 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal
-<span id="L183" class="LineNr">183 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
-<span id="L184" class="LineNr">184 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
-<span id="L185" class="LineNr">185 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
-<span id="L186" class="LineNr">186 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal
-<span id="L187" class="LineNr">187 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
-<span id="L188" class="LineNr">188 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
-<span id="L189" class="LineNr">189 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Character_type_ordinal
-<span id="L190" class="LineNr">190 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
+<span id="L127" class="LineNr">127 </span><span class="Comment">//: another primitive: 'ingredient' for random access</span>
+<span id="L128" class="LineNr">128 </span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(scenario ingredient)</span>
+<span id="L130" class="LineNr">130 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L131" class="LineNr">131 </span>  f <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L132" class="LineNr">132 </span>]
+<span id="L133" class="LineNr">133 </span><span class="muRecipe">def</span> f [
+<span id="L134" class="LineNr">134 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>ingredient <span class="Constant">1</span>  <span class="Comment"># consume second ingredient first</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Constant">13</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># next-ingredient tries to scan past that</span>
+<span id="L136" class="LineNr">136 </span>]
+<span id="L137" class="LineNr">137 </span><span class="traceContains">+mem: storing 2 in location 12</span>
+<span id="L138" class="LineNr">138 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L139" class="LineNr">139 </span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L141" class="LineNr">141 </span>INGREDIENT<span class="Delimiter">,</span>
+<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L143" class="LineNr">143 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;ingredient&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
+<span id="L144" class="LineNr">144 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;input&quot;</span><span class="Delimiter">,</span> INGREDIENT<span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L146" class="LineNr">146 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L148" class="LineNr">148 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L149" class="LineNr">149 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Delimiter">}</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'ingredient' expects a literal ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L153" class="LineNr">153 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
+<span id="L157" class="LineNr">157 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L158" class="LineNr">158 </span><span class="Normal">case</span> INGREDIENT: <span class="Delimiter">{</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span>    <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L161" class="LineNr">161 </span>    products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>
+<span id="L162" class="LineNr">162 </span>        <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">));</span>
+<span id="L163" class="LineNr">163 </span>    assert<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">);</span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>  <span class="Comment">// push a new vector</span>
+<span id="L164" class="LineNr">164 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L165" class="LineNr">165 </span>    ++current_call<span class="Delimiter">().</span>next_ingredient_to_process<span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Delimiter">}</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L168" class="LineNr">168 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L169" class="LineNr">169 </span>      products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L170" class="LineNr">170 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// todo: will fail noisily if we try to read a compound value</span>
+<span id="L171" class="LineNr">171 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L172" class="LineNr">172 </span>    <span class="Delimiter">}</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Delimiter">}</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span><span class="Delimiter">}</span>
+<span id="L176" class="LineNr">176 </span>
+<span id="L177" class="LineNr">177 </span><span class="Comment">//: a particularly common array type is the text, or address:array:character</span>
+<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(code)</span>
+<span id="L179" class="LineNr">179 </span><span class="Normal">bool</span> <a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Comment">// End Preprocess is_mu_text(reagent x)</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type
+<span id="L182" class="LineNr">182 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom
+<span id="L183" class="LineNr">183 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
+<span id="L184" class="LineNr">184 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Address_type_ordinal
+<span id="L185" class="LineNr">185 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right
+<span id="L186" class="LineNr">186 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
+<span id="L187" class="LineNr">187 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom
+<span id="L188" class="LineNr">188 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal
+<span id="L189" class="LineNr">189 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right
+<span id="L190" class="LineNr">190 </span>      &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom
+<span id="L191" class="LineNr">191 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Character_type_ordinal
+<span id="L192" class="LineNr">192 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L193" class="LineNr">193 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/028call_return.cc.html b/html/028call_return.cc.html
index d55d8629..7c4d5593 100644
--- a/html/028call_return.cc.html
+++ b/html/028call_return.cc.html
@@ -100,7 +100,7 @@ if ('onhashchange' in window) {
 <span id="L38" class="LineNr"> 38 </span><span class="Normal">case</span> RETURN: <span class="Delimiter">{</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Comment">// Begin Return</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L41" class="LineNr"> 41 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L41" class="LineNr"> 41 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;: decrementing callstack depth from &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L42" class="LineNr"> 42 </span>    --Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
 <span id="L43" class="LineNr"> 43 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L44" class="LineNr"> 44 </span>      Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
@@ -111,9 +111,9 @@ if ('onhashchange' in window) {
 <span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// just in case 'main' returns a value, drop it for now</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L52" class="LineNr"> 52 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L52" class="LineNr"> 52 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Comment">// make return products available to caller</span>
-<span id="L54" class="LineNr"> 54 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
+<span id="L54" class="LineNr"> 54 </span>  copy<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
 <span id="L55" class="LineNr"> 55 </span>  <span class="Comment">// End Return</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of *caller* instruction</span>
 <span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
@@ -125,7 +125,7 @@ if ('onhashchange' in window) {
 <span id="L63" class="LineNr"> 63 </span><span class="Delimiter">:(code)</span>
 <span id="L64" class="LineNr"> 64 </span><span class="Normal">void</span> <a href='028call_return.cc.html#L64'>check_types_of_return_instructions</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L66" class="LineNr"> 66 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check types of return instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L68" class="LineNr"> 68 </span>    <span class="Normal">const</span> instruction&amp; caller_instruction = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L69" class="LineNr"> 69 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -137,7 +137,7 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>operation != RETURN<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L76" class="LineNr"> 76 </span>      <span class="Comment">// check types with the caller</span>
 <span id="L77" class="LineNr"> 77 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L78" class="LineNr"> 78 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few values returned from &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L79" class="LineNr"> 79 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L80" class="LineNr"> 80 </span>      <span class="Delimiter">}</span>
 <span id="L81" class="LineNr"> 81 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -145,8 +145,8 @@ if ('onhashchange' in window) {
 <span id="L83" class="LineNr"> 83 </span>        reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> rhs = caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L84" class="LineNr"> 84 </span>        <span class="Comment">// End Check RETURN Copy(lhs, rhs)</span>
 <span id="L85" class="LineNr"> 85 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>rhs<span class="Delimiter">,</span> lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L86" class="LineNr"> 86 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L86" class="LineNr"> 86 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; return_inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ingredient '&quot;</span> &lt;&lt; lhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; rhs<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L87" class="LineNr"> 87 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L88" class="LineNr"> 88 </span>          <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
 <span id="L89" class="LineNr"> 89 </span>        <span class="Delimiter">}</span>
 <span id="L90" class="LineNr"> 90 </span>      <span class="Delimiter">}</span>
@@ -156,16 +156,16 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr"> 94 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L95" class="LineNr"> 95 </span>          string_tree* tmp = property<span class="Delimiter">(</span>return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same-as-ingredient&quot;</span><span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp || !tmp<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L97" class="LineNr"> 97 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'same-as-ingredient' metadata should take exactly one value in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>return_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L98" class="LineNr"> 98 </span>            <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
 <span id="L99" class="LineNr"> 99 </span>          <span class="Delimiter">}</span>
 <span id="L100" class="LineNr">100 </span>          <span class="Normal">int</span> ingredient_index = to_integer<span class="Delimiter">(</span>tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
 <span id="L101" class="LineNr">101 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L102" class="LineNr">102 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L102" class="LineNr">102 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L103" class="LineNr">103 </span>            <span class="Identifier">goto</span> finish_return_check<span class="Delimiter">;</span>
 <span id="L104" class="LineNr">104 </span>          <span class="Delimiter">}</span>
 <span id="L105" class="LineNr">105 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &amp;&amp; !is_literal<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &amp;&amp; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name != caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L106" class="LineNr">106 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L106" class="LineNr">106 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>caller_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' should write to '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' rather than '&quot;</span> &lt;&lt; caller_instruction<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L107" class="LineNr">107 </span>          <span class="Delimiter">}</span>
 <span id="L108" class="LineNr">108 </span>        <span class="Delimiter">}</span>
 <span id="L109" class="LineNr">109 </span>      <span class="Delimiter">}</span>
@@ -175,7 +175,7 @@ if ('onhashchange' in window) {
 <span id="L113" class="LineNr">113 </span><span class="Delimiter">}</span>
 <span id="L114" class="LineNr">114 </span>
 <span id="L115" class="LineNr">115 </span><span class="Normal">bool</span> <a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L116" class="LineNr">116 </span>  <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L197'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Identifier">return</span> r &lt; <a href='010vm.cc.html#L198'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">;</span>
 <span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
 <span id="L118" class="LineNr">118 </span>
 <span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario return_type_mismatch)</span>
diff --git a/html/029tools.cc.html b/html/029tools.cc.html
index 826286d5..674fc50c 100644
--- a/html/029tools.cc.html
+++ b/html/029tools.cc.html
@@ -66,9 +66,9 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">  2 </span>
 <span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(scenario trace)</span>
 <span id="L4" class="LineNr">  4 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L5" class="LineNr">  5 </span>  <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [foo]<span class="Delimiter">,</span> [<span class="Normal">this</span> is a <a href='003trace.cc.html#L167'>trace</a> in Mu]
+<span id="L5" class="LineNr">  5 </span>  <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [foo]<span class="Delimiter">,</span> [<span class="Normal">this</span> is a <a href='003trace.cc.html#L190'>trace</a> in Mu]
 <span id="L6" class="LineNr">  6 </span>]
-<span id="L7" class="LineNr">  7 </span><span class="traceContains">+foo: this is a <a href='003trace.cc.html#L167'>trace</a> in Mu</span>
+<span id="L7" class="LineNr">  7 </span><span class="traceContains">+foo: this is a <a href='003trace.cc.html#L190'>trace</a> in Mu</span>
 <span id="L8" class="LineNr">  8 </span>
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L10" class="LineNr"> 10 </span>TRACE<span class="Delimiter">,</span>
@@ -77,15 +77,15 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L14" class="LineNr"> 14 </span><span class="Normal">case</span> TRACE: <span class="Delimiter">{</span>
 <span id="L15" class="LineNr"> 15 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt; <span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L16" class="LineNr"> 16 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'trace' takes three or more ingredients rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr"> 16 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'trace' takes three or more ingredients rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L17" class="LineNr"> 17 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Delimiter">}</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'trace' should be a number (depth), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'trace' should be a number (depth), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L21" class="LineNr"> 21 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Delimiter">}</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L24" class="LineNr"> 24 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'trace' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L24" class="LineNr"> 24 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'trace' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L25" class="LineNr"> 25 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Delimiter">}</span>
 <span id="L27" class="LineNr"> 27 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -99,7 +99,7 @@ if ('onhashchange' in window) {
 <span id="L35" class="LineNr"> 35 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">2</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
 <span id="L36" class="LineNr"> 36 </span>    out &lt;&lt; inspect<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>i<span class="Delimiter">),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Delimiter">}</span>
-<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span>depth<span class="Delimiter">,</span> label<span class="Delimiter">)</span> &lt;&lt; out<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span>depth<span class="Delimiter">,</span> label<span class="Delimiter">)</span> &lt;&lt; out<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L40" class="LineNr"> 40 </span><span class="Delimiter">}</span>
 <span id="L41" class="LineNr"> 41 </span>
@@ -120,7 +120,7 @@ if ('onhashchange' in window) {
 <span id="L56" class="LineNr"> 56 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
 <span id="L57" class="LineNr"> 57 </span>    out &lt;&lt; inspect<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>i<span class="Delimiter">),</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L58" class="LineNr"> 58 </span>  <span class="Delimiter">}</span>
-<span id="L59" class="LineNr"> 59 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;app&quot;</span><span class="Delimiter">)</span> &lt;&lt; out<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;app&quot;</span><span class="Delimiter">)</span> &lt;&lt; out<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L61" class="LineNr"> 61 </span><span class="Delimiter">}</span>
 <span id="L62" class="LineNr"> 62 </span>
@@ -166,7 +166,7 @@ if ('onhashchange' in window) {
 <span id="L102" class="LineNr">102 </span><span class="Delimiter">}</span>
 <span id="L103" class="LineNr">103 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L104" class="LineNr">104 </span><span class="Normal">case</span> HIDE_ERRORS: <span class="Delimiter">{</span>
-<span id="L105" class="LineNr">105 </span>  Hide_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  Hide_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L107" class="LineNr">107 </span><span class="Delimiter">}</span>
 <span id="L108" class="LineNr">108 </span>
@@ -180,7 +180,7 @@ if ('onhashchange' in window) {
 <span id="L116" class="LineNr">116 </span><span class="Delimiter">}</span>
 <span id="L117" class="LineNr">117 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L118" class="LineNr">118 </span><span class="Normal">case</span> SHOW_ERRORS: <span class="Delimiter">{</span>
-<span id="L119" class="LineNr">119 </span>  Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L119" class="LineNr">119 </span>  Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L120" class="LineNr">120 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L121" class="LineNr">121 </span><span class="Delimiter">}</span>
 <span id="L122" class="LineNr">122 </span>
@@ -211,10 +211,10 @@ if ('onhashchange' in window) {
 <span id="L147" class="LineNr">147 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L148" class="LineNr">148 </span><span class="Normal">case</span> _DUMP_TRACE: <span class="Delimiter">{</span>
 <span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L150" class="LineNr">150 </span>    <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L150" class="LineNr">150 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
 <span id="L152" class="LineNr">152 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L171'>DUMP</a><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>name<span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L194'>DUMP</a><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>name<span class="Delimiter">);</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
 <span id="L155" class="LineNr">155 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
@@ -243,7 +243,7 @@ if ('onhashchange' in window) {
 <span id="L179" class="LineNr">179 </span><span class="Delimiter">}</span>
 <span id="L180" class="LineNr">180 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L181" class="LineNr">181 </span><span class="Normal">case</span> _SAVE_TRACE: <span class="Delimiter">{</span>
-<span id="L182" class="LineNr">182 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>save</a><span class="Delimiter">();</span>
 <span id="L183" class="LineNr">183 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L184" class="LineNr">184 </span><span class="Delimiter">}</span>
 <span id="L185" class="LineNr">185 </span>
@@ -261,7 +261,7 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr">197 </span><span class="Normal">case</span> _PRINT: <span class="Delimiter">{</span>
 <span id="L198" class="LineNr">198 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L199" class="LineNr">199 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<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>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L200" class="LineNr">200 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;$print: &quot;</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>i<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L200" class="LineNr">200 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;$print: &quot;</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>i<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L201" class="LineNr">201 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!has_property<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>i<span class="Delimiter">),</span> <span class="Constant">&quot;newline&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L202" class="LineNr">202 </span>        cout &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>i<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L203" class="LineNr">203 </span>      <span class="Delimiter">}</span>
@@ -274,7 +274,7 @@ if ('onhashchange' in window) {
 <span id="L210" class="LineNr">210 </span>    <span class="Comment">// End $print Special-cases</span>
 <span id="L211" class="LineNr">211 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L212" class="LineNr">212 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L213" class="LineNr">213 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;$print: &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;$print: &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L214" class="LineNr">214 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>j &gt; <span class="Constant">0</span><span class="Delimiter">)</span> cout &lt;&lt; <span class="Constant">&quot; &quot;</span><span class="Delimiter">;</span>
 <span id="L215" class="LineNr">215 </span>        cout &lt;&lt; no_scientific<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span>j<span class="Delimiter">));</span>
 <span id="L216" class="LineNr">216 </span>      <span class="Delimiter">}</span>
@@ -305,11 +305,11 @@ if ('onhashchange' in window) {
 <span id="L241" class="LineNr">241 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L242" class="LineNr">242 </span><span class="Normal">case</span> _SYSTEM: <span class="Delimiter">{</span>
 <span id="L243" class="LineNr">243 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L244" class="LineNr">244 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$system' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L244" class="LineNr">244 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$system' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L245" class="LineNr">245 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L246" class="LineNr">246 </span>  <span class="Delimiter">}</span>
 <span id="L247" class="LineNr">247 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L248" class="LineNr">248 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient to '$system' must be a literal text, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L248" class="LineNr">248 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient to '$system' must be a literal text, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L249" class="LineNr">249 </span>  <span class="Delimiter">}</span>
 <span id="L250" class="LineNr">250 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L251" class="LineNr">251 </span><span class="Delimiter">}</span>
@@ -364,7 +364,7 @@ if ('onhashchange' in window) {
 <span id="L300" class="LineNr">300 </span><span class="Comment">//: set a variable from within Mu code</span>
 <span id="L301" class="LineNr">301 </span><span class="Comment">//: useful for selectively tracing or printing after some point</span>
 <span id="L302" class="LineNr">302 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L303" class="LineNr">303 </span><span class="Normal">bool</span> Foo = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L303" class="LineNr">303 </span><span class="Normal">bool</span> Foo =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L304" class="LineNr">304 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L305" class="LineNr">305 </span>_FOO<span class="Delimiter">,</span>
 <span id="L306" class="LineNr">306 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
@@ -375,7 +375,7 @@ if ('onhashchange' in window) {
 <span id="L311" class="LineNr">311 </span><span class="Delimiter">}</span>
 <span id="L312" class="LineNr">312 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L313" class="LineNr">313 </span><span class="Normal">case</span> _FOO: <span class="Delimiter">{</span>
-<span id="L314" class="LineNr">314 </span>  Foo = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L314" class="LineNr">314 </span>  Foo =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L315" class="LineNr">315 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L316" class="LineNr">316 </span><span class="Delimiter">}</span>
 </pre>
diff --git a/html/030container.cc.html b/html/030container.cc.html
index 5df040ec..1bd22074 100644
--- a/html/030container.cc.html
+++ b/html/030container.cc.html
@@ -16,7 +16,6 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .SalientComment { color: #00ffff; }
-.CommentedCode { color: #6c6c6c; }
 .muData { color: #ffff00; }
 .LineNr { color: #444444; }
 .Delimiter { color: #800080; }
@@ -68,9 +67,9 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">  2 </span>
 <span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L4" class="LineNr">  4 </span><span class="Comment">//: We'll use this container as a running example in scenarios below.</span>
-<span id="L5" class="LineNr">  5 </span><a href='010vm.cc.html#L124'>type_ordinal</a> point = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L5" class="LineNr">  5 </span><a href='010vm.cc.html#L125'>type_ordinal</a> point = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
 <span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
-<span id="L7" class="LineNr">  7 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">;</span>
+<span id="L7" class="LineNr">  7 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">;</span>
 <span id="L8" class="LineNr">  8 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>name = <span class="Constant">&quot;point&quot;</span><span class="Delimiter">;</span>
 <span id="L9" class="LineNr">  9 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;x:number&quot;</span><span class="Delimiter">));</span>
 <span id="L10" class="LineNr"> 10 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;y:number&quot;</span><span class="Delimiter">));</span>
@@ -79,8 +78,8 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr"> 13 </span><span class="Comment">//: numbers, no matter how large they are.</span>
 <span id="L14" class="LineNr"> 14 </span>
 <span id="L15" class="LineNr"> 15 </span><span class="Comment">//: Tests in this layer often explicitly set up memory before reading it as a</span>
-<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: container. Don't do this in general. I'm tagging exceptions with /unsafe to</span>
-<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: skip later checks.</span>
+<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: container. Don't do this in general. I'm tagging such cases with /unsafe;</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: they'll be exceptions to later checks.</span>
 <span id="L18" class="LineNr"> 18 </span><span class="Delimiter">:(scenario copy_multiple_locations)</span>
 <span id="L19" class="LineNr"> 19 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L20" class="LineNr"> 20 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
@@ -101,9 +100,9 @@ if ('onhashchange' in window) {
 <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L36" class="LineNr"> 36 </span><span class="Comment">// A more complex example container, containing another container as one of</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Comment">// its elements.</span>
-<span id="L38" class="LineNr"> 38 </span><a href='010vm.cc.html#L124'>type_ordinal</a> point_number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L38" class="LineNr"> 38 </span><a href='010vm.cc.html#L125'>type_ordinal</a> point_number = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
 <span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
-<span id="L40" class="LineNr"> 40 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">;</span>
+<span id="L40" class="LineNr"> 40 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">;</span>
 <span id="L41" class="LineNr"> 41 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>name = <span class="Constant">&quot;point-number&quot;</span><span class="Delimiter">;</span>
 <span id="L42" class="LineNr"> 42 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;xy:point&quot;</span><span class="Delimiter">));</span>
 <span id="L43" class="LineNr"> 43 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> point_number<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;z:number&quot;</span><span class="Delimiter">));</span>
@@ -158,827 +157,612 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span>]
 <span id="L93" class="LineNr"> 93 </span><span class="traceContains">+mem: storing 0 in location 7</span>
 <span id="L94" class="LineNr"> 94 </span>
-<span id="L95" class="LineNr"> 95 </span><span class="Comment">//: Can't put this in type_info because later layers will add support for more</span>
-<span id="L96" class="LineNr"> 96 </span><span class="Comment">//: complex type trees where metadata depends on *combinations* of types.</span>
-<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(before &quot;struct reagent&quot;)</span>
-<span id="L98" class="LineNr"> 98 </span><span class="Normal">struct</span> container_metadata <span class="Delimiter">{</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Normal">int</span> size<span class="Delimiter">;</span>
-<span id="L100" class="LineNr">100 </span>  vector&lt;<span class="Normal">int</span>&gt; offset<span class="Delimiter">;</span>  <span class="Comment">// not used by exclusive containers</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Comment">// End container_metadata Fields</span>
-<span id="L102" class="LineNr">102 </span>  container_metadata<span class="Delimiter">()</span> :size<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>    <span class="Comment">// End container_metadata Constructor</span>
-<span id="L104" class="LineNr">104 </span>  <span class="Delimiter">}</span>
-<span id="L105" class="LineNr">105 </span><span class="Delimiter">};</span>
-<span id="L106" class="LineNr">106 </span><span class="Delimiter">:(before &quot;End reagent Fields&quot;)</span>
-<span id="L107" class="LineNr">107 </span>container_metadata metadata<span class="Delimiter">;</span>  <span class="Comment">// can't be a pointer into Container_metadata because we keep changing the base storage when we save/restore snapshots</span>
-<span id="L108" class="LineNr">108 </span><span class="Delimiter">:(before &quot;End reagent Copy Operator&quot;)</span>
-<span id="L109" class="LineNr">109 </span>metadata = other<span class="Delimiter">.</span>metadata<span class="Delimiter">;</span>
-<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End reagent Copy Constructor&quot;)</span>
-<span id="L111" class="LineNr">111 </span>metadata = other<span class="Delimiter">.</span>metadata<span class="Delimiter">;</span>
-<span id="L112" class="LineNr">112 </span>
-<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L114" class="LineNr">114 </span><span class="Comment">// todo: switch to map after figuring out how to consistently compare type trees</span>
-<span id="L115" class="LineNr">115 </span>vector&lt;pair&lt;type_tree*<span class="Delimiter">,</span> container_metadata&gt; &gt; Container_metadata<span class="Delimiter">,</span> Container_metadata_snapshot<span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span><span class="Delimiter">:(before &quot;End save_snapshots&quot;)</span>
-<span id="L117" class="LineNr">117 </span>Container_metadata_snapshot = Container_metadata<span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(before &quot;End restore_snapshots&quot;)</span>
-<span id="L119" class="LineNr">119 </span><a href='030container.cc.html#L124'>restore_container_metadata</a><span class="Delimiter">();</span>
-<span id="L120" class="LineNr">120 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
-<span id="L121" class="LineNr">121 </span>atexit<span class="Delimiter">(</span><a href='030container.cc.html#L136'>clear_container_metadata</a><span class="Delimiter">);</span>
-<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(code)</span>
-<span id="L123" class="LineNr">123 </span><span class="Comment">// invariant: Container_metadata always contains a superset of Container_metadata_snapshot</span>
-<span id="L124" class="LineNr">124 </span><span class="Normal">void</span> <a href='030container.cc.html#L124'>restore_container_metadata</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L126" class="LineNr">126 </span>    assert<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">);</span>
-<span id="L127" class="LineNr">127 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata_snapshot<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L128" class="LineNr">128 </span>      assert<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first == Container_metadata_snapshot<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">);</span>
-<span id="L129" class="LineNr">129 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L130" class="LineNr">130 </span>    <span class="Delimiter">}</span>
-<span id="L131" class="LineNr">131 </span>    <span class="Normal">delete</span> Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">;</span>
-<span id="L132" class="LineNr">132 </span>    Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Delimiter">}</span>
-<span id="L134" class="LineNr">134 </span>  Container_metadata<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata_snapshot<span class="Delimiter">));</span>
-<span id="L135" class="LineNr">135 </span><span class="Delimiter">}</span>
-<span id="L136" class="LineNr">136 </span><span class="Normal">void</span> <a href='030container.cc.html#L136'>clear_container_metadata</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>  Container_metadata_snapshot<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L138" class="LineNr">138 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L139" class="LineNr">139 </span>    <span class="Normal">delete</span> Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span>    Container_metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L141" class="LineNr">141 </span>  <span class="Delimiter">}</span>
-<span id="L142" class="LineNr">142 </span>  Container_metadata<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">}</span>
-<span id="L144" class="LineNr">144 </span>
-<span id="L145" class="LineNr">145 </span><span class="Comment">//: do no work in size_of, simply lookup Container_metadata</span>
-<span id="L146" class="LineNr">146 </span>
-<span id="L147" class="LineNr">147 </span><span class="Delimiter">:(before &quot;End size_of(reagent r) Special-cases&quot;)</span>
-<span id="L148" class="LineNr">148 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">)</span> <span class="Identifier">return</span> r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End size_of(type) Special-cases&quot;)</span>
-<span id="L151" class="LineNr">151 </span><span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
-<span id="L152" class="LineNr">152 </span><span class="Comment">// Update base_type in size_of(type)</span>
-<span id="L153" class="LineNr">153 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L154" class="LineNr">154 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;no such type &quot;</span> &lt;&lt; base_type<span class="Delimiter">-&gt;</span>value &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
-<span id="L157" class="LineNr">157 </span>type_info t = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L158" class="LineNr">158 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L159" class="LineNr">159 </span>  <span class="Comment">// Compute size_of Container</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L161" class="LineNr">161 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown size for container type '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L162" class="LineNr">162 </span><span class="CommentedCode">//?     DUMP(&quot;&quot;);</span>
-<span id="L163" class="LineNr">163 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">:(before &quot;End size_of(type) Special-cases&quot;)</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// error value, but we'll raise it elsewhere</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;no such type &quot;</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>value &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L101" class="LineNr">101 </span><span class="Delimiter">}</span>
+<span id="L102" class="LineNr">102 </span>type_info t = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Comment">// size of a container is the sum of the sizes of its elements</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L107" class="LineNr">107 </span>    <span class="Comment">// todo: strengthen assertion to disallow mutual type recursion</span>
+<span id="L108" class="LineNr">108 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">-&gt;</span>value == type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;container &quot;</span> &lt;&lt; t<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; can't include itself as a member</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L110" class="LineNr">110 </span>      <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span>    <span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>    result += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">}</span>
+<span id="L116" class="LineNr">116 </span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(scenario stash_container)</span>
+<span id="L118" class="LineNr">118 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L119" class="LineNr">119 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>  <span class="Comment"># first</span>
+<span id="L120" class="LineNr">120 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L122" class="LineNr">122 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:point-number/<span class="Special">raw</span>
+<span id="L123" class="LineNr">123 </span>]
+<span id="L124" class="LineNr">124 </span><span class="traceContains">+app: foo: 34 35 36</span>
+<span id="L125" class="LineNr">125 </span>
+<span id="L126" class="LineNr">126 </span><span class="SalientComment">//:: To access elements of a container, use 'get'</span>
+<span id="L127" class="LineNr">127 </span><span class="Comment">//: 'get' takes a 'base' container and an 'offset' into it and returns the</span>
+<span id="L128" class="LineNr">128 </span><span class="Comment">//: appropriate element of the container value.</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span><span class="Delimiter">:(scenario get)</span>
+<span id="L131" class="LineNr">131 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L132" class="LineNr">132 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Constant">15</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
+<span id="L135" class="LineNr">135 </span>]
+<span id="L136" class="LineNr">136 </span><span class="traceContains">+mem: storing 35 in location 15</span>
+<span id="L137" class="LineNr">137 </span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L139" class="LineNr">139 </span>GET<span class="Delimiter">,</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L141" class="LineNr">141 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;get&quot;</span><span class="Delimiter">,</span> GET<span class="Delimiter">);</span>
+<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L143" class="LineNr">143 </span><span class="Normal">case</span> GET: <span class="Delimiter">{</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L146" class="LineNr">146 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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 class="Comment">// new copy for every invocation</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// Update GET base in Check</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L152" class="LineNr">152 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Delimiter">}</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Comment">// Update GET base_type in Check</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L157" class="LineNr">157 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Delimiter">}</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">const</span> reagent&amp; offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L161" class="LineNr">161 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>offset<span class="Delimiter">)</span> || !is_mu_scalar<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L162" class="LineNr">162 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'get' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L163" class="LineNr">163 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L164" class="LineNr">164 </span>  <span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">).</span>size<span class="Delimiter">;</span>
-<span id="L166" class="LineNr">166 </span><span class="Delimiter">}</span>
-<span id="L167" class="LineNr">167 </span>
-<span id="L168" class="LineNr">168 </span><span class="Comment">//: precompute Container_metadata before we need size_of</span>
-<span id="L169" class="LineNr">169 </span><span class="Comment">//: also store a copy in each reagent in each instruction in each recipe</span>
-<span id="L170" class="LineNr">170 </span>
-<span id="L171" class="LineNr">171 </span><span class="Delimiter">:(after &quot;End Type Modifying Transforms&quot;)</span>
-<span id="L172" class="LineNr">172 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>compute_container_sizes<span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L173" class="LineNr">173 </span><span class="Delimiter">:(code)</span>
-<span id="L174" class="LineNr">174 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L175" class="LineNr">175 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- compute container sizes for &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L179" class="LineNr">179 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;- compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L180" class="LineNr">180 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L181" class="LineNr">181 </span>      compute_container_sizes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
-<span id="L182" class="LineNr">182 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L183" class="LineNr">183 </span>      compute_container_sizes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot; in '&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
-<span id="L184" class="LineNr">184 </span>  <span class="Delimiter">}</span>
-<span id="L185" class="LineNr">185 </span><span class="Delimiter">}</span>
-<span id="L186" class="LineNr">186 </span>
-<span id="L187" class="LineNr">187 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L188" class="LineNr">188 </span>  expand_type_abbreviations<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L189" class="LineNr">189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> || is_dummy<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L190" class="LineNr">190 </span>  reagent rcopy = r<span class="Delimiter">;</span>
-<span id="L191" class="LineNr">191 </span>  <span class="Comment">// Compute Container Size(reagent rcopy)</span>
-<span id="L192" class="LineNr">192 </span>  set&lt;type_tree&gt; pending_metadata<span class="Delimiter">;</span>  <span class="Comment">// might actually be faster to just convert to string rather than compare type_tree directly; so far the difference is negligible</span>
-<span id="L193" class="LineNr">193 </span>  compute_container_sizes<span class="Delimiter">(</span>rcopy<span class="Delimiter">.</span>type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> rcopy<span class="Delimiter">.</span>type<span class="Delimiter">))</span>
-<span id="L195" class="LineNr">195 </span>    r<span class="Delimiter">.</span>metadata = get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> rcopy<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
-<span id="L197" class="LineNr">197 </span>
-<span id="L198" class="LineNr">198 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> set&lt;type_tree&gt;&amp; pending_metadata<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L199" class="LineNr">199 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L200" class="LineNr">200 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compute container sizes for &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L201" class="LineNr">201 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L202" class="LineNr">202 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>pending_metadata<span class="Delimiter">,</span> *type<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L203" class="LineNr">203 </span>  pending_metadata<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>*type<span class="Delimiter">);</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L205" class="LineNr">205 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>type<span class="Delimiter">)</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L208" class="LineNr">208 </span>    <span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span>
-<span id="L210" class="LineNr">210 </span>      compute_container_sizes<span class="Delimiter">(</span><a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span>type<span class="Delimiter">),</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L211" class="LineNr">211 </span>    <span class="Comment">// End compute_container_sizes Non-atom Special-cases</span>
-<span id="L212" class="LineNr">212 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Delimiter">}</span>
-<span id="L214" class="LineNr">214 </span>  assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
-<span id="L216" class="LineNr">216 </span>  type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span>
-<span id="L218" class="LineNr">218 </span>    compute_container_sizes<span class="Delimiter">(</span>info<span class="Delimiter">,</span> type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L219" class="LineNr">219 </span>  <span class="Comment">// End compute_container_sizes Atom Special-cases</span>
-<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
-<span id="L221" class="LineNr">221 </span>
-<span id="L222" class="LineNr">222 </span><span class="Normal">void</span> compute_container_sizes<span class="Delimiter">(</span><span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* full_type<span class="Delimiter">,</span> set&lt;type_tree&gt;&amp; pending_metadata<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>  assert<span class="Delimiter">(</span>container_info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">);</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Comment">// size of a container is the sum of the sizes of its element</span>
-<span id="L225" class="LineNr">225 </span>  <span class="Comment">// (So it can only contain arrays if they're static and include their</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Comment">// length in the type.)</span>
-<span id="L227" class="LineNr">227 </span>  container_metadata metadata<span class="Delimiter">;</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>container_info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L229" class="LineNr">229 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = container_info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L230" class="LineNr">230 </span>    <span class="Comment">// Compute Container Size(element, full_type)</span>
-<span id="L231" class="LineNr">231 </span>    compute_container_sizes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L232" class="LineNr">232 </span>    metadata<span class="Delimiter">.</span>offset<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">);</span>  <span class="Comment">// save previous size as offset</span>
-<span id="L233" class="LineNr">233 </span>    metadata<span class="Delimiter">.</span>size += size_of<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Delimiter">}</span>
-<span id="L235" class="LineNr">235 </span>  Container_metadata<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;type_tree*<span class="Delimiter">,</span> container_metadata&gt;<span class="Delimiter">(</span><span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*full_type<span class="Delimiter">),</span> metadata<span class="Delimiter">));</span>
-<span id="L236" class="LineNr">236 </span><span class="Delimiter">}</span>
-<span id="L237" class="LineNr">237 </span>
-<span id="L238" class="LineNr">238 </span><span class="Normal">const</span> type_tree* <a href='030container.cc.html#L238'>payload_type</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L239" class="LineNr">239 </span>  assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">const</span> type_tree* result = type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L241" class="LineNr">241 </span>  assert<span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L243" class="LineNr">243 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L244" class="LineNr">244 </span><span class="Delimiter">}</span>
-<span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span>container_metadata&amp; get<span class="Delimiter">(</span>vector&lt;pair&lt;type_tree*<span class="Delimiter">,</span> container_metadata&gt; &gt;&amp; all<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>all<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L248" class="LineNr">248 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030container.cc.html#L263'>matches</a><span class="Delimiter">(</span>all<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> key<span class="Delimiter">))</span>
-<span id="L249" class="LineNr">249 </span>      <span class="Identifier">return</span> all<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">;</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Delimiter">}</span>
-<span id="L251" class="LineNr">251 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown size for type '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>key<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L252" class="LineNr">252 </span>  exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L253" class="LineNr">253 </span><span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Normal">int</span> offset_value = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>    offset_value = to_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Delimiter">}</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Comment">// End update GET offset_value in Check</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &lt; <span class="Constant">0</span> || offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L171" class="LineNr">171 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset '&quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot;' for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L172" class="LineNr">172 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Delimiter">}</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L176" class="LineNr">176 </span>  <span class="Comment">// Update GET product in Check</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Normal">const</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset_value<span class="Delimiter">);</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L180" class="LineNr">180 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Delimiter">}</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L184" class="LineNr">184 </span><span class="Delimiter">}</span>
+<span id="L185" class="LineNr">185 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L186" class="LineNr">186 </span><span class="Normal">case</span> GET: <span class="Delimiter">{</span>
+<span id="L187" class="LineNr">187 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L188" class="LineNr">188 </span>  <span class="Comment">// Update GET base in Run</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L191" class="LineNr">191 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L192" class="LineNr">192 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Delimiter">}</span>
+<span id="L194" class="LineNr">194 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Comment">// Update GET base_type in Run</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Normal">int</span> offset = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &lt; <span class="Constant">0</span> || offset &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// copied from Check above</span>
+<span id="L198" class="LineNr">198 </span>  <span class="Normal">int</span> src = base_address<span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; offset<span class="Delimiter">;</span> ++i<span class="Delimiter">)</span>
+<span id="L200" class="LineNr">200 </span>    src += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L201" class="LineNr">201 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; src &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
+<span id="L203" class="LineNr">203 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset<span class="Delimiter">);</span>
+<span id="L204" class="LineNr">204 </span>  element<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>src<span class="Delimiter">);</span>
+<span id="L205" class="LineNr">205 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Comment">// Read element</span>
+<span id="L207" class="LineNr">207 </span>  products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">}</span>
+<span id="L210" class="LineNr">210 </span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(code)</span>
+<span id="L212" class="LineNr">212 </span><span class="Normal">const</span> reagent <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> offset_value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>  assert<span class="Delimiter">(</span>offset_value &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Comment">// Update base_type in element_type</span>
+<span id="L216" class="LineNr">216 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">));</span>
+<span id="L217" class="LineNr">217 </span>  assert<span class="Delimiter">(</span>!get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L218" class="LineNr">218 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L219" class="LineNr">219 </span>  assert<span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">);</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">))</span> <span class="Identifier">return</span> reagent<span class="Delimiter">();</span>  <span class="Comment">// error handled elsewhere</span>
+<span id="L221" class="LineNr">221 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset_value<span class="Delimiter">);</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Comment">// End element_type Special-cases</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Identifier">return</span> element<span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span><span class="Delimiter">}</span>
+<span id="L225" class="LineNr">225 </span>
+<span id="L226" class="LineNr">226 </span><span class="Delimiter">:(scenario get_handles_nested_container_elements)</span>
+<span id="L227" class="LineNr">227 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L228" class="LineNr">228 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Constant">15</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
+<span id="L232" class="LineNr">232 </span>]
+<span id="L233" class="LineNr">233 </span><span class="traceContains">+mem: storing 36 in location 15</span>
+<span id="L234" class="LineNr">234 </span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(scenario get_out_of_bounds)</span>
+<span id="L236" class="LineNr">236 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L237" class="LineNr">237 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L238" class="LineNr">238 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L239" class="LineNr">239 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L241" class="LineNr">241 </span>  get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">2:offset</span>  <span class="Comment"># point-number occupies 3 locations but has only 2 fields; out of bounds</span>
+<span id="L242" class="LineNr">242 </span>]
+<span id="L243" class="LineNr">243 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid offset '2' for 'point-number'</span>
+<span id="L244" class="LineNr">244 </span>
+<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(scenario get_out_of_bounds_2)</span>
+<span id="L246" class="LineNr">246 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L247" class="LineNr">247 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L248" class="LineNr">248 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L249" class="LineNr">249 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L250" class="LineNr">250 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L251" class="LineNr">251 </span>  get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">-1:offset</span>
+<span id="L252" class="LineNr">252 </span>]
+<span id="L253" class="LineNr">253 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid offset '-1' for 'point-number'</span>
 <span id="L254" class="LineNr">254 </span>
-<span id="L255" class="LineNr">255 </span><span class="Normal">bool</span> contains_key<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;pair&lt;type_tree*<span class="Delimiter">,</span> container_metadata&gt; &gt;&amp; all<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>all<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L257" class="LineNr">257 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030container.cc.html#L263'>matches</a><span class="Delimiter">(</span>all<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first<span class="Delimiter">,</span> key<span class="Delimiter">))</span>
-<span id="L258" class="LineNr">258 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Delimiter">}</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L261" class="LineNr">261 </span><span class="Delimiter">}</span>
-<span id="L262" class="LineNr">262 </span>
-<span id="L263" class="LineNr">263 </span><span class="Normal">bool</span> <a href='030container.cc.html#L263'>matches</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* a<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a == b<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!a || !b<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>atom != b<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> a<span class="Delimiter">-&gt;</span>value == b<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Identifier">return</span> <a href='030container.cc.html#L263'>matches</a><span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> b<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> &amp;&amp; <a href='030container.cc.html#L263'>matches</a><span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> b<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L269" class="LineNr">269 </span><span class="Delimiter">}</span>
-<span id="L270" class="LineNr">270 </span>
-<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(scenario stash_container)</span>
-<span id="L272" class="LineNr">272 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L273" class="LineNr">273 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>  <span class="Comment"># first</span>
-<span id="L274" class="LineNr">274 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L276" class="LineNr">276 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:point-number/<span class="Special">raw</span>
-<span id="L277" class="LineNr">277 </span>]
-<span id="L278" class="LineNr">278 </span><span class="traceContains">+app: foo: 34 35 36</span>
-<span id="L279" class="LineNr">279 </span>
-<span id="L280" class="LineNr">280 </span><span class="Comment">//: for the following unit tests we'll do the work of the transform by hand</span>
-<span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L283" class="LineNr">283 </span><span class="Normal">void</span> <a href='030container.cc.html#L283'>test_container_sizes</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L284" class="LineNr">284 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L285" class="LineNr">285 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L286" class="LineNr">286 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L287" class="LineNr">287 </span>  <span class="Comment">// scan</span>
-<span id="L288" class="LineNr">288 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Comment">// the reagent we scanned knows its size</span>
-<span id="L290" class="LineNr">290 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L291" class="LineNr">291 </span>  <span class="Comment">// the global table also knows its size</span>
-<span id="L292" class="LineNr">292 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L293" class="LineNr">293 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L294" class="LineNr">294 </span><span class="Delimiter">}</span>
-<span id="L295" class="LineNr">295 </span>
-<span id="L296" class="LineNr">296 </span><span class="Normal">void</span> <a href='030container.cc.html#L296'>test_container_sizes_through_aliases</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L297" class="LineNr">297 </span>  <span class="Comment">// a new alias for a container</span>
-<span id="L298" class="LineNr">298 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;pt&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;point&quot;</span><span class="Delimiter">));</span>
-<span id="L299" class="LineNr">299 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:pt&quot;</span><span class="Delimiter">);</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Comment">// scan</span>
-<span id="L301" class="LineNr">301 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L302" class="LineNr">302 </span>  <span class="Comment">// the reagent we scanned knows its size</span>
-<span id="L303" class="LineNr">303 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L304" class="LineNr">304 </span>  <span class="Comment">// the global table also knows its size</span>
-<span id="L305" class="LineNr">305 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L306" class="LineNr">306 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L307" class="LineNr">307 </span><span class="Delimiter">}</span>
-<span id="L308" class="LineNr">308 </span>
-<span id="L309" class="LineNr">309 </span><span class="Normal">void</span> <a href='030container.cc.html#L309'>test_container_sizes_nested</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L310" class="LineNr">310 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L311" class="LineNr">311 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:point-number&quot;</span><span class="Delimiter">);</span>
-<span id="L312" class="LineNr">312 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L313" class="LineNr">313 </span>  <span class="Comment">// scan</span>
-<span id="L314" class="LineNr">314 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Comment">// the reagent we scanned knows its size</span>
-<span id="L316" class="LineNr">316 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L317" class="LineNr">317 </span>  <span class="Comment">// the global table also knows its size</span>
-<span id="L318" class="LineNr">318 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L319" class="LineNr">319 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> r<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L320" class="LineNr">320 </span><span class="Delimiter">}</span>
-<span id="L321" class="LineNr">321 </span>
-<span id="L322" class="LineNr">322 </span><span class="Normal">void</span> <a href='030container.cc.html#L322'>test_container_sizes_recursive</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Comment">// define a container containing an address to itself</span>
-<span id="L324" class="LineNr">324 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L325" class="LineNr">325 </span>      <span class="Constant">&quot;  x:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L326" class="LineNr">326 </span>      <span class="Constant">&quot;  y:<a href='043space.cc.html#L80'>address</a>:foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L327" class="LineNr">327 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L328" class="LineNr">328 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:foo&quot;</span><span class="Delimiter">);</span>
-<span id="L329" class="LineNr">329 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L330" class="LineNr">330 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L331" class="LineNr">331 </span><span class="Delimiter">}</span>
-<span id="L332" class="LineNr">332 </span>
-<span id="L333" class="LineNr">333 </span><span class="Normal">void</span> <a href='030container.cc.html#L333'>test_container_sizes_from_address</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L334" class="LineNr">334 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L335" class="LineNr">335 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L336" class="LineNr">336 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Comment">// scanning an address to the container precomputes the size of the container</span>
-<span id="L338" class="LineNr">338 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:point&quot;</span><span class="Delimiter">);</span>
-<span id="L339" class="LineNr">339 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L340" class="LineNr">340 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L341" class="LineNr">341 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
-<span id="L343" class="LineNr">343 </span>
-<span id="L344" class="LineNr">344 </span><span class="SalientComment">//:: To access elements of a container, use 'get'</span>
-<span id="L345" class="LineNr">345 </span><span class="Comment">//: 'get' takes a 'base' container and an 'offset' into it and returns the</span>
-<span id="L346" class="LineNr">346 </span><span class="Comment">//: appropriate element of the container value.</span>
-<span id="L347" class="LineNr">347 </span>
-<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(scenario get)</span>
-<span id="L349" class="LineNr">349 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L350" class="LineNr">350 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L351" class="LineNr">351 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L352" class="LineNr">352 </span>  <span class="Constant">15</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
-<span id="L353" class="LineNr">353 </span>]
-<span id="L354" class="LineNr">354 </span><span class="traceContains">+mem: storing 35 in location 15</span>
-<span id="L355" class="LineNr">355 </span>
-<span id="L356" class="LineNr">356 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L357" class="LineNr">357 </span>GET<span class="Delimiter">,</span>
-<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L359" class="LineNr">359 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;get&quot;</span><span class="Delimiter">,</span> GET<span class="Delimiter">);</span>
-<span id="L360" class="LineNr">360 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L361" class="LineNr">361 </span><span class="Normal">case</span> GET: <span class="Delimiter">{</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L363" class="LineNr">363 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L364" class="LineNr">364 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L365" class="LineNr">365 </span>  <span class="Delimiter">}</span>
-<span id="L366" class="LineNr">366 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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 class="Comment">// new copy for every invocation</span>
-<span id="L367" class="LineNr">367 </span>  <span class="Comment">// Update GET base in Check</span>
-<span id="L368" class="LineNr">368 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L369" class="LineNr">369 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L370" class="LineNr">370 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L371" class="LineNr">371 </span>  <span class="Delimiter">}</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L373" class="LineNr">373 </span>  <span class="Comment">// Update GET base_type in Check</span>
-<span id="L374" class="LineNr">374 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L375" class="LineNr">375 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L376" class="LineNr">376 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L377" class="LineNr">377 </span>  <span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span>  <span class="Normal">const</span> reagent&amp; offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L379" class="LineNr">379 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>offset<span class="Delimiter">)</span> || !is_mu_scalar<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L380" class="LineNr">380 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'get' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L381" class="LineNr">381 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L382" class="LineNr">382 </span>  <span class="Delimiter">}</span>
-<span id="L383" class="LineNr">383 </span>  <span class="Normal">int</span> offset_value = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L384" class="LineNr">384 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L385" class="LineNr">385 </span>    offset_value = to_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L386" class="LineNr">386 </span>  <span class="Delimiter">}</span>
-<span id="L387" class="LineNr">387 </span>  <span class="Comment">// End update GET offset_value in Check</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &lt; <span class="Constant">0</span> || offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L389" class="LineNr">389 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset '&quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot;' for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L390" class="LineNr">390 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L391" class="LineNr">391 </span>  <span class="Delimiter">}</span>
-<span id="L392" class="LineNr">392 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L393" class="LineNr">393 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L394" class="LineNr">394 </span>  <span class="Comment">// Update GET product in Check</span>
-<span id="L395" class="LineNr">395 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Normal">const</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset_value<span class="Delimiter">);</span>
-<span id="L397" class="LineNr">397 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L398" class="LineNr">398 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L399" class="LineNr">399 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Delimiter">}</span>
-<span id="L401" class="LineNr">401 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L402" class="LineNr">402 </span><span class="Delimiter">}</span>
-<span id="L403" class="LineNr">403 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L404" class="LineNr">404 </span><span class="Normal">case</span> GET: <span class="Delimiter">{</span>
-<span id="L405" class="LineNr">405 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L406" class="LineNr">406 </span>  <span class="Comment">// Update GET base in Run</span>
-<span id="L407" class="LineNr">407 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L408" class="LineNr">408 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L409" class="LineNr">409 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L410" class="LineNr">410 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L411" class="LineNr">411 </span>  <span class="Delimiter">}</span>
-<span id="L412" class="LineNr">412 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L413" class="LineNr">413 </span>  <span class="Comment">// Update GET base_type in Run</span>
-<span id="L414" class="LineNr">414 </span>  <span class="Normal">int</span> offset = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L415" class="LineNr">415 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &lt; <span class="Constant">0</span> || offset &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// copied from Check above</span>
-<span id="L416" class="LineNr">416 </span>  assert<span class="Delimiter">(</span>base<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">);</span>
-<span id="L417" class="LineNr">417 </span>  <span class="Normal">int</span> src = base_address + base<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>offset<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">);</span>
-<span id="L418" class="LineNr">418 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; src &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L419" class="LineNr">419 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
-<span id="L420" class="LineNr">420 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset<span class="Delimiter">);</span>
-<span id="L421" class="LineNr">421 </span>  element<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>src<span class="Delimiter">);</span>
-<span id="L422" class="LineNr">422 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L423" class="LineNr">423 </span>  <span class="Comment">// Read element</span>
-<span id="L424" class="LineNr">424 </span>  products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
-<span id="L425" class="LineNr">425 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L426" class="LineNr">426 </span><span class="Delimiter">}</span>
-<span id="L427" class="LineNr">427 </span>
-<span id="L428" class="LineNr">428 </span><span class="Delimiter">:(code)</span>
-<span id="L429" class="LineNr">429 </span><span class="Normal">const</span> reagent <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> offset_value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L430" class="LineNr">430 </span>  assert<span class="Delimiter">(</span>offset_value &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L431" class="LineNr">431 </span>  <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
-<span id="L432" class="LineNr">432 </span>  <span class="Comment">// Update base_type in element_type</span>
-<span id="L433" class="LineNr">433 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">));</span>
-<span id="L434" class="LineNr">434 </span>  assert<span class="Delimiter">(</span>!get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L435" class="LineNr">435 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L436" class="LineNr">436 </span>  assert<span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">);</span>
-<span id="L437" class="LineNr">437 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">))</span> <span class="Identifier">return</span> reagent<span class="Delimiter">();</span>  <span class="Comment">// error handled elsewhere</span>
-<span id="L438" class="LineNr">438 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset_value<span class="Delimiter">);</span>
-<span id="L439" class="LineNr">439 </span>  <span class="Comment">// End element_type Special-cases</span>
-<span id="L440" class="LineNr">440 </span>  <span class="Identifier">return</span> element<span class="Delimiter">;</span>
-<span id="L441" class="LineNr">441 </span><span class="Delimiter">}</span>
-<span id="L442" class="LineNr">442 </span>
-<span id="L443" class="LineNr">443 </span><span class="Delimiter">:(scenario get_handles_nested_container_elements)</span>
-<span id="L444" class="LineNr">444 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L445" class="LineNr">445 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L446" class="LineNr">446 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L447" class="LineNr">447 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L448" class="LineNr">448 </span>  <span class="Constant">15</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
-<span id="L449" class="LineNr">449 </span>]
-<span id="L450" class="LineNr">450 </span><span class="traceContains">+mem: storing 36 in location 15</span>
-<span id="L451" class="LineNr">451 </span>
-<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(scenario get_out_of_bounds)</span>
-<span id="L453" class="LineNr">453 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L454" class="LineNr">454 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L455" class="LineNr">455 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L456" class="LineNr">456 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L457" class="LineNr">457 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L458" class="LineNr">458 </span>  get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">2:offset</span>  <span class="Comment"># point-number occupies 3 locations but has only 2 fields; out of bounds</span>
-<span id="L459" class="LineNr">459 </span>]
-<span id="L460" class="LineNr">460 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid offset '2' for 'point-number'</span>
-<span id="L461" class="LineNr">461 </span>
-<span id="L462" class="LineNr">462 </span><span class="Delimiter">:(scenario get_out_of_bounds_2)</span>
-<span id="L463" class="LineNr">463 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L464" class="LineNr">464 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L465" class="LineNr">465 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L466" class="LineNr">466 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L467" class="LineNr">467 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L468" class="LineNr">468 </span>  get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">-1:offset</span>
-<span id="L469" class="LineNr">469 </span>]
-<span id="L470" class="LineNr">470 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid offset '-1' for 'point-number'</span>
-<span id="L471" class="LineNr">471 </span>
-<span id="L472" class="LineNr">472 </span><span class="Delimiter">:(scenario get_product_type_mismatch)</span>
-<span id="L473" class="LineNr">473 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L474" class="LineNr">474 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L475" class="LineNr">475 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L476" class="LineNr">476 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L477" class="LineNr">477 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L478" class="LineNr">478 </span>  <span class="Constant">15</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L479" class="LineNr">479 </span>]
-<span id="L480" class="LineNr">480 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'get 12:point-number/raw, 1:offset' should write to number but '15' has type (address number)</span>
-<span id="L481" class="LineNr">481 </span>
-<span id="L482" class="LineNr">482 </span><span class="Comment">//: we might want to call 'get' without saving the results, say in a sandbox</span>
-<span id="L483" class="LineNr">483 </span>
-<span id="L484" class="LineNr">484 </span><span class="Delimiter">:(scenario get_without_product)</span>
-<span id="L485" class="LineNr">485 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L486" class="LineNr">486 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L487" class="LineNr">487 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L488" class="LineNr">488 </span>  get <span class="Constant">12</span>:point/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
-<span id="L489" class="LineNr">489 </span>]
-<span id="L490" class="LineNr">490 </span><span class="Comment"># just don't die</span>
-<span id="L491" class="LineNr">491 </span>
-<span id="L492" class="LineNr">492 </span><span class="SalientComment">//:: To write to elements of containers, use 'put'.</span>
-<span id="L493" class="LineNr">493 </span>
-<span id="L494" class="LineNr">494 </span><span class="Delimiter">:(scenario put)</span>
-<span id="L495" class="LineNr">495 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L496" class="LineNr">496 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L497" class="LineNr">497 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L498" class="LineNr">498 </span>  $clear-trace
-<span id="L499" class="LineNr">499 </span>  <span class="Constant">12</span>:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">12</span>:point<span class="Delimiter">,</span> <span class="Constant">1:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L500" class="LineNr">500 </span>]
-<span id="L501" class="LineNr">501 </span><span class="traceContains">+mem: storing 36 in location 13</span>
-<span id="L502" class="LineNr">502 </span><span class="traceAbsent">-mem: storing 34 in location 12</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>PUT<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>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;put&quot;</span><span class="Delimiter">,</span> PUT<span class="Delimiter">);</span>
-<span id="L508" class="LineNr">508 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L509" class="LineNr">509 </span><span class="Normal">case</span> PUT: <span class="Delimiter">{</span>
-<span id="L510" class="LineNr">510 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L511" class="LineNr">511 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put' expects exactly 3 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L512" class="LineNr">512 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L513" class="LineNr">513 </span>  <span class="Delimiter">}</span>
-<span id="L514" class="LineNr">514 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L515" class="LineNr">515 </span>  <span class="Comment">// Update PUT base in Check</span>
-<span id="L516" class="LineNr">516 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L517" class="LineNr">517 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'put' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L518" class="LineNr">518 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L519" class="LineNr">519 </span>  <span class="Delimiter">}</span>
-<span id="L520" class="LineNr">520 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L521" class="LineNr">521 </span>  <span class="Comment">// Update PUT base_type in Check</span>
-<span id="L522" class="LineNr">522 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L523" class="LineNr">523 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'put' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L524" class="LineNr">524 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L525" class="LineNr">525 </span>  <span class="Delimiter">}</span>
-<span id="L526" class="LineNr">526 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L527" class="LineNr">527 </span>  <span class="Comment">// Update PUT offset in Check</span>
-<span id="L528" class="LineNr">528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>offset<span class="Delimiter">)</span> || !is_mu_scalar<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L529" class="LineNr">529 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'put' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L530" class="LineNr">530 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L531" class="LineNr">531 </span>  <span class="Delimiter">}</span>
-<span id="L532" class="LineNr">532 </span>  <span class="Normal">int</span> offset_value = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L533" class="LineNr">533 </span>  <span class="Comment">//: later layers will permit non-integer offsets</span>
-<span id="L534" class="LineNr">534 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L535" class="LineNr">535 </span>    offset_value = to_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L536" class="LineNr">536 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &lt; <span class="Constant">0</span> || offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L537" class="LineNr">537 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset '&quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot;' for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L538" class="LineNr">538 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L539" class="LineNr">539 </span>    <span class="Delimiter">}</span>
-<span id="L540" class="LineNr">540 </span>  <span class="Delimiter">}</span>
-<span id="L541" class="LineNr">541 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L542" class="LineNr">542 </span>    offset_value = offset<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L543" class="LineNr">543 </span>  <span class="Delimiter">}</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Normal">const</span> reagent&amp; value = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L545" class="LineNr">545 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
-<span id="L546" class="LineNr">546 </span>  <span class="Normal">const</span> reagent&amp; element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset_value<span class="Delimiter">);</span>
-<span id="L547" class="LineNr">547 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>element<span class="Delimiter">,</span> value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L548" class="LineNr">548 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; value<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>value<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L549" class="LineNr">549 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L550" class="LineNr">550 </span>  <span class="Delimiter">}</span>
-<span id="L551" class="LineNr">551 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// no more checks necessary</span>
-<span id="L552" class="LineNr">552 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L553" class="LineNr">553 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L554" class="LineNr">554 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L555" class="LineNr">555 </span>  <span class="Delimiter">}</span>
-<span id="L556" class="LineNr">556 </span>  <span class="Comment">// End PUT Product Checks</span>
-<span id="L557" class="LineNr">557 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span><span class="Delimiter">}</span>
-<span id="L559" class="LineNr">559 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L560" class="LineNr">560 </span><span class="Normal">case</span> PUT: <span class="Delimiter">{</span>
-<span id="L561" class="LineNr">561 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L562" class="LineNr">562 </span>  <span class="Comment">// Update PUT base in Run</span>
-<span id="L563" class="LineNr">563 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L564" class="LineNr">564 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L565" class="LineNr">565 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L566" class="LineNr">566 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L567" class="LineNr">567 </span>  <span class="Delimiter">}</span>
-<span id="L568" class="LineNr">568 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L569" class="LineNr">569 </span>  <span class="Comment">// Update PUT base_type in Run</span>
-<span id="L570" class="LineNr">570 </span>  <span class="Normal">int</span> offset = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L571" class="LineNr">571 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &lt; <span class="Constant">0</span> || offset &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// copied from Check above</span>
-<span id="L572" class="LineNr">572 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = base_address + base<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>offset<span class="Delimiter">.</span>at<span class="Delimiter">(</span>offset<span class="Delimiter">);</span>
-<span id="L573" class="LineNr">573 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy to is &quot;</span> &lt;&lt; <a href='043space.cc.html#L80'>address</a> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L574" class="LineNr">574 </span>  <span class="Comment">// optimization: directly write the element rather than updating 'product'</span>
-<span id="L575" class="LineNr">575 </span>  <span class="Comment">// and writing the entire container</span>
-<span id="L576" class="LineNr">576 </span>  <span class="Comment">// Write Memory in PUT in Run</span>
-<span id="L577" class="LineNr">577 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L578" class="LineNr">578 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L579" class="LineNr">579 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; address+i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L580" class="LineNr">580 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+i<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L581" class="LineNr">581 </span>  <span class="Delimiter">}</span>
-<span id="L582" class="LineNr">582 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L583" class="LineNr">583 </span><span class="Delimiter">}</span>
-<span id="L584" class="LineNr">584 </span>
-<span id="L585" class="LineNr">585 </span><span class="Delimiter">:(scenario put_product_error)</span>
-<span id="L586" class="LineNr">586 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L587" class="LineNr">587 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L588" class="LineNr">588 </span>  local-scope
-<span id="L589" class="LineNr">589 </span>  load-ingredients
-<span id="L590" class="LineNr">590 </span>  <span class="Constant">1</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L591" class="LineNr">591 </span>  <span class="Constant">3</span>:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">1</span>:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L592" class="LineNr">592 </span>]
-<span id="L593" class="LineNr">593 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put' must be first ingredient '1:point', but got '3:point'</span>
-<span id="L594" class="LineNr">594 </span>
-<span id="L595" class="LineNr">595 </span><span class="SalientComment">//:: Allow containers to be defined in Mu code.</span>
-<span id="L596" class="LineNr">596 </span>
-<span id="L597" class="LineNr">597 </span><span class="Delimiter">:(scenarios load)</span>
-<span id="L598" class="LineNr">598 </span><span class="Delimiter">:(scenario container)</span>
-<span id="L599" class="LineNr">599 </span><span class="muData">container</span> foo [
-<span id="L600" class="LineNr">600 </span>  <span class="Normal">x</span>:num
-<span id="L601" class="LineNr">601 </span>  <span class="Normal">y</span>:num
-<span id="L602" class="LineNr">602 </span>]
-<span id="L603" class="LineNr">603 </span><span class="traceContains">+parse: --- defining container foo</span>
-<span id="L604" class="LineNr">604 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
-<span id="L605" class="LineNr">605 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
-<span id="L606" class="LineNr">606 </span>
-<span id="L607" class="LineNr">607 </span><span class="Delimiter">:(scenario container_use_before_definition)</span>
-<span id="L608" class="LineNr">608 </span><span class="muData">container</span> foo [
-<span id="L609" class="LineNr">609 </span>  <span class="Normal">x</span>:num
-<span id="L610" class="LineNr">610 </span>  <span class="Normal">y</span>:bar
-<span id="L611" class="LineNr">611 </span>]
-<span id="L612" class="LineNr">612 </span><span class="muData">container</span> bar [
-<span id="L613" class="LineNr">613 </span>  <span class="Normal">x</span>:num
-<span id="L614" class="LineNr">614 </span>  <span class="Normal">y</span>:num
-<span id="L615" class="LineNr">615 </span>]
-<span id="L616" class="LineNr">616 </span><span class="traceContains">+parse: --- defining container foo</span>
-<span id="L617" class="LineNr">617 </span><span class="traceContains">+parse: type number: 1000</span>
-<span id="L618" class="LineNr">618 </span><span class="traceContains">+parse:   element: {x: &quot;number&quot;}</span>
-<span id="L619" class="LineNr">619 </span><span class="Comment"># todo: brittle</span>
-<span id="L620" class="LineNr">620 </span><span class="Comment"># type bar is unknown at this point, but we assign it a number</span>
-<span id="L621" class="LineNr">621 </span><span class="traceContains">+parse:   element: {y: &quot;bar&quot;}</span>
-<span id="L622" class="LineNr">622 </span><span class="Comment"># later type bar geon</span>
-<span id="L623" class="LineNr">623 </span><span class="traceContains">+parse: --- defining container bar</span>
-<span id="L624" class="LineNr">624 </span><span class="traceContains">+parse: type number: 1001</span>
-<span id="L625" class="LineNr">625 </span><span class="traceContains">+parse:   element: {x: &quot;number&quot;}</span>
-<span id="L626" class="LineNr">626 </span><span class="traceContains">+parse:   element: {y: &quot;number&quot;}</span>
-<span id="L627" class="LineNr">627 </span>
-<span id="L628" class="LineNr">628 </span><span class="Comment">//: if a container is defined again, the new fields add to the original definition</span>
-<span id="L629" class="LineNr">629 </span><span class="Delimiter">:(scenarios run)</span>
-<span id="L630" class="LineNr">630 </span><span class="Delimiter">:(scenario container_extend)</span>
-<span id="L631" class="LineNr">631 </span><span class="muData">container</span> foo [
-<span id="L632" class="LineNr">632 </span>  <span class="Normal">x</span>:num
-<span id="L633" class="LineNr">633 </span>]
-<span id="L634" class="LineNr">634 </span><span class="Comment"># add to previous definition</span>
-<span id="L635" class="LineNr">635 </span><span class="muData">container</span> foo [
-<span id="L636" class="LineNr">636 </span>  <span class="Normal">y</span>:num
-<span id="L637" class="LineNr">637 </span>]
-<span id="L638" class="LineNr">638 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L639" class="LineNr">639 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L640" class="LineNr">640 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L641" class="LineNr">641 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L642" class="LineNr">642 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L643" class="LineNr">643 </span>]
-<span id="L644" class="LineNr">644 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L645" class="LineNr">645 </span><span class="traceContains">+mem: storing 35 in location 4</span>
+<span id="L255" class="LineNr">255 </span><span class="Delimiter">:(scenario get_product_type_mismatch)</span>
+<span id="L256" class="LineNr">256 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L257" class="LineNr">257 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L258" class="LineNr">258 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L260" class="LineNr">260 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Constant">15</span>:&amp;:num<span class="Special"> &lt;- </span>get <span class="Constant">12</span>:point-number/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L262" class="LineNr">262 </span>]
+<span id="L263" class="LineNr">263 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'get 12:point-number/raw, 1:offset' should write to number but '15' has type (address number)</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Comment">//: we might want to call 'get' without saving the results, say in a sandbox</span>
+<span id="L266" class="LineNr">266 </span>
+<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(scenario get_without_product)</span>
+<span id="L268" class="LineNr">268 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L269" class="LineNr">269 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L271" class="LineNr">271 </span>  get <span class="Constant">12</span>:point/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1:offset</span>  <span class="Comment"># unsafe</span>
+<span id="L272" class="LineNr">272 </span>]
+<span id="L273" class="LineNr">273 </span><span class="Comment"># just don't die</span>
+<span id="L274" class="LineNr">274 </span>
+<span id="L275" class="LineNr">275 </span><span class="SalientComment">//:: To write to elements of containers, use 'put'.</span>
+<span id="L276" class="LineNr">276 </span>
+<span id="L277" class="LineNr">277 </span><span class="Delimiter">:(scenario put)</span>
+<span id="L278" class="LineNr">278 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L279" class="LineNr">279 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L280" class="LineNr">280 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L281" class="LineNr">281 </span>  $clear-trace
+<span id="L282" class="LineNr">282 </span>  <span class="Constant">12</span>:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">12</span>:point<span class="Delimiter">,</span> <span class="Constant">1:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
+<span id="L283" class="LineNr">283 </span>]
+<span id="L284" class="LineNr">284 </span><span class="traceContains">+mem: storing 36 in location 13</span>
+<span id="L285" class="LineNr">285 </span><span class="traceAbsent">-mem: storing 34 in location 12</span>
+<span id="L286" class="LineNr">286 </span>
+<span id="L287" class="LineNr">287 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L288" class="LineNr">288 </span>PUT<span class="Delimiter">,</span>
+<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L290" class="LineNr">290 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;put&quot;</span><span class="Delimiter">,</span> PUT<span class="Delimiter">);</span>
+<span id="L291" class="LineNr">291 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L292" class="LineNr">292 </span><span class="Normal">case</span> PUT: <span class="Delimiter">{</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L294" class="LineNr">294 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put' expects exactly 3 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L295" class="LineNr">295 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L296" class="LineNr">296 </span>  <span class="Delimiter">}</span>
+<span id="L297" class="LineNr">297 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L298" class="LineNr">298 </span>  <span class="Comment">// Update PUT base in Check</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L300" class="LineNr">300 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'put' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L301" class="LineNr">301 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L302" class="LineNr">302 </span>  <span class="Delimiter">}</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Comment">// Update PUT base_type in Check</span>
+<span id="L305" class="LineNr">305 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L306" class="LineNr">306 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'put' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L307" class="LineNr">307 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Delimiter">}</span>
+<span id="L309" class="LineNr">309 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Comment">// Update PUT offset in Check</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>offset<span class="Delimiter">)</span> || !is_mu_scalar<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L312" class="LineNr">312 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'put' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L313" class="LineNr">313 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Delimiter">}</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Normal">int</span> offset_value = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L316" class="LineNr">316 </span>  <span class="Comment">//: later layers will permit non-integer offsets</span>
+<span id="L317" class="LineNr">317 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L318" class="LineNr">318 </span>    offset_value = to_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L319" class="LineNr">319 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &lt; <span class="Constant">0</span> || offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L320" class="LineNr">320 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset '&quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot;' for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L321" class="LineNr">321 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L322" class="LineNr">322 </span>    <span class="Delimiter">}</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Delimiter">}</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L325" class="LineNr">325 </span>    offset_value = offset<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Normal">const</span> reagent&amp; value = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Comment">//: use base.type rather than base_type because later layers will introduce compound types</span>
+<span id="L329" class="LineNr">329 </span>  <span class="Normal">const</span> reagent&amp; element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> offset_value<span class="Delimiter">);</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>element<span class="Delimiter">,</span> value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L331" class="LineNr">331 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; value<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>value<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L332" class="LineNr">332 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Delimiter">}</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// no more checks necessary</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L336" class="LineNr">336 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L337" class="LineNr">337 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L338" class="LineNr">338 </span>  <span class="Delimiter">}</span>
+<span id="L339" class="LineNr">339 </span>  <span class="Comment">// End PUT Product Checks</span>
+<span id="L340" class="LineNr">340 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L343" class="LineNr">343 </span><span class="Normal">case</span> PUT: <span class="Delimiter">{</span>
+<span id="L344" class="LineNr">344 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L345" class="LineNr">345 </span>  <span class="Comment">// Update PUT base in Run</span>
+<span id="L346" class="LineNr">346 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L347" class="LineNr">347 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L348" class="LineNr">348 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L349" class="LineNr">349 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Delimiter">}</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L352" class="LineNr">352 </span>  <span class="Comment">// Update PUT base_type in Run</span>
+<span id="L353" class="LineNr">353 </span>  <span class="Normal">int</span> offset = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &lt; <span class="Constant">0</span> || offset &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// copied from Check above</span>
+<span id="L355" class="LineNr">355 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = base_address<span class="Delimiter">;</span>
+<span id="L356" class="LineNr">356 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; offset<span class="Delimiter">;</span> ++i<span class="Delimiter">)</span>
+<span id="L357" class="LineNr">357 </span>    <a href='043space.cc.html#L101'>address</a> += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L358" class="LineNr">358 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy to is &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L359" class="LineNr">359 </span>  <span class="Comment">// optimization: directly write the element rather than updating 'product'</span>
+<span id="L360" class="LineNr">360 </span>  <span class="Comment">// and writing the entire container</span>
+<span id="L361" class="LineNr">361 </span>  <span class="Comment">// Write Memory in PUT in Run</span>
+<span id="L362" class="LineNr">362 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L364" class="LineNr">364 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; address+i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L365" class="LineNr">365 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+i<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L366" class="LineNr">366 </span>  <span class="Delimiter">}</span>
+<span id="L367" class="LineNr">367 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L368" class="LineNr">368 </span><span class="Delimiter">}</span>
+<span id="L369" class="LineNr">369 </span>
+<span id="L370" class="LineNr">370 </span><span class="Delimiter">:(scenario put_product_error)</span>
+<span id="L371" class="LineNr">371 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L372" class="LineNr">372 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L373" class="LineNr">373 </span>  local-scope
+<span id="L374" class="LineNr">374 </span>  load-ingredients
+<span id="L375" class="LineNr">375 </span>  <span class="Constant">1</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L376" class="LineNr">376 </span>  <span class="Constant">3</span>:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">1</span>:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
+<span id="L377" class="LineNr">377 </span>]
+<span id="L378" class="LineNr">378 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put' must be first ingredient '1:point', but got '3:point'</span>
+<span id="L379" class="LineNr">379 </span>
+<span id="L380" class="LineNr">380 </span><span class="SalientComment">//:: Allow containers to be defined in Mu code.</span>
+<span id="L381" class="LineNr">381 </span>
+<span id="L382" class="LineNr">382 </span><span class="Delimiter">:(scenarios load)</span>
+<span id="L383" class="LineNr">383 </span><span class="Delimiter">:(scenario container)</span>
+<span id="L384" class="LineNr">384 </span><span class="muData">container</span> foo [
+<span id="L385" class="LineNr">385 </span>  <span class="Normal">x</span>:num
+<span id="L386" class="LineNr">386 </span>  <span class="Normal">y</span>:num
+<span id="L387" class="LineNr">387 </span>]
+<span id="L388" class="LineNr">388 </span><span class="traceContains">+parse: --- defining container foo</span>
+<span id="L389" class="LineNr">389 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
+<span id="L390" class="LineNr">390 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
+<span id="L391" class="LineNr">391 </span>
+<span id="L392" class="LineNr">392 </span><span class="Delimiter">:(scenario container_use_before_definition)</span>
+<span id="L393" class="LineNr">393 </span><span class="muData">container</span> foo [
+<span id="L394" class="LineNr">394 </span>  <span class="Normal">x</span>:num
+<span id="L395" class="LineNr">395 </span>  <span class="Normal">y</span>:bar
+<span id="L396" class="LineNr">396 </span>]
+<span id="L397" class="LineNr">397 </span><span class="muData">container</span> bar [
+<span id="L398" class="LineNr">398 </span>  <span class="Normal">x</span>:num
+<span id="L399" class="LineNr">399 </span>  <span class="Normal">y</span>:num
+<span id="L400" class="LineNr">400 </span>]
+<span id="L401" class="LineNr">401 </span><span class="traceContains">+parse: --- defining container foo</span>
+<span id="L402" class="LineNr">402 </span><span class="traceContains">+parse: type number: 1000</span>
+<span id="L403" class="LineNr">403 </span><span class="traceContains">+parse:   element: {x: &quot;number&quot;}</span>
+<span id="L404" class="LineNr">404 </span><span class="Comment"># todo: brittle</span>
+<span id="L405" class="LineNr">405 </span><span class="Comment"># type bar is unknown at this point, but we assign it a number</span>
+<span id="L406" class="LineNr">406 </span><span class="traceContains">+parse:   element: {y: &quot;bar&quot;}</span>
+<span id="L407" class="LineNr">407 </span><span class="Comment"># later type bar geon</span>
+<span id="L408" class="LineNr">408 </span><span class="traceContains">+parse: --- defining container bar</span>
+<span id="L409" class="LineNr">409 </span><span class="traceContains">+parse: type number: 1001</span>
+<span id="L410" class="LineNr">410 </span><span class="traceContains">+parse:   element: {x: &quot;number&quot;}</span>
+<span id="L411" class="LineNr">411 </span><span class="traceContains">+parse:   element: {y: &quot;number&quot;}</span>
+<span id="L412" class="LineNr">412 </span>
+<span id="L413" class="LineNr">413 </span><span class="Comment">//: if a container is defined again, the new fields add to the original definition</span>
+<span id="L414" class="LineNr">414 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L415" class="LineNr">415 </span><span class="Delimiter">:(scenario container_extend)</span>
+<span id="L416" class="LineNr">416 </span><span class="muData">container</span> foo [
+<span id="L417" class="LineNr">417 </span>  <span class="Normal">x</span>:num
+<span id="L418" class="LineNr">418 </span>]
+<span id="L419" class="LineNr">419 </span><span class="Comment"># add to previous definition</span>
+<span id="L420" class="LineNr">420 </span><span class="muData">container</span> foo [
+<span id="L421" class="LineNr">421 </span>  <span class="Normal">y</span>:num
+<span id="L422" class="LineNr">422 </span>]
+<span id="L423" class="LineNr">423 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L424" class="LineNr">424 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L425" class="LineNr">425 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L426" class="LineNr">426 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
+<span id="L427" class="LineNr">427 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L428" class="LineNr">428 </span>]
+<span id="L429" class="LineNr">429 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L430" class="LineNr">430 </span><span class="traceContains">+mem: storing 35 in location 4</span>
+<span id="L431" class="LineNr">431 </span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
+<span id="L433" class="LineNr">433 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;container&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L434" class="LineNr">434 </span>  <a href='030container.cc.html#L446'>insert_container</a><span class="Delimiter">(</span>command<span class="Delimiter">,</span> <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">,</span> in<span class="Delimiter">);</span>
+<span id="L435" class="LineNr">435 </span><span class="Delimiter">}</span>
+<span id="L436" class="LineNr">436 </span>
+<span id="L437" class="LineNr">437 </span><span class="Comment">//: Even though we allow containers to be extended, we don't allow this after</span>
+<span id="L438" class="LineNr">438 </span><span class="Comment">//: a call to transform_all. But we do want to detect this situation and raise</span>
+<span id="L439" class="LineNr">439 </span><span class="Comment">//: an error. This field will help us raise such errors.</span>
+<span id="L440" class="LineNr">440 </span><span class="Delimiter">:(before &quot;End type_info Fields&quot;)</span>
+<span id="L441" class="LineNr">441 </span><span class="Normal">int</span> Num_calls_to_transform_all_at_first_definition<span class="Delimiter">;</span>
+<span id="L442" class="LineNr">442 </span><span class="Delimiter">:(before &quot;End type_info Constructor&quot;)</span>
+<span id="L443" class="LineNr">443 </span>Num_calls_to_transform_all_at_first_definition = -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L444" class="LineNr">444 </span>
+<span id="L445" class="LineNr">445 </span><span class="Delimiter">:(code)</span>
+<span id="L446" class="LineNr">446 </span><span class="Normal">void</span> <a href='030container.cc.html#L446'>insert_container</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; command<span class="Delimiter">,</span> <a href='010vm.cc.html#L178'>kind_of_type</a> kind<span class="Delimiter">,</span> istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L447" class="LineNr">447 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L448" class="LineNr">448 </span>  string name = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L450" class="LineNr">450 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L451" class="LineNr">451 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete container definition at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L452" class="LineNr">452 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L453" class="LineNr">453 </span>  <span class="Delimiter">}</span>
+<span id="L454" class="LineNr">454 </span>  <span class="Comment">// End container Name Refinements</span>
+<span id="L455" class="LineNr">455 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- defining &quot;</span> &lt;&lt; command &lt;&lt; <span class="Constant">' '</span> &lt;&lt; name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L456" class="LineNr">456 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span>
+<span id="L457" class="LineNr">457 </span>      || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L458" class="LineNr">458 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L459" class="LineNr">459 </span>  <span class="Delimiter">}</span>
+<span id="L460" class="LineNr">460 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type number: &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L461" class="LineNr">461 </span>  <a href='030container.cc.html#L518'>skip_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">&quot;'&quot;</span>+command+<span class="Constant">&quot;' must begin with '['&quot;</span><span class="Delimiter">);</span>
+<span id="L462" class="LineNr">462 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
+<span id="L463" class="LineNr">463 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L464" class="LineNr">464 </span>    <span class="Comment">// initial definition of this container</span>
+<span id="L465" class="LineNr">465 </span>    info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition = Num_calls_to_transform_all<span class="Delimiter">;</span>
+<span id="L466" class="LineNr">466 </span>  <span class="Delimiter">}</span>
+<span id="L467" class="LineNr">467 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition != Num_calls_to_transform_all<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L468" class="LineNr">468 </span>    <span class="Comment">// extension after transform_all</span>
+<span id="L469" class="LineNr">469 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;there was a call to transform_all() between the definition of container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' and a subsequent extension. This is not supported, since any recipes that used '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' values have already been transformed and </span><span class="cSpecial">\&quot;</span><span class="Constant">frozen</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L470" class="LineNr">470 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L471" class="LineNr">471 </span>  <span class="Delimiter">}</span>
+<span id="L472" class="LineNr">472 </span>  info<span class="Delimiter">.</span>name = name<span class="Delimiter">;</span>
+<span id="L473" class="LineNr">473 </span>  info<span class="Delimiter">.</span>kind = kind<span class="Delimiter">;</span>
+<span id="L474" class="LineNr">474 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L475" class="LineNr">475 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L476" class="LineNr">476 </span>    string element = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L477" class="LineNr">477 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>element<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L478" class="LineNr">478 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L479" class="LineNr">479 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete container definition at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L480" class="LineNr">480 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L481" class="LineNr">481 </span>    <span class="Delimiter">}</span>
+<span id="L482" class="LineNr">482 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>element == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L483" class="LineNr">483 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L484" class="LineNr">484 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L485" class="LineNr">485 </span>      <span class="Comment">// skip rest of container declaration</span>
+<span id="L486" class="LineNr">486 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L487" class="LineNr">487 </span>        <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L488" class="LineNr">488 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L489" class="LineNr">489 </span>      <span class="Delimiter">}</span>
+<span id="L490" class="LineNr">490 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L491" class="LineNr">491 </span>    <span class="Delimiter">}</span>
+<span id="L492" class="LineNr">492 </span>    info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
+<span id="L493" class="LineNr">493 </span>    expand_type_abbreviations<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">);</span>  <span class="Comment">// todo: use abbreviation before declaration</span>
+<span id="L494" class="LineNr">494 </span>    <a href='030container.cc.html#L500'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
+<span id="L495" class="LineNr">495 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L496" class="LineNr">496 </span>    <span class="Comment">// End Load Container Element Definition</span>
+<span id="L497" class="LineNr">497 </span>  <span class="Delimiter">}</span>
+<span id="L498" class="LineNr">498 </span><span class="Delimiter">}</span>
+<span id="L499" class="LineNr">499 </span>
+<span id="L500" class="LineNr">500 </span><span class="Normal">void</span> <a href='030container.cc.html#L500'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L501" class="LineNr">501 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L502" class="LineNr">502 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L503" class="LineNr">503 </span>    <a href='030container.cc.html#L500'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
+<span id="L504" class="LineNr">504 </span>    <a href='030container.cc.html#L500'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
+<span id="L505" class="LineNr">505 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L506" class="LineNr">506 </span>  <span class="Delimiter">}</span>
+<span id="L507" class="LineNr">507 </span>  assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L508" class="LineNr">508 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L509" class="LineNr">509 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L510" class="LineNr">510 </span>  <span class="Delimiter">}</span>
+<span id="L511" class="LineNr">511 </span>  <span class="Comment">// End insert_container Special-cases</span>
+<span id="L512" class="LineNr">512 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;-&gt;&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>  <span class="Comment">// used in recipe types</span>
+<span id="L513" class="LineNr">513 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L514" class="LineNr">514 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L515" class="LineNr">515 </span>  <span class="Delimiter">}</span>
+<span id="L516" class="LineNr">516 </span><span class="Delimiter">}</span>
+<span id="L517" class="LineNr">517 </span>
+<span id="L518" class="LineNr">518 </span><span class="Normal">void</span> <a href='030container.cc.html#L518'>skip_bracket</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> string message<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L519" class="LineNr">519 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L520" class="LineNr">520 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span>
+<span id="L521" class="LineNr">521 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; message &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L522" class="LineNr">522 </span><span class="Delimiter">}</span>
+<span id="L523" class="LineNr">523 </span>
+<span id="L524" class="LineNr">524 </span><span class="Delimiter">:(scenario multi_word_line_in_container_declaration)</span>
+<span id="L525" class="LineNr">525 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L526" class="LineNr">526 </span><span class="muData">container</span> foo [
+<span id="L527" class="LineNr">527 </span>  <span class="Normal">x</span>:num y:num
+<span id="L528" class="LineNr">528 </span>]
+<span id="L529" class="LineNr">529 </span><span class="traceContains">+error: container 'foo' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span>
+<span id="L530" class="LineNr">530 </span>
+<span id="L531" class="LineNr">531 </span><span class="Comment">//: support type abbreviations in container definitions</span>
+<span id="L532" class="LineNr">532 </span>
+<span id="L533" class="LineNr">533 </span><span class="Delimiter">:(scenario type_abbreviations_in_containers)</span>
+<span id="L534" class="LineNr">534 </span><span class="muData">type</span> foo = number
+<span id="L535" class="LineNr">535 </span><span class="muData">container</span> bar [
+<span id="L536" class="LineNr">536 </span>  <span class="Normal">x</span>:foo
+<span id="L537" class="LineNr">537 </span>]
+<span id="L538" class="LineNr">538 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L539" class="LineNr">539 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L540" class="LineNr">540 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:bar/unsafe<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
+<span id="L541" class="LineNr">541 </span>]
+<span id="L542" class="LineNr">542 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L543" class="LineNr">543 </span>
+<span id="L544" class="LineNr">544 </span><span class="Delimiter">:(after &quot;Transform.push_back(expand_type_abbreviations)&quot;)</span>
+<span id="L545" class="LineNr">545 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='030container.cc.html#L549'>expand_type_abbreviations_in_containers</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L546" class="LineNr">546 </span><span class="Delimiter">:(code)</span>
+<span id="L547" class="LineNr">547 </span><span class="Comment">// extremely inefficient; we process all types over and over again, once for every single recipe</span>
+<span id="L548" class="LineNr">548 </span><span class="Comment">// but it doesn't seem to cause any noticeable slowdown</span>
+<span id="L549" class="LineNr">549 </span><span class="Normal">void</span> <a href='030container.cc.html#L549'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L550" class="LineNr">550 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L551" class="LineNr">551 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L552" class="LineNr">552 </span>      expand_type_abbreviations<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L553" class="LineNr">553 </span>  <span class="Delimiter">}</span>
+<span id="L554" class="LineNr">554 </span><span class="Delimiter">}</span>
+<span id="L555" class="LineNr">555 </span>
+<span id="L556" class="LineNr">556 </span><span class="Comment">//: ensure scenarios are consistent by always starting new container</span>
+<span id="L557" class="LineNr">557 </span><span class="Comment">//: declarations at the same type number</span>
+<span id="L558" class="LineNr">558 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>  <span class="Comment">//: for tests</span>
+<span id="L559" class="LineNr">559 </span>Next_type_ordinal = <span class="Constant">1000</span><span class="Delimiter">;</span>
+<span id="L560" class="LineNr">560 </span><span class="Delimiter">:(before &quot;End Test Run Initialization&quot;)</span>
+<span id="L561" class="LineNr">561 </span>assert<span class="Delimiter">(</span>Next_type_ordinal &lt; <span class="Constant">1000</span><span class="Delimiter">);</span>
+<span id="L562" class="LineNr">562 </span>
+<span id="L563" class="LineNr">563 </span><span class="Delimiter">:(code)</span>
+<span id="L564" class="LineNr">564 </span><span class="Normal">void</span> test_error_on_transform_all_between_container_definition_and_extension<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L565" class="LineNr">565 </span>  <span class="Comment">// define a container</span>
+<span id="L566" class="LineNr">566 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L567" class="LineNr">567 </span>      <span class="Constant">&quot;  a:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L568" class="LineNr">568 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L569" class="LineNr">569 </span>  <span class="Comment">// try to extend the container after transform</span>
+<span id="L570" class="LineNr">570 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L571" class="LineNr">571 </span>  <a href='003trace.cc.html#L257'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
+<span id="L572" class="LineNr">572 </span>  Hide_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L573" class="LineNr">573 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L574" class="LineNr">574 </span>      <span class="Constant">&quot;  b:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L575" class="LineNr">575 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L576" class="LineNr">576 </span>  <a href='003trace.cc.html#L256'>CHECK_TRACE_CONTAINS_ERRORS</a><span class="Delimiter">();</span>
+<span id="L577" class="LineNr">577 </span><span class="Delimiter">}</span>
+<span id="L578" class="LineNr">578 </span>
+<span id="L579" class="LineNr">579 </span><span class="SalientComment">//:: Allow container definitions anywhere in the codebase, but complain if you</span>
+<span id="L580" class="LineNr">580 </span><span class="SalientComment">//:: can't find a definition at the end.</span>
+<span id="L581" class="LineNr">581 </span>
+<span id="L582" class="LineNr">582 </span><span class="Delimiter">:(scenario run_complains_on_unknown_types)</span>
+<span id="L583" class="LineNr">583 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L584" class="LineNr">584 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L585" class="LineNr">585 </span>  <span class="Comment"># integer is not a type</span>
+<span id="L586" class="LineNr">586 </span>  <span class="Constant">1</span>:integer<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L587" class="LineNr">587 </span>]
+<span id="L588" class="LineNr">588 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: unknown type integer in '1:integer &lt;- copy 0'</span>
+<span id="L589" class="LineNr">589 </span>
+<span id="L590" class="LineNr">590 </span><span class="Delimiter">:(scenario run_allows_type_definition_after_use)</span>
+<span id="L591" class="LineNr">591 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L592" class="LineNr">592 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/unsafe
+<span id="L593" class="LineNr">593 </span>]
+<span id="L594" class="LineNr">594 </span><span class="muData">container</span> bar [
+<span id="L595" class="LineNr">595 </span>  <span class="Normal">x</span>:num
+<span id="L596" class="LineNr">596 </span>]
+<span id="L597" class="LineNr">597 </span>$error: <span class="Constant">0</span>
+<span id="L598" class="LineNr">598 </span>
+<span id="L599" class="LineNr">599 </span><span class="Delimiter">:(before &quot;End Type Modifying Transforms&quot;)</span>
+<span id="L600" class="LineNr">600 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>check_or_set_invalid_types<span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L601" class="LineNr">601 </span>
+<span id="L602" class="LineNr">602 </span><span class="Delimiter">:(code)</span>
+<span id="L603" class="LineNr">603 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L604" class="LineNr">604 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L605" class="LineNr">605 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check for invalid types in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L606" class="LineNr">606 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L607" class="LineNr">607 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
+<span id="L608" class="LineNr">608 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L609" class="LineNr">609 </span>      check_or_set_invalid_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> caller<span class="Delimiter">,</span> inst<span class="Delimiter">);</span>
+<span id="L610" class="LineNr">610 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L611" class="LineNr">611 </span>      check_or_set_invalid_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> caller<span class="Delimiter">,</span> inst<span class="Delimiter">);</span>
+<span id="L612" class="LineNr">612 </span>  <span class="Delimiter">}</span>
+<span id="L613" class="LineNr">613 </span>  <span class="Comment">// End check_or_set_invalid_types</span>
+<span id="L614" class="LineNr">614 </span><span class="Delimiter">}</span>
+<span id="L615" class="LineNr">615 </span>
+<span id="L616" class="LineNr">616 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L617" class="LineNr">617 </span>  <span class="Comment">// Begin check_or_set_invalid_types(r)</span>
+<span id="L618" class="LineNr">618 </span>  check_or_set_invalid_types<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">),</span> <span class="Constant">&quot;'&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
+<span id="L619" class="LineNr">619 </span><span class="Delimiter">}</span>
+<span id="L620" class="LineNr">620 </span>
+<span id="L621" class="LineNr">621 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L622" class="LineNr">622 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L623" class="LineNr">623 </span>  <span class="Comment">// End Container Type Checks</span>
+<span id="L624" class="LineNr">624 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L625" class="LineNr">625 </span>    check_or_set_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
+<span id="L626" class="LineNr">626 </span>    check_or_set_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
+<span id="L627" class="LineNr">627 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L628" class="LineNr">628 </span>  <span class="Delimiter">}</span>
+<span id="L629" class="LineNr">629 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L630" class="LineNr">630 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L631" class="LineNr">631 </span>    assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L632" class="LineNr">632 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
+<span id="L633" class="LineNr">633 </span>      type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L634" class="LineNr">634 </span>    <span class="Normal">else</span>
+<span id="L635" class="LineNr">635 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; location_for_error_messages &lt;&lt; <span class="Constant">&quot;unknown type &quot;</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; in &quot;</span> &lt;&lt; name_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L636" class="LineNr">636 </span>  <span class="Delimiter">}</span>
+<span id="L637" class="LineNr">637 </span><span class="Delimiter">}</span>
+<span id="L638" class="LineNr">638 </span>
+<span id="L639" class="LineNr">639 </span><span class="Delimiter">:(scenario container_unknown_field)</span>
+<span id="L640" class="LineNr">640 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L641" class="LineNr">641 </span><span class="muData">container</span> foo [
+<span id="L642" class="LineNr">642 </span>  <span class="Normal">x</span>:num
+<span id="L643" class="LineNr">643 </span>  <span class="Normal">y</span>:bar
+<span id="L644" class="LineNr">644 </span>]
+<span id="L645" class="LineNr">645 </span><span class="traceContains">+error: foo: unknown type in y</span>
 <span id="L646" class="LineNr">646 </span>
-<span id="L647" class="LineNr">647 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
-<span id="L648" class="LineNr">648 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;container&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L649" class="LineNr">649 </span>  <a href='030container.cc.html#L661'>insert_container</a><span class="Delimiter">(</span>command<span class="Delimiter">,</span> <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">,</span> in<span class="Delimiter">);</span>
-<span id="L650" class="LineNr">650 </span><span class="Delimiter">}</span>
-<span id="L651" class="LineNr">651 </span>
-<span id="L652" class="LineNr">652 </span><span class="Comment">//: Even though we allow containers to be extended, we don't allow this after</span>
-<span id="L653" class="LineNr">653 </span><span class="Comment">//: a call to transform_all. But we do want to detect this situation and raise</span>
-<span id="L654" class="LineNr">654 </span><span class="Comment">//: an error. This field will help us raise such errors.</span>
-<span id="L655" class="LineNr">655 </span><span class="Delimiter">:(before &quot;End type_info Fields&quot;)</span>
-<span id="L656" class="LineNr">656 </span><span class="Normal">int</span> Num_calls_to_transform_all_at_first_definition<span class="Delimiter">;</span>
-<span id="L657" class="LineNr">657 </span><span class="Delimiter">:(before &quot;End type_info Constructor&quot;)</span>
-<span id="L658" class="LineNr">658 </span>Num_calls_to_transform_all_at_first_definition = -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L659" class="LineNr">659 </span>
-<span id="L660" class="LineNr">660 </span><span class="Delimiter">:(code)</span>
-<span id="L661" class="LineNr">661 </span><span class="Normal">void</span> <a href='030container.cc.html#L661'>insert_container</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; command<span class="Delimiter">,</span> <a href='010vm.cc.html#L177'>kind_of_type</a> kind<span class="Delimiter">,</span> istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L662" class="LineNr">662 </span>  skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L663" class="LineNr">663 </span>  string name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L664" class="LineNr">664 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L665" class="LineNr">665 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L666" class="LineNr">666 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete container definition at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L667" class="LineNr">667 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L668" class="LineNr">668 </span>  <span class="Delimiter">}</span>
-<span id="L669" class="LineNr">669 </span>  <span class="Comment">// End container Name Refinements</span>
-<span id="L670" class="LineNr">670 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- defining &quot;</span> &lt;&lt; command &lt;&lt; <span class="Constant">' '</span> &lt;&lt; name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L671" class="LineNr">671 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span>
-<span id="L672" class="LineNr">672 </span>      || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L673" class="LineNr">673 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L674" class="LineNr">674 </span>  <span class="Delimiter">}</span>
-<span id="L675" class="LineNr">675 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type number: &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L676" class="LineNr">676 </span>  <a href='030container.cc.html#L733'>skip_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">&quot;'&quot;</span>+command+<span class="Constant">&quot;' must begin with '['&quot;</span><span class="Delimiter">);</span>
-<span id="L677" class="LineNr">677 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
-<span id="L678" class="LineNr">678 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L679" class="LineNr">679 </span>    <span class="Comment">// initial definition of this container</span>
-<span id="L680" class="LineNr">680 </span>    info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition = Num_calls_to_transform_all<span class="Delimiter">;</span>
-<span id="L681" class="LineNr">681 </span>  <span class="Delimiter">}</span>
-<span id="L682" class="LineNr">682 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>Num_calls_to_transform_all_at_first_definition != Num_calls_to_transform_all<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L683" class="LineNr">683 </span>    <span class="Comment">// extension after transform_all</span>
-<span id="L684" class="LineNr">684 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;there was a call to transform_all() between the definition of container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' and a subsequent extension. This is not supported, since any recipes that used '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' values have already been transformed and </span><span class="cSpecial">\&quot;</span><span class="Constant">frozen</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L685" class="LineNr">685 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L647" class="LineNr">647 </span><span class="Delimiter">:(scenario read_container_with_bracket_in_comment)</span>
+<span id="L648" class="LineNr">648 </span><span class="muData">container</span> foo [
+<span id="L649" class="LineNr">649 </span>  <span class="Normal">x</span>:num
+<span id="L650" class="LineNr">650 </span>  <span class="Comment"># ']' in comment</span>
+<span id="L651" class="LineNr">651 </span>  <span class="Normal">y</span>:num
+<span id="L652" class="LineNr">652 </span>]
+<span id="L653" class="LineNr">653 </span><span class="traceContains">+parse: --- defining container foo</span>
+<span id="L654" class="LineNr">654 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
+<span id="L655" class="LineNr">655 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
+<span id="L656" class="LineNr">656 </span>
+<span id="L657" class="LineNr">657 </span><span class="Delimiter">:(scenario container_with_compound_field_type)</span>
+<span id="L658" class="LineNr">658 </span><span class="muData">container</span> foo [
+<span id="L659" class="LineNr">659 </span>  <span class="Delimiter">{</span>x: <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">))}</span>
+<span id="L660" class="LineNr">660 </span>]
+<span id="L661" class="LineNr">661 </span>$error: <span class="Constant">0</span>
+<span id="L662" class="LineNr">662 </span>
+<span id="L663" class="LineNr">663 </span><span class="Delimiter">:(before &quot;End transform_all&quot;)</span>
+<span id="L664" class="LineNr">664 </span>check_container_field_types<span class="Delimiter">();</span>
+<span id="L665" class="LineNr">665 </span>
+<span id="L666" class="LineNr">666 </span><span class="Delimiter">:(code)</span>
+<span id="L667" class="LineNr">667 </span><span class="Normal">void</span> check_container_field_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L668" class="LineNr">668 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L669" class="LineNr">669 </span>    <span class="Normal">const</span> type_info&amp; info = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
+<span id="L670" class="LineNr">670 </span>    <span class="Comment">// Check Container Field Types(info)</span>
+<span id="L671" class="LineNr">671 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L672" class="LineNr">672 </span>      check_invalid_types<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>name<span class="Delimiter">),</span> info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
+<span id="L673" class="LineNr">673 </span>  <span class="Delimiter">}</span>
+<span id="L674" class="LineNr">674 </span><span class="Delimiter">}</span>
+<span id="L675" class="LineNr">675 </span>
+<span id="L676" class="LineNr">676 </span><span class="Normal">void</span> check_invalid_types<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L677" class="LineNr">677 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// will throw a more precise error elsewhere</span>
+<span id="L678" class="LineNr">678 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L679" class="LineNr">679 </span>    check_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
+<span id="L680" class="LineNr">680 </span>    check_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
+<span id="L681" class="LineNr">681 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L682" class="LineNr">682 </span>  <span class="Delimiter">}</span>
+<span id="L683" class="LineNr">683 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>  <span class="Comment">// value 0 = compound types (layer parse_tree) or type ingredients (layer shape_shifting_container)</span>
+<span id="L684" class="LineNr">684 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span>
+<span id="L685" class="LineNr">685 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; location_for_error_messages &lt;&lt; <span class="Constant">&quot;unknown type in &quot;</span> &lt;&lt; name_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L686" class="LineNr">686 </span>  <span class="Delimiter">}</span>
-<span id="L687" class="LineNr">687 </span>  info<span class="Delimiter">.</span>name = name<span class="Delimiter">;</span>
-<span id="L688" class="LineNr">688 </span>  info<span class="Delimiter">.</span>kind = kind<span class="Delimiter">;</span>
-<span id="L689" class="LineNr">689 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L690" class="LineNr">690 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L691" class="LineNr">691 </span>    string element = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L692" class="LineNr">692 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>element<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L693" class="LineNr">693 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L694" class="LineNr">694 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete container definition at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L695" class="LineNr">695 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L696" class="LineNr">696 </span>    <span class="Delimiter">}</span>
-<span id="L697" class="LineNr">697 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>element == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L698" class="LineNr">698 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L699" class="LineNr">699 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L700" class="LineNr">700 </span>      <span class="Comment">// skip rest of container declaration</span>
-<span id="L701" class="LineNr">701 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L702" class="LineNr">702 </span>        <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L703" class="LineNr">703 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> == <span class="Constant">&quot;]&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L704" class="LineNr">704 </span>      <span class="Delimiter">}</span>
-<span id="L705" class="LineNr">705 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L706" class="LineNr">706 </span>    <span class="Delimiter">}</span>
-<span id="L707" class="LineNr">707 </span>    info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
-<span id="L708" class="LineNr">708 </span>    expand_type_abbreviations<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">);</span>  <span class="Comment">// todo: use abbreviation before declaration</span>
-<span id="L709" class="LineNr">709 </span>    <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
-<span id="L710" class="LineNr">710 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  element: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">())</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L711" class="LineNr">711 </span>    <span class="Comment">// End Load Container Element Definition</span>
-<span id="L712" class="LineNr">712 </span>  <span class="Delimiter">}</span>
-<span id="L713" class="LineNr">713 </span><span class="Delimiter">}</span>
-<span id="L714" class="LineNr">714 </span>
-<span id="L715" class="LineNr">715 </span><span class="Normal">void</span> <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L716" class="LineNr">716 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L717" class="LineNr">717 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L718" class="LineNr">718 </span>    <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
-<span id="L719" class="LineNr">719 </span>    <a href='030container.cc.html#L715'>replace_unknown_types_with_unique_ordinals</a><span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">);</span>
-<span id="L720" class="LineNr">720 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L721" class="LineNr">721 </span>  <span class="Delimiter">}</span>
-<span id="L722" class="LineNr">722 </span>  assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L723" class="LineNr">723 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L724" class="LineNr">724 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L725" class="LineNr">725 </span>  <span class="Delimiter">}</span>
-<span id="L726" class="LineNr">726 </span>  <span class="Comment">// End insert_container Special-cases</span>
-<span id="L727" class="LineNr">727 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;-&gt;&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>  <span class="Comment">// used in recipe types</span>
-<span id="L728" class="LineNr">728 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L729" class="LineNr">729 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L730" class="LineNr">730 </span>  <span class="Delimiter">}</span>
-<span id="L731" class="LineNr">731 </span><span class="Delimiter">}</span>
-<span id="L732" class="LineNr">732 </span>
-<span id="L733" class="LineNr">733 </span><span class="Normal">void</span> <a href='030container.cc.html#L733'>skip_bracket</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> string message<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L734" class="LineNr">734 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L735" class="LineNr">735 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span>
-<span id="L736" class="LineNr">736 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; message &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L737" class="LineNr">737 </span><span class="Delimiter">}</span>
-<span id="L738" class="LineNr">738 </span>
-<span id="L739" class="LineNr">739 </span><span class="Delimiter">:(scenario multi_word_line_in_container_declaration)</span>
-<span id="L740" class="LineNr">740 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L741" class="LineNr">741 </span><span class="muData">container</span> foo [
-<span id="L742" class="LineNr">742 </span>  <span class="Normal">x</span>:num y:num
-<span id="L743" class="LineNr">743 </span>]
-<span id="L744" class="LineNr">744 </span><span class="traceContains">+error: container 'foo' contains multiple elements on a single line. Containers and exclusive containers must only contain elements, one to a line, no code.</span>
-<span id="L745" class="LineNr">745 </span>
-<span id="L746" class="LineNr">746 </span><span class="Comment">//: support type abbreviations in container definitions</span>
-<span id="L747" class="LineNr">747 </span>
-<span id="L748" class="LineNr">748 </span><span class="Delimiter">:(scenario type_abbreviations_in_containers)</span>
-<span id="L749" class="LineNr">749 </span><span class="muData">type</span> foo = number
-<span id="L750" class="LineNr">750 </span><span class="muData">container</span> bar [
-<span id="L751" class="LineNr">751 </span>  <span class="Normal">x</span>:foo
-<span id="L752" class="LineNr">752 </span>]
-<span id="L753" class="LineNr">753 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L754" class="LineNr">754 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L755" class="LineNr">755 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:bar/unsafe<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L756" class="LineNr">756 </span>]
-<span id="L757" class="LineNr">757 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L758" class="LineNr">758 </span>
-<span id="L759" class="LineNr">759 </span><span class="Delimiter">:(after &quot;Transform.push_back(expand_type_abbreviations)&quot;)</span>
-<span id="L760" class="LineNr">760 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L761" class="LineNr">761 </span><span class="Delimiter">:(code)</span>
-<span id="L762" class="LineNr">762 </span><span class="Comment">// extremely inefficient; we process all types over and over again, once for every single recipe</span>
-<span id="L763" class="LineNr">763 </span><span class="Comment">// but it doesn't seem to cause any noticeable slowdown</span>
-<span id="L764" class="LineNr">764 </span><span class="Normal">void</span> <a href='030container.cc.html#L764'>expand_type_abbreviations_in_containers</a><span class="Delimiter">(</span><a href='001help.cc.html#L259'>vestigial</a> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L765" class="LineNr">765 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L766" class="LineNr">766 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L767" class="LineNr">767 </span>      expand_type_abbreviations<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L768" class="LineNr">768 </span>  <span class="Delimiter">}</span>
-<span id="L769" class="LineNr">769 </span><span class="Delimiter">}</span>
-<span id="L770" class="LineNr">770 </span>
-<span id="L771" class="LineNr">771 </span><span class="Comment">//: ensure scenarios are consistent by always starting new container</span>
-<span id="L772" class="LineNr">772 </span><span class="Comment">//: declarations at the same type number</span>
-<span id="L773" class="LineNr">773 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>  <span class="Comment">//: for tests</span>
-<span id="L774" class="LineNr">774 </span>Next_type_ordinal = <span class="Constant">1000</span><span class="Delimiter">;</span>
-<span id="L775" class="LineNr">775 </span><span class="Delimiter">:(before &quot;End Test Run Initialization&quot;)</span>
-<span id="L776" class="LineNr">776 </span>assert<span class="Delimiter">(</span>Next_type_ordinal &lt; <span class="Constant">1000</span><span class="Delimiter">);</span>
-<span id="L777" class="LineNr">777 </span>
-<span id="L778" class="LineNr">778 </span><span class="Delimiter">:(code)</span>
-<span id="L779" class="LineNr">779 </span><span class="Normal">void</span> test_error_on_transform_all_between_container_definition_and_extension<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L780" class="LineNr">780 </span>  <span class="Comment">// define a container</span>
-<span id="L781" class="LineNr">781 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L782" class="LineNr">782 </span>      <span class="Constant">&quot;  a:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L783" class="LineNr">783 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L784" class="LineNr">784 </span>  <span class="Comment">// try to extend the container after transform</span>
-<span id="L785" class="LineNr">785 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L786" class="LineNr">786 </span>  <a href='003trace.cc.html#L235'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
-<span id="L787" class="LineNr">787 </span>  Hide_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L788" class="LineNr">788 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L789" class="LineNr">789 </span>      <span class="Constant">&quot;  b:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L790" class="LineNr">790 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L791" class="LineNr">791 </span>  <a href='003trace.cc.html#L234'>CHECK_TRACE_CONTAINS_ERRORS</a><span class="Delimiter">();</span>
-<span id="L792" class="LineNr">792 </span><span class="Delimiter">}</span>
-<span id="L793" class="LineNr">793 </span>
-<span id="L794" class="LineNr">794 </span><span class="SalientComment">//:: Allow container definitions anywhere in the codebase, but complain if you</span>
-<span id="L795" class="LineNr">795 </span><span class="SalientComment">//:: can't find a definition at the end.</span>
-<span id="L796" class="LineNr">796 </span>
-<span id="L797" class="LineNr">797 </span><span class="Delimiter">:(scenario run_complains_on_unknown_types)</span>
-<span id="L798" class="LineNr">798 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L799" class="LineNr">799 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L800" class="LineNr">800 </span>  <span class="Comment"># integer is not a type</span>
-<span id="L801" class="LineNr">801 </span>  <span class="Constant">1</span>:integer<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L802" class="LineNr">802 </span>]
-<span id="L803" class="LineNr">803 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: unknown type integer in '1:integer &lt;- copy 0'</span>
-<span id="L804" class="LineNr">804 </span>
-<span id="L805" class="LineNr">805 </span><span class="Delimiter">:(scenario run_allows_type_definition_after_use)</span>
-<span id="L806" class="LineNr">806 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L807" class="LineNr">807 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/unsafe
-<span id="L808" class="LineNr">808 </span>]
-<span id="L809" class="LineNr">809 </span><span class="muData">container</span> bar [
-<span id="L810" class="LineNr">810 </span>  <span class="Normal">x</span>:num
-<span id="L811" class="LineNr">811 </span>]
-<span id="L812" class="LineNr">812 </span>$error: <span class="Constant">0</span>
-<span id="L813" class="LineNr">813 </span>
-<span id="L814" class="LineNr">814 </span><span class="Delimiter">:(before &quot;End Type Modifying Transforms&quot;)</span>
-<span id="L815" class="LineNr">815 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>check_or_set_invalid_types<span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L816" class="LineNr">816 </span>
-<span id="L817" class="LineNr">817 </span><span class="Delimiter">:(code)</span>
-<span id="L818" class="LineNr">818 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L819" class="LineNr">819 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L820" class="LineNr">820 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check for invalid types in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L821" class="LineNr">821 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L822" class="LineNr">822 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L823" class="LineNr">823 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L824" class="LineNr">824 </span>      check_or_set_invalid_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> caller<span class="Delimiter">,</span> inst<span class="Delimiter">);</span>
-<span id="L825" class="LineNr">825 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L826" class="LineNr">826 </span>      check_or_set_invalid_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> caller<span class="Delimiter">,</span> inst<span class="Delimiter">);</span>
-<span id="L827" class="LineNr">827 </span>  <span class="Delimiter">}</span>
-<span id="L828" class="LineNr">828 </span>  <span class="Comment">// End check_or_set_invalid_types</span>
-<span id="L829" class="LineNr">829 </span><span class="Delimiter">}</span>
-<span id="L830" class="LineNr">830 </span>
-<span id="L831" class="LineNr">831 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L832" class="LineNr">832 </span>  <span class="Comment">// Begin check_or_set_invalid_types(r)</span>
-<span id="L833" class="LineNr">833 </span>  check_or_set_invalid_types<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">),</span> <span class="Constant">&quot;'&quot;</span>+to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span>+<span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
-<span id="L834" class="LineNr">834 </span><span class="Delimiter">}</span>
-<span id="L835" class="LineNr">835 </span>
-<span id="L836" class="LineNr">836 </span><span class="Normal">void</span> check_or_set_invalid_types<span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L837" class="LineNr">837 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L838" class="LineNr">838 </span>  <span class="Comment">// End Container Type Checks</span>
-<span id="L839" class="LineNr">839 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L840" class="LineNr">840 </span>    check_or_set_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
-<span id="L841" class="LineNr">841 </span>    check_or_set_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
-<span id="L842" class="LineNr">842 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L843" class="LineNr">843 </span>  <span class="Delimiter">}</span>
-<span id="L844" class="LineNr">844 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L845" class="LineNr">845 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L846" class="LineNr">846 </span>    assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L847" class="LineNr">847 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
-<span id="L848" class="LineNr">848 </span>      type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L849" class="LineNr">849 </span>    <span class="Normal">else</span>
-<span id="L850" class="LineNr">850 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; location_for_error_messages &lt;&lt; <span class="Constant">&quot;unknown type &quot;</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; in &quot;</span> &lt;&lt; name_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L851" class="LineNr">851 </span>  <span class="Delimiter">}</span>
-<span id="L852" class="LineNr">852 </span><span class="Delimiter">}</span>
-<span id="L853" class="LineNr">853 </span>
-<span id="L854" class="LineNr">854 </span><span class="Delimiter">:(scenario container_unknown_field)</span>
-<span id="L855" class="LineNr">855 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L856" class="LineNr">856 </span><span class="muData">container</span> foo [
-<span id="L857" class="LineNr">857 </span>  <span class="Normal">x</span>:num
-<span id="L858" class="LineNr">858 </span>  <span class="Normal">y</span>:bar
-<span id="L859" class="LineNr">859 </span>]
-<span id="L860" class="LineNr">860 </span><span class="traceContains">+error: foo: unknown type in y</span>
-<span id="L861" class="LineNr">861 </span>
-<span id="L862" class="LineNr">862 </span><span class="Delimiter">:(scenario read_container_with_bracket_in_comment)</span>
-<span id="L863" class="LineNr">863 </span><span class="muData">container</span> foo [
-<span id="L864" class="LineNr">864 </span>  <span class="Normal">x</span>:num
-<span id="L865" class="LineNr">865 </span>  <span class="Comment"># ']' in comment</span>
-<span id="L866" class="LineNr">866 </span>  <span class="Normal">y</span>:num
-<span id="L867" class="LineNr">867 </span>]
-<span id="L868" class="LineNr">868 </span><span class="traceContains">+parse: --- defining container foo</span>
-<span id="L869" class="LineNr">869 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
-<span id="L870" class="LineNr">870 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
-<span id="L871" class="LineNr">871 </span>
-<span id="L872" class="LineNr">872 </span><span class="Delimiter">:(scenario container_with_compound_field_type)</span>
-<span id="L873" class="LineNr">873 </span><span class="muData">container</span> foo [
-<span id="L874" class="LineNr">874 </span>  <span class="Delimiter">{</span>x: <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">))}</span>
-<span id="L875" class="LineNr">875 </span>]
-<span id="L876" class="LineNr">876 </span>$error: <span class="Constant">0</span>
-<span id="L877" class="LineNr">877 </span>
-<span id="L878" class="LineNr">878 </span><span class="Delimiter">:(before &quot;End transform_all&quot;)</span>
-<span id="L879" class="LineNr">879 </span>check_container_field_types<span class="Delimiter">();</span>
-<span id="L880" class="LineNr">880 </span>
-<span id="L881" class="LineNr">881 </span><span class="Delimiter">:(code)</span>
-<span id="L882" class="LineNr">882 </span><span class="Normal">void</span> check_container_field_types<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L883" class="LineNr">883 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt;::iterator p = Type<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Type<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L884" class="LineNr">884 </span>    <span class="Normal">const</span> type_info&amp; info = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
-<span id="L885" class="LineNr">885 </span>    <span class="Comment">// Check Container Field Types(info)</span>
-<span id="L886" class="LineNr">886 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L887" class="LineNr">887 </span>      check_invalid_types<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>name<span class="Delimiter">),</span> info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
-<span id="L888" class="LineNr">888 </span>  <span class="Delimiter">}</span>
-<span id="L889" class="LineNr">889 </span><span class="Delimiter">}</span>
-<span id="L890" class="LineNr">890 </span>
-<span id="L891" class="LineNr">891 </span><span class="Normal">void</span> check_invalid_types<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L892" class="LineNr">892 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// will throw a more precise error elsewhere</span>
-<span id="L893" class="LineNr">893 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L894" class="LineNr">894 </span>    check_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
-<span id="L895" class="LineNr">895 </span>    check_invalid_types<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">,</span> name_for_error_messages<span class="Delimiter">);</span>
-<span id="L896" class="LineNr">896 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L897" class="LineNr">897 </span>  <span class="Delimiter">}</span>
-<span id="L898" class="LineNr">898 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>  <span class="Comment">// value 0 = compound types (layer parse_tree) or type ingredients (layer shape_shifting_container)</span>
-<span id="L899" class="LineNr">899 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span>
-<span id="L900" class="LineNr">900 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; location_for_error_messages &lt;&lt; <span class="Constant">&quot;unknown type in &quot;</span> &lt;&lt; name_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L901" class="LineNr">901 </span>  <span class="Delimiter">}</span>
-<span id="L902" class="LineNr">902 </span><span class="Delimiter">}</span>
-<span id="L903" class="LineNr">903 </span>
-<span id="L904" class="LineNr">904 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L124'>type_ordinal</a> t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L905" class="LineNr">905 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L906" class="LineNr">906 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">))</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L907" class="LineNr">907 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">);</span>
-<span id="L908" class="LineNr">908 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L178'>PRIMITIVE</a><span class="Delimiter">)</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L909" class="LineNr">909 </span>  out &lt;&lt; <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a> ? <span class="Constant">&quot;container&quot;</span> : <span class="Constant">&quot;exclusive-container&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L910" class="LineNr">910 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L911" class="LineNr">911 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L912" class="LineNr">912 </span>  <span class="Delimiter">}</span>
-<span id="L913" class="LineNr">913 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L914" class="LineNr">914 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L915" class="LineNr">915 </span><span class="Delimiter">}</span>
+<span id="L687" class="LineNr">687 </span><span class="Delimiter">}</span>
+<span id="L688" class="LineNr">688 </span>
+<span id="L689" class="LineNr">689 </span>string to_original_string<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L125'>type_ordinal</a> t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L690" class="LineNr">690 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L691" class="LineNr">691 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">))</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L692" class="LineNr">692 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">);</span>
+<span id="L693" class="LineNr">693 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>PRIMITIVE</a><span class="Delimiter">)</span> <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L694" class="LineNr">694 </span>  out &lt;&lt; <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>CONTAINER</a> ? <span class="Constant">&quot;container&quot;</span> : <span class="Constant">&quot;exclusive-container&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L695" class="LineNr">695 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L696" class="LineNr">696 </span>    out &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L697" class="LineNr">697 </span>  <span class="Delimiter">}</span>
+<span id="L698" class="LineNr">698 </span>  out &lt;&lt; <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L699" class="LineNr">699 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L700" class="LineNr">700 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/031merge.cc.html b/html/031merge.cc.html
index e38b745f..4fc45ec7 100644
--- a/html/031merge.cc.html
+++ b/html/031merge.cc.html
@@ -25,7 +25,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .traceContains { color: #008000; }
 .cSpecial { color: #008000; }
 -->
@@ -178,12 +177,12 @@ if ('onhashchange' in window) {
 <span id="L114" class="LineNr">114 </span><span class="Delimiter">:(code)</span>
 <span id="L115" class="LineNr">115 </span><span class="Normal">void</span> <a href='031merge.cc.html#L115'>check_merge_calls</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L116" class="LineNr">116 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L117" class="LineNr">117 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check merge instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L117" class="LineNr">117 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check merge instructions in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L118" class="LineNr">118 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L119" class="LineNr">119 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L120" class="LineNr">120 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;merge&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L121" class="LineNr">121 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L122" class="LineNr">122 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a single product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L122" class="LineNr">122 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a single product in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L123" class="LineNr">123 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L124" class="LineNr">124 </span>    <span class="Delimiter">}</span>
 <span id="L125" class="LineNr">125 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
@@ -191,12 +190,12 @@ if ('onhashchange' in window) {
 <span id="L127" class="LineNr">127 </span>    <span class="Normal">const</span> type_tree* product_base_type = product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom ? product<span class="Delimiter">.</span>type : product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
 <span id="L128" class="LineNr">128 </span>    assert<span class="Delimiter">(</span>product_base_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
 <span id="L129" class="LineNr">129 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>product_base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> product_base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L130" class="LineNr">130 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a container in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L130" class="LineNr">130 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a container in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L131" class="LineNr">131 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L132" class="LineNr">132 </span>    <span class="Delimiter">}</span>
 <span id="L133" class="LineNr">133 </span>    <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> product_base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L134" class="LineNr">134 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind != <a href='010vm.cc.html#L179'>CONTAINER</a> &amp;&amp; info<span class="Delimiter">.</span>kind != <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a container in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind != <a href='010vm.cc.html#L180'>CONTAINER</a> &amp;&amp; info<span class="Delimiter">.</span>kind != <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'merge' should yield a container in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L136" class="LineNr">136 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L137" class="LineNr">137 </span>    <span class="Delimiter">}</span>
 <span id="L138" class="LineNr">138 </span>    <a href='031merge.cc.html#L142'>check_merge_call</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">,</span> product<span class="Delimiter">,</span> caller<span class="Delimiter">,</span> inst<span class="Delimiter">);</span>
@@ -209,9 +208,9 @@ if ('onhashchange' in window) {
 <span id="L145" class="LineNr">145 </span>  state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>push<span class="Delimiter">(</span>merge_check_point<span class="Delimiter">(</span>product<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L146" class="LineNr">146 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L147" class="LineNr">147 </span>    assert<span class="Delimiter">(</span>!state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L148" class="LineNr">148 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L148" class="LineNr">148 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L149" class="LineNr">149 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L150" class="LineNr">150 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L150" class="LineNr">150 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too few ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L151" class="LineNr">151 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L152" class="LineNr">152 </span>    <span class="Delimiter">}</span>
 <span id="L153" class="LineNr">153 </span>    reagent&amp; container = state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container<span class="Delimiter">;</span>
@@ -220,21 +219,21 @@ if ('onhashchange' in window) {
 <span id="L156" class="LineNr">156 </span>    assert<span class="Delimiter">(</span>top_root_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
 <span id="L157" class="LineNr">157 </span>    type_info&amp; container_info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> top_root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
 <span id="L158" class="LineNr">158 </span>    <span class="Normal">switch</span> <span class="Delimiter">(</span>container_info<span class="Delimiter">.</span>kind<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L159" class="LineNr">159 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L179'>CONTAINER</a>: <span class="Delimiter">{</span>
+<span id="L159" class="LineNr">159 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L180'>CONTAINER</a>: <span class="Delimiter">{</span>
 <span id="L160" class="LineNr">160 </span>        <span class="Comment">// degenerate case: merge with the same type always succeeds</span>
-<span id="L161" class="LineNr">161 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span> &amp;&amp; <a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
+<span id="L161" class="LineNr">161 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span> &amp;&amp; <a href='021check_instruction.cc.html#L91'>types_coercible</a><span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
 <span id="L162" class="LineNr">162 </span>          <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span>        <span class="Normal">const</span> reagent&amp; expected_ingredient = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>type<span class="Delimiter">,</span> state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">);</span>
-<span id="L164" class="LineNr">164 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L163" class="LineNr">163 </span>        <span class="Normal">const</span> reagent&amp; expected_ingredient = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>type<span class="Delimiter">,</span> state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">);</span>
+<span id="L164" class="LineNr">164 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; || &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L165" class="LineNr">165 </span>        <span class="Comment">// if the current element is the ingredient we expect, move on to the next element/ingredient</span>
-<span id="L166" class="LineNr">166 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L115'>types_coercible</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L166" class="LineNr">166 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='021check_instruction.cc.html#L91'>types_coercible</a><span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
 <span id="L167" class="LineNr">167 </span>          ++ingredient_index<span class="Delimiter">;</span>
 <span id="L168" class="LineNr">168 </span>          ++state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">;</span>
 <span id="L169" class="LineNr">169 </span>          <span class="Normal">while</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get_base_type<span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container<span class="Delimiter">.</span>type<span class="Delimiter">)-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L170" class="LineNr">170 </span>            state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
 <span id="L171" class="LineNr">171 </span>            <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L172" class="LineNr">172 </span>              <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">))</span>
-<span id="L173" class="LineNr">173 </span>                <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L173" class="LineNr">173 </span>                <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L174" class="LineNr">174 </span>              <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L175" class="LineNr">175 </span>            <span class="Delimiter">}</span>
 <span id="L176" class="LineNr">176 </span>            ++state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">;</span>
@@ -250,9 +249,9 @@ if ('onhashchange' in window) {
 <span id="L186" class="LineNr">186 </span>      <span class="Comment">// End check_merge_call Special-cases</span>
 <span id="L187" class="LineNr">187 </span>      <span class="Normal">default</span>: <span class="Delimiter">{</span>
 <span id="L188" class="LineNr">188 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>container<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incorrect type of ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L190" class="LineNr">190 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (expected '&quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L191" class="LineNr">191 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (got '&quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L189" class="LineNr">189 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incorrect type of ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L190" class="LineNr">190 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (expected '&quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L191" class="LineNr">191 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (got '&quot;</span> &lt;&lt; debug_string<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L192" class="LineNr">192 </span>          <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L193" class="LineNr">193 </span>        <span class="Delimiter">}</span>
 <span id="L194" class="LineNr">194 </span>        ++ingredient_index<span class="Delimiter">;</span>
@@ -261,7 +260,7 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr">197 </span>          state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
 <span id="L198" class="LineNr">198 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L199" class="LineNr">199 </span>            <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">))</span>
-<span id="L200" class="LineNr">200 </span>              <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L200" class="LineNr">200 </span>              <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L201" class="LineNr">201 </span>            <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L202" class="LineNr">202 </span>          <span class="Delimiter">}</span>
 <span id="L203" class="LineNr">203 </span>          ++state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index<span class="Delimiter">;</span>
@@ -287,7 +286,7 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'merge' should yield a container in '1:num &lt;- merge 3'</span>
 <span id="L224" class="LineNr">224 </span>
 <span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L226" class="LineNr">226 </span><span class="PreProc">#include </span><span class="Constant">&lt;stack&gt;</span>
+<span id="L226" class="LineNr">226 </span><span class="Comment">#include &lt;stack&gt;</span>
 <span id="L227" class="LineNr">227 </span><span class="Normal">using</span> std::stack<span class="Delimiter">;</span>
 </pre>
 </body>
diff --git a/html/032array.cc.html b/html/032array.cc.html
index 528fe5b6..b80fa24b 100644
--- a/html/032array.cc.html
+++ b/html/032array.cc.html
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L11" class="LineNr"> 11 </span>  <span class="Comment"># create an array occupying locations 1 (for the size) and 2-4 (for the elements)</span>
 <span id="L12" class="LineNr"> 12 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
 <span id="L13" class="LineNr"> 13 </span>]
-<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: creating array of size 4</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: creating array from 4 locations</span>
 <span id="L15" class="LineNr"> 15 </span>
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L17" class="LineNr"> 17 </span>CREATE_ARRAY<span class="Delimiter">,</span>
@@ -84,29 +84,29 @@ if ('onhashchange' in window) {
 <span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L21" class="LineNr"> 21 </span><span class="Normal">case</span> CREATE_ARRAY: <span class="Delimiter">{</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' needs one product and no ingredients but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' needs one product and no ingredients but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L24" class="LineNr"> 24 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">}</span>
 <span id="L26" class="LineNr"> 26 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L27" class="LineNr"> 27 </span>  <span class="Comment">// Update CREATE_ARRAY product in Check</span>
 <span id="L28" class="LineNr"> 28 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L29" class="LineNr"> 29 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' cannot create non-array '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L29" class="LineNr"> 29 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' cannot create non-array '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L30" class="LineNr"> 30 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Delimiter">}</span>
 <span id="L32" class="LineNr"> 32 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L33" class="LineNr"> 33 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;create array of what? '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L33" class="LineNr"> 33 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;create array of what? '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L34" class="LineNr"> 34 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Delimiter">}</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Comment">// 'create-array' will need to check properties rather than types</span>
 <span id="L37" class="LineNr"> 37 </span>  type_tree* array_length_from_type = product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!array_length_from_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L39" class="LineNr"> 39 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;create array of what size? '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L39" class="LineNr"> 39 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;create array of what size? '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L40" class="LineNr"> 40 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L41" class="LineNr"> 41 </span>  <span class="Delimiter">}</span>
 <span id="L42" class="LineNr"> 42 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
 <span id="L43" class="LineNr"> 43 </span>    array_length_from_type = array_length_from_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>array_length_from_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' product should specify size of array after its element type, but got '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'create-array' product should specify size of array after its element type, but got '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L46" class="LineNr"> 46 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">}</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -119,17 +119,17 @@ if ('onhashchange' in window) {
 <span id="L55" class="LineNr"> 55 </span>  type_tree* array_length_from_type = product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
 <span id="L57" class="LineNr"> 57 </span>    array_length_from_type = array_length_from_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L395'>array_length</a> = to_integer<span class="Delimiter">(</span>array_length_from_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L319'>array_length</a> = to_integer<span class="Delimiter">(</span>array_length_from_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
 <span id="L59" class="LineNr"> 59 </span>  <span class="Comment">// initialize array length, so that size_of will work</span>
-<span id="L60" class="LineNr"> 60 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; <a href='032array.cc.html#L395'>array_length</a> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; base_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L61" class="LineNr"> 61 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">,</span> <a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">);</span>  <span class="Comment">// in array elements</span>
+<span id="L60" class="LineNr"> 60 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; <a href='032array.cc.html#L319'>array_length</a> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; base_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L61" class="LineNr"> 61 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">,</span> <a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">);</span>  <span class="Comment">// in array elements</span>
 <span id="L62" class="LineNr"> 62 </span>  <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span>  <span class="Comment">// in locations</span>
-<span id="L63" class="LineNr"> 63 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating array of size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L63" class="LineNr"> 63 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating array from &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; locations&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Comment">// initialize array</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt;= size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L66" class="LineNr"> 66 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+i<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Comment">// no need to update product</span>
-<span id="L68" class="LineNr"> 68 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L68" class="LineNr"> 68 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L70" class="LineNr"> 70 </span><span class="Delimiter">}</span>
 <span id="L71" class="LineNr"> 71 </span>
@@ -162,17 +162,17 @@ if ('onhashchange' in window) {
 <span id="L98" class="LineNr"> 98 </span>]
 <span id="L99" class="LineNr"> 99 </span><span class="traceContains">+app: foo: 3 14 15 16</span>
 <span id="L100" class="LineNr">100 </span>
-<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(before &quot;End <a href='021check_instruction.cc.html#L115'>types_coercible</a> Special-cases&quot;)</span>
+<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(before &quot;End <a href='021check_instruction.cc.html#L91'>types_coercible</a> Special-cases&quot;)</span>
 <span id="L102" class="LineNr">102 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; is_mu_array<span class="Delimiter">(</span>to<span class="Delimiter">))</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span><a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>from<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span><a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span>from<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
 <span id="L104" class="LineNr">104 </span>
 <span id="L105" class="LineNr">105 </span><span class="Delimiter">:(before &quot;End size_of(reagent r) Special-cases&quot;)</span>
 <span id="L106" class="LineNr">106 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L108" class="LineNr">108 </span>    <a href='003trace.cc.html#L174'>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;'&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' is an array of what?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L108" class="LineNr">108 </span>    <a href='003trace.cc.html#L197'>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;'&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' is an array of what?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L109" class="LineNr">109 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L110" class="LineNr">110 </span>  <span class="Delimiter">}</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Identifier">return</span> <span class="Comment">/*</span><span class="Comment">space for length</span><span class="Comment">*/</span><span class="Constant">1</span> + <a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span><a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Identifier">return</span> <span class="Comment">/*</span><span class="Comment">space for length</span><span class="Comment">*/</span><span class="Constant">1</span> + <a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span><a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
 <span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
 <span id="L113" class="LineNr">113 </span>
 <span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End size_of(type) Non-atom Special-cases&quot;)</span>
@@ -191,7 +191,7 @@ if ('onhashchange' in window) {
 <span id="L127" class="LineNr">127 </span><span class="Comment">//: disable the size mismatch check for arrays since the destination array</span>
 <span id="L128" class="LineNr">128 </span><span class="Comment">//: need not be initialized</span>
 <span id="L129" class="LineNr">129 </span><span class="Delimiter">:(before &quot;End size_mismatch(x) Special-cases&quot;)</span>
-<span id="L130" class="LineNr">130 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L130" class="LineNr">130 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == Array_type_ordinal<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="SalientComment">//:: arrays inside containers</span>
 <span id="L133" class="LineNr">133 </span><span class="Comment">//: arrays are disallowed inside containers unless their length is fixed in</span>
@@ -203,7 +203,7 @@ if ('onhashchange' in window) {
 <span id="L139" class="LineNr">139 </span>]
 <span id="L140" class="LineNr">140 </span>$error: <span class="Constant">0</span>
 <span id="L141" class="LineNr">141 </span>
-<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L661'>insert_container</a> Special-cases&quot;)</span>
+<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L446'>insert_container</a> Special-cases&quot;)</span>
 <span id="L143" class="LineNr">143 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// sometimes types will contain non-type tags, like numbers for the size of an array</span>
 <span id="L144" class="LineNr">144 </span>  type<span class="Delimiter">-&gt;</span>value = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L145" class="LineNr">145 </span><span class="Delimiter">}</span>
@@ -219,16 +219,16 @@ if ('onhashchange' in window) {
 <span id="L155" class="LineNr">155 </span><span class="Delimiter">{</span>
 <span id="L156" class="LineNr">156 </span>  <span class="Normal">const</span> type_tree* type = info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>type<span class="Delimiter">;</span>
 <span id="L157" class="LineNr">157 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type &amp;&amp; type<span class="Delimiter">-&gt;</span>atom &amp;&amp; type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L158" class="LineNr">158 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' doesn't specify type of array elements for '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' doesn't specify type of array elements for '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L159" class="LineNr">159 </span>    <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L160" class="LineNr">160 </span>  <span class="Delimiter">}</span>
 <span id="L161" class="LineNr">161 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type &amp;&amp; !type<span class="Delimiter">-&gt;</span>atom &amp;&amp; type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L162" class="LineNr">162 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr">163 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' doesn't specify type of array elements for '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L163" class="LineNr">163 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' doesn't specify type of array elements for '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L164" class="LineNr">164 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L165" class="LineNr">165 </span>    <span class="Delimiter">}</span>
 <span id="L166" class="LineNr">166 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right || !is_integer<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// array has no length</span>
-<span id="L167" class="LineNr">167 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' cannot determine size of element '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L167" class="LineNr">167 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;container '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' cannot determine size of element '&quot;</span> &lt;&lt; info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>back<span class="Delimiter">().</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L168" class="LineNr">168 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L169" class="LineNr">169 </span>    <span class="Delimiter">}</span>
 <span id="L170" class="LineNr">170 </span>  <span class="Delimiter">}</span>
@@ -239,7 +239,7 @@ if ('onhashchange' in window) {
 <span id="L175" class="LineNr">175 </span><span class="Delimiter">:(before &quot;End size_mismatch(x) Special-cases&quot;)</span>
 <span id="L176" class="LineNr">176 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>running_step_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>running_recipe<span class="Delimiter">).</span>steps<span class="Delimiter">)</span>
 <span id="L177" class="LineNr">177 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation == MERGE<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L179" class="LineNr">179 </span><span class="Delimiter">}</span>
 <span id="L180" class="LineNr">180 </span>
 <span id="L181" class="LineNr">181 </span><span class="Delimiter">:(scenario merge_static_array_into_container)</span>
@@ -264,459 +264,342 @@ if ('onhashchange' in window) {
 <span id="L200" class="LineNr">200 </span>]
 <span id="L201" class="LineNr">201 </span><span class="Comment"># shouldn't die</span>
 <span id="L202" class="LineNr">202 </span>
-<span id="L203" class="LineNr">203 </span><span class="SalientComment">//:: containers inside arrays</span>
-<span id="L204" class="LineNr">204 </span><span class="Comment">//: make sure we compute container sizes inside arrays</span>
-<span id="L205" class="LineNr">205 </span>
-<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End compute_container_sizes Non-atom Special-cases&quot;)</span>
-<span id="L207" class="LineNr">207 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;array&quot;</span><span class="Delimiter">)</span>
-<span id="L208" class="LineNr">208 </span>  compute_container_sizes<span class="Delimiter">(</span><a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>type<span class="Delimiter">),</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L209" class="LineNr">209 </span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L211" class="LineNr">211 </span><span class="Normal">void</span> <a href='032array.cc.html#L211'>test_container_sizes_from_array</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L213" class="LineNr">213 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L214" class="LineNr">214 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Comment">// scanning an array of the container precomputes the size of the container</span>
-<span id="L216" class="LineNr">216 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:array:point&quot;</span><span class="Delimiter">);</span>
-<span id="L217" class="LineNr">217 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L218" class="LineNr">218 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L219" class="LineNr">219 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
-<span id="L221" class="LineNr">221 </span>
-<span id="L222" class="LineNr">222 </span><span class="Normal">void</span> <a href='032array.cc.html#L222'>test_container_sizes_from_address_to_array</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L224" class="LineNr">224 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L225" class="LineNr">225 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Comment">// scanning an address to an array of the container precomputes the size of the container</span>
-<span id="L227" class="LineNr">227 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:array:point&quot;</span><span class="Delimiter">);</span>
-<span id="L228" class="LineNr">228 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L229" class="LineNr">229 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L230" class="LineNr">230 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
-<span id="L232" class="LineNr">232 </span>
-<span id="L233" class="LineNr">233 </span><span class="Normal">void</span> <a href='032array.cc.html#L233'>test_container_sizes_from_static_array</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L235" class="LineNr">235 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L236" class="LineNr">236 </span>  <span class="Normal">int</span> old_size = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>
-<span id="L237" class="LineNr">237 </span>  <span class="Comment">// scanning an address to an array of the container precomputes the size of the container</span>
-<span id="L238" class="LineNr">238 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:array:point:10&quot;</span><span class="Delimiter">);</span>
-<span id="L239" class="LineNr">239 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L240" class="LineNr">240 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L241" class="LineNr">241 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Comment">// no non-container types precomputed</span>
-<span id="L243" class="LineNr">243 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">)</span>-old_size<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L244" class="LineNr">244 </span><span class="Delimiter">}</span>
-<span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span><span class="Normal">void</span> <a href='032array.cc.html#L246'>test_container_sizes_from_address_to_static_array</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L248" class="LineNr">248 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L249" class="LineNr">249 </span>  <span class="Normal">int</span> old_size = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Comment">// scanning an address to an array of the container precomputes the size of the container</span>
-<span id="L251" class="LineNr">251 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:array:point:10&quot;</span><span class="Delimiter">);</span>
-<span id="L252" class="LineNr">252 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L253" class="LineNr">253 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L254" class="LineNr">254 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L255" class="LineNr">255 </span>  <span class="Comment">// no non-container types precomputed</span>
-<span id="L256" class="LineNr">256 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">)</span>-old_size<span class="Delimiter">,</span> <span class="Constant">1</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="Normal">void</span> <a href='032array.cc.html#L259'>test_container_sizes_from_repeated_address_and_array_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L261" class="LineNr">261 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Normal">int</span> old_size = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Comment">// scanning repeated address and array types modifying the container precomputes the size of the container</span>
-<span id="L264" class="LineNr">264 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:array:<a href='043space.cc.html#L80'>address</a>:array:point:10&quot;</span><span class="Delimiter">);</span>
-<span id="L265" class="LineNr">265 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L266" class="LineNr">266 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L267" class="LineNr">267 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> container<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Comment">// no non-container types precomputed</span>
-<span id="L269" class="LineNr">269 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">)</span>-old_size<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L270" class="LineNr">270 </span><span class="Delimiter">}</span>
-<span id="L271" class="LineNr">271 </span>
-<span id="L272" class="LineNr">272 </span><span class="Normal">void</span> <a href='032array.cc.html#L272'>test_container_sizes_on_unknown_type</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Comment">// a container we don't have the size for</span>
-<span id="L274" class="LineNr">274 </span>  reagent container<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">int</span> old_size = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">);</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Comment">// scanning address to array with a typo</span>
-<span id="L277" class="LineNr">277 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:array:adress:number&quot;</span><span class="Delimiter">);</span>
-<span id="L278" class="LineNr">278 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// should not crash</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Comment">// no non-container types precomputed</span>
-<span id="L280" class="LineNr">280 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Container_metadata<span class="Delimiter">),</span> old_size<span class="Delimiter">);</span>
-<span id="L281" class="LineNr">281 </span><span class="Delimiter">}</span>
-<span id="L282" class="LineNr">282 </span>
-<span id="L283" class="LineNr">283 </span><span class="SalientComment">//:: To access elements of an array, use 'index'</span>
-<span id="L284" class="LineNr">284 </span>
-<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(scenario index)</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="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L288" class="LineNr">288 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L290" class="LineNr">290 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L291" class="LineNr">291 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span>/index  <span class="Comment"># the index must be a non-negative whole number</span>
-<span id="L292" class="LineNr">292 </span>]
-<span id="L293" class="LineNr">293 </span><span class="traceContains">+mem: storing 14 in location 5</span>
-<span id="L294" class="LineNr">294 </span>
-<span id="L295" class="LineNr">295 </span><span class="Delimiter">:(scenario index_compound_element)</span>
-<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L297" class="LineNr">297 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)}</span><span class="Special"> &lt;- </span>create-array
-<span id="L298" class="LineNr">298 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L301" class="LineNr">301 </span>  <span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>index <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)},</span> <span class="Constant">0</span>
-<span id="L302" class="LineNr">302 </span>]
-<span id="L303" class="LineNr">303 </span><span class="traceContains">+mem: storing 14 in location 5</span>
-<span id="L304" class="LineNr">304 </span>
-<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(scenario index_direct_offset)</span>
-<span id="L306" class="LineNr">306 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L308" class="LineNr">308 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L310" class="LineNr">310 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L311" class="LineNr">311 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num<span class="Delimiter">,</span> <span class="Constant">5</span>:num
-<span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span><span class="traceContains">+mem: storing 14 in location 6</span>
-<span id="L315" class="LineNr">315 </span>
-<span id="L316" class="LineNr">316 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L317" class="LineNr">317 </span>INDEX<span class="Delimiter">,</span>
-<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L319" class="LineNr">319 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> INDEX<span class="Delimiter">);</span>
-<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L321" class="LineNr">321 </span><span class="Normal">case</span> INDEX: <span class="Delimiter">{</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L323" class="LineNr">323 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L324" class="LineNr">324 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L325" class="LineNr">325 </span>  <span class="Delimiter">}</span>
-<span id="L326" class="LineNr">326 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L327" class="LineNr">327 </span>  <span class="Comment">// Update INDEX base in Check</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L329" class="LineNr">329 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' on a non-array '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L330" class="LineNr">330 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L331" class="LineNr">331 </span>  <span class="Delimiter">}</span>
-<span id="L332" class="LineNr">332 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Comment">// Update INDEX index in Check</span>
-<span id="L334" class="LineNr">334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L335" class="LineNr">335 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'index' should be a number, but got '&quot;</span> &lt;&lt; index<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L336" class="LineNr">336 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Delimiter">}</span>
-<span id="L338" class="LineNr">338 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L339" class="LineNr">339 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L340" class="LineNr">340 </span>  <span class="Comment">// Update INDEX product in Check</span>
-<span id="L341" class="LineNr">341 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L375'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L342" class="LineNr">342 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L343" class="LineNr">343 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' on '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'; type should be '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L344" class="LineNr">344 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Delimiter">}</span>
-<span id="L346" class="LineNr">346 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L347" class="LineNr">347 </span><span class="Delimiter">}</span>
-<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L349" class="LineNr">349 </span><span class="Normal">case</span> INDEX: <span class="Delimiter">{</span>
-<span id="L350" class="LineNr">350 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L351" class="LineNr">351 </span>  <span class="Comment">// Update INDEX base in Run</span>
-<span id="L352" class="LineNr">352 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L353" class="LineNr">353 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;base <a href='043space.cc.html#L80'>address</a> is &quot;</span> &lt;&lt; base_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L354" class="LineNr">354 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L355" class="LineNr">355 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L356" class="LineNr">356 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L357" class="LineNr">357 </span>  <span class="Delimiter">}</span>
-<span id="L358" class="LineNr">358 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <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">1</span><span class="Delimiter">);</span>
-<span id="L359" class="LineNr">359 </span>  <span class="Comment">// Update INDEX index in Run</span>
-<span id="L360" class="LineNr">360 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L362" class="LineNr">362 </span>    <a href='003trace.cc.html#L174'>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;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L363" class="LineNr">363 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span>  <span class="Delimiter">}</span>
-<span id="L365" class="LineNr">365 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L375'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L366" class="LineNr">366 </span>  element<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L367" class="LineNr">367 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; element<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L368" class="LineNr">368 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L369" class="LineNr">369 </span>  <span class="Comment">// Read element</span>
-<span id="L370" class="LineNr">370 </span>  products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<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="L203" class="LineNr">203 </span><span class="SalientComment">//:: To access elements of an array, use 'index'</span>
+<span id="L204" class="LineNr">204 </span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(scenario index)</span>
+<span id="L206" class="LineNr">206 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L207" class="LineNr">207 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L208" class="LineNr">208 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span>/index  <span class="Comment"># the index must be a non-negative whole number</span>
+<span id="L212" class="LineNr">212 </span>]
+<span id="L213" class="LineNr">213 </span><span class="traceContains">+mem: storing 14 in location 10</span>
+<span id="L214" class="LineNr">214 </span>
+<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(scenario index_compound_element)</span>
+<span id="L216" class="LineNr">216 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)}</span><span class="Special"> &lt;- </span>create-array
+<span id="L218" class="LineNr">218 </span>  <span class="Comment"># skip alloc id</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Comment"># skip alloc id</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Comment"># skip alloc id</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Constant">10</span>:<a href='043space.cc.html#L101'>address</a>:num<span class="Special"> &lt;- </span>index <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)},</span> <span class="Constant">0</span>
+<span id="L225" class="LineNr">225 </span>]
+<span id="L226" class="LineNr">226 </span><span class="Comment"># skip alloc id</span>
+<span id="L227" class="LineNr">227 </span><span class="traceContains">+mem: storing 14 in location 11</span>
+<span id="L228" class="LineNr">228 </span>
+<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(scenario index_direct_offset)</span>
+<span id="L230" class="LineNr">230 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L231" class="LineNr">231 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L232" class="LineNr">232 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num<span class="Delimiter">,</span> <span class="Constant">10</span>:num
+<span id="L237" class="LineNr">237 </span>]
+<span id="L238" class="LineNr">238 </span><span class="traceContains">+mem: storing 14 in location 20</span>
+<span id="L239" class="LineNr">239 </span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L241" class="LineNr">241 </span>INDEX<span class="Delimiter">,</span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L243" class="LineNr">243 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> INDEX<span class="Delimiter">);</span>
+<span id="L244" class="LineNr">244 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L245" class="LineNr">245 </span><span class="Normal">case</span> INDEX: <span class="Delimiter">{</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L247" class="LineNr">247 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L248" class="LineNr">248 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L249" class="LineNr">249 </span>  <span class="Delimiter">}</span>
+<span id="L250" class="LineNr">250 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L251" class="LineNr">251 </span>  <span class="Comment">// Update INDEX base in Check</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L253" class="LineNr">253 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' on a non-array '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L254" class="LineNr">254 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L255" class="LineNr">255 </span>  <span class="Delimiter">}</span>
+<span id="L256" class="LineNr">256 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Comment">// Update INDEX index in Check</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L259" class="LineNr">259 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'index' should be a number, but got '&quot;</span> &lt;&lt; index<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L260" class="LineNr">260 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Delimiter">}</span>
+<span id="L262" class="LineNr">262 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L263" class="LineNr">263 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L264" class="LineNr">264 </span>  <span class="Comment">// Update INDEX product in Check</span>
+<span id="L265" class="LineNr">265 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L299'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L267" class="LineNr">267 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'index' on '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' can't be saved in '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'; type should be '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L268" class="LineNr">268 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Delimiter">}</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span><span class="Delimiter">}</span>
+<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L273" class="LineNr">273 </span><span class="Normal">case</span> INDEX: <span class="Delimiter">{</span>
+<span id="L274" class="LineNr">274 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L275" class="LineNr">275 </span>  <span class="Comment">// Update INDEX base in Run</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L277" class="LineNr">277 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;base <a href='043space.cc.html#L101'>address</a> is &quot;</span> &lt;&lt; base_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L279" class="LineNr">279 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L280" class="LineNr">280 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Delimiter">}</span>
+<span id="L282" class="LineNr">282 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <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">1</span><span class="Delimiter">);</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Comment">// Update INDEX index in Run</span>
+<span id="L284" class="LineNr">284 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
+<span id="L285" class="LineNr">285 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L286" class="LineNr">286 </span>    <a href='003trace.cc.html#L197'>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;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L287" class="LineNr">287 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L288" class="LineNr">288 </span>  <span class="Delimiter">}</span>
+<span id="L289" class="LineNr">289 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L299'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L290" class="LineNr">290 </span>  element<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L291" class="LineNr">291 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; element<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L292" class="LineNr">292 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;its type is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Comment">// Read element</span>
+<span id="L294" class="LineNr">294 </span>  products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>element<span class="Delimiter">));</span>
+<span id="L295" class="LineNr">295 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L296" class="LineNr">296 </span><span class="Delimiter">}</span>
+<span id="L297" class="LineNr">297 </span>
+<span id="L298" class="LineNr">298 </span><span class="Delimiter">:(code)</span>
+<span id="L299" class="LineNr">299 </span>type_tree* <a href='032array.cc.html#L299'>copy_array_element</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*array_element<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
+<span id="L301" class="LineNr">301 </span><span class="Delimiter">}</span>
+<span id="L302" class="LineNr">302 </span>
+<span id="L303" class="LineNr">303 </span>type_tree* <a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L304" class="LineNr">304 </span>  assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L305" class="LineNr">305 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L306" class="LineNr">306 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L307" class="LineNr">307 </span>  <span class="Delimiter">}</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L309" class="LineNr">309 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Delimiter">}</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Comment">// hack: support array:num:3 without requiring extra parens</span>
+<span id="L312" class="LineNr">312 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left &amp;&amp; type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_integer<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L313" class="LineNr">313 </span>    assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L314" class="LineNr">314 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">}</span>
+<span id="L318" class="LineNr">318 </span>
+<span id="L319" class="LineNr">319 </span><span class="Normal">int</span> <a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L320" class="LineNr">320 </span>  <span class="Comment">// x should already be canonized.</span>
+<span id="L321" class="LineNr">321 </span>  <span class="Comment">// hack: look for length in type</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right  <span class="Comment">// exactly 3 types</span>
+<span id="L323" class="LineNr">323 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// third 'type' is a number</span>
+<span id="L324" class="LineNr">324 </span>    <span class="Comment">// get size from type</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Identifier">return</span> to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Comment">// this should never happen at transform time</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L329" class="LineNr">329 </span><span class="Delimiter">}</span>
+<span id="L330" class="LineNr">330 </span>
+<span id="L331" class="LineNr">331 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
+<span id="L332" class="LineNr">332 </span><span class="Normal">void</span> <a href='032array.cc.html#L332'>test_array_length_compound</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L333" class="LineNr">333 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L334" class="LineNr">334 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">14</span><span class="Delimiter">);</span>
+<span id="L335" class="LineNr">335 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">);</span>
+<span id="L336" class="LineNr">336 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">16</span><span class="Delimiter">);</span>
+<span id="L337" class="LineNr">337 </span>  reagent x<span class="Delimiter">(</span><span class="Constant">&quot;1:array:<a href='043space.cc.html#L101'>address</a>:num&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// 3 types, but not a static array</span>
+<span id="L338" class="LineNr">338 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L339" class="LineNr">339 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">(</span>x<span class="Delimiter">),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L340" class="LineNr">340 </span><span class="Delimiter">}</span>
+<span id="L341" class="LineNr">341 </span>
+<span id="L342" class="LineNr">342 </span><span class="Normal">void</span> <a href='032array.cc.html#L342'>test_array_length_static</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L343" class="LineNr">343 </span>  reagent x<span class="Delimiter">(</span><span class="Constant">&quot;1:array:num:3&quot;</span><span class="Delimiter">);</span>
+<span id="L344" class="LineNr">344 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">(</span>x<span class="Delimiter">),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L345" class="LineNr">345 </span><span class="Delimiter">}</span>
+<span id="L346" class="LineNr">346 </span>
+<span id="L347" class="LineNr">347 </span><span class="Delimiter">:(scenario index_truncates)</span>
+<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L349" class="LineNr">349 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L350" class="LineNr">350 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
+<span id="L352" class="LineNr">352 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
+<span id="L353" class="LineNr">353 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">1.5</span>  <span class="Comment"># non-whole number</span>
+<span id="L354" class="LineNr">354 </span>]
+<span id="L355" class="LineNr">355 </span><span class="Comment"># fraction is truncated away</span>
+<span id="L356" class="LineNr">356 </span><span class="traceContains">+mem: storing 15 in location 10</span>
+<span id="L357" class="LineNr">357 </span>
+<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(scenario index_out_of_bounds)</span>
+<span id="L359" class="LineNr">359 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L360" class="LineNr">360 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L361" class="LineNr">361 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L362" class="LineNr">362 </span>  index <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>  <span class="Comment"># less than size of array in locations, but larger than its length in elements</span>
+<span id="L363" class="LineNr">363 </span>]
+<span id="L364" class="LineNr">364 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index 4 in 'index 1:array:point:3, 4'</span>
+<span id="L365" class="LineNr">365 </span>
+<span id="L366" class="LineNr">366 </span><span class="Delimiter">:(scenario index_out_of_bounds_2)</span>
+<span id="L367" class="LineNr">367 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L368" class="LineNr">368 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L369" class="LineNr">369 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L370" class="LineNr">370 </span>  index <span class="Constant">1</span>:array:num<span class="Delimiter">,</span> -<span class="Constant">1</span>
+<span id="L371" class="LineNr">371 </span>]
+<span id="L372" class="LineNr">372 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index -1 in 'index 1:array:num, -1'</span>
 <span id="L373" class="LineNr">373 </span>
-<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(code)</span>
-<span id="L375" class="LineNr">375 </span>type_tree* <a href='032array.cc.html#L375'>copy_array_element</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Identifier">return</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*array_element<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span>
-<span id="L379" class="LineNr">379 </span>type_tree* <a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L380" class="LineNr">380 </span>  assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L382" class="LineNr">382 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L383" class="LineNr">383 </span>  <span class="Delimiter">}</span>
-<span id="L384" class="LineNr">384 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L385" class="LineNr">385 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L386" class="LineNr">386 </span>  <span class="Delimiter">}</span>
-<span id="L387" class="LineNr">387 </span>  <span class="Comment">// hack: support array:num:3 without requiring extra parens</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left &amp;&amp; type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_integer<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L389" class="LineNr">389 </span>    assert<span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L390" class="LineNr">390 </span>    <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L391" class="LineNr">391 </span>  <span class="Delimiter">}</span>
-<span id="L392" class="LineNr">392 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L393" class="LineNr">393 </span><span class="Delimiter">}</span>
-<span id="L394" class="LineNr">394 </span>
-<span id="L395" class="LineNr">395 </span><span class="Normal">int</span> <a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Comment">// x should already be canonized.</span>
-<span id="L397" class="LineNr">397 </span>  <span class="Comment">// hack: look for length in type</span>
-<span id="L398" class="LineNr">398 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>atom &amp;&amp; !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right  <span class="Comment">// exactly 3 types</span>
-<span id="L399" class="LineNr">399 </span>      &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// third 'type' is a number</span>
-<span id="L400" class="LineNr">400 </span>    <span class="Comment">// get size from type</span>
-<span id="L401" class="LineNr">401 </span>    <span class="Identifier">return</span> to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L402" class="LineNr">402 </span>  <span class="Delimiter">}</span>
-<span id="L403" class="LineNr">403 </span>  <span class="Comment">// this should never happen at transform time</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
-<span id="L405" class="LineNr">405 </span><span class="Delimiter">}</span>
-<span id="L406" class="LineNr">406 </span>
-<span id="L407" class="LineNr">407 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L408" class="LineNr">408 </span><span class="Normal">void</span> <a href='032array.cc.html#L408'>test_array_length_compound</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L409" class="LineNr">409 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L410" class="LineNr">410 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">14</span><span class="Delimiter">);</span>
-<span id="L411" class="LineNr">411 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">);</span>
-<span id="L412" class="LineNr">412 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">16</span><span class="Delimiter">);</span>
-<span id="L413" class="LineNr">413 </span>  reagent x<span class="Delimiter">(</span><span class="Constant">&quot;1:array:<a href='043space.cc.html#L80'>address</a>:num&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// 3 types, but not a static array</span>
-<span id="L414" class="LineNr">414 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L415" class="LineNr">415 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">(</span>x<span class="Delimiter">),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L416" class="LineNr">416 </span><span class="Delimiter">}</span>
-<span id="L417" class="LineNr">417 </span>
-<span id="L418" class="LineNr">418 </span><span class="Normal">void</span> <a href='032array.cc.html#L418'>test_array_length_static</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L419" class="LineNr">419 </span>  reagent x<span class="Delimiter">(</span><span class="Constant">&quot;1:array:num:3&quot;</span><span class="Delimiter">);</span>
-<span id="L420" class="LineNr">420 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">(</span>x<span class="Delimiter">),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L421" class="LineNr">421 </span><span class="Delimiter">}</span>
-<span id="L422" class="LineNr">422 </span>
-<span id="L423" class="LineNr">423 </span><span class="Delimiter">:(scenario index_truncates)</span>
-<span id="L424" class="LineNr">424 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L425" class="LineNr">425 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L426" class="LineNr">426 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L428" class="LineNr">428 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L429" class="LineNr">429 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">1.5</span>  <span class="Comment"># non-whole number</span>
-<span id="L430" class="LineNr">430 </span>]
-<span id="L431" class="LineNr">431 </span><span class="Comment"># fraction is truncated away</span>
-<span id="L432" class="LineNr">432 </span><span class="traceContains">+mem: storing 15 in location 5</span>
-<span id="L433" class="LineNr">433 </span>
-<span id="L434" class="LineNr">434 </span><span class="Delimiter">:(scenario index_out_of_bounds)</span>
-<span id="L435" class="LineNr">435 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L436" class="LineNr">436 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L437" class="LineNr">437 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L438" class="LineNr">438 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L439" class="LineNr">439 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L440" class="LineNr">440 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L441" class="LineNr">441 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L442" class="LineNr">442 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L443" class="LineNr">443 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L444" class="LineNr">444 </span>  index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>  <span class="Comment"># less than size of array in locations, but larger than its length in elements</span>
-<span id="L445" class="LineNr">445 </span>]
-<span id="L446" class="LineNr">446 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index 4 in 'index 1:array:num:3, 4'</span>
-<span id="L447" class="LineNr">447 </span>
-<span id="L448" class="LineNr">448 </span><span class="Delimiter">:(scenario index_out_of_bounds_2)</span>
-<span id="L449" class="LineNr">449 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L450" class="LineNr">450 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L451" class="LineNr">451 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L452" class="LineNr">452 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L453" class="LineNr">453 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L454" class="LineNr">454 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L455" class="LineNr">455 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L456" class="LineNr">456 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L457" class="LineNr">457 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L458" class="LineNr">458 </span>  index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> -<span class="Constant">1</span>
-<span id="L459" class="LineNr">459 </span>]
-<span id="L460" class="LineNr">460 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index -1 in 'index 1:array:point, -1'</span>
-<span id="L461" class="LineNr">461 </span>
-<span id="L462" class="LineNr">462 </span><span class="Delimiter">:(scenario index_product_type_mismatch)</span>
-<span id="L463" class="LineNr">463 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L464" class="LineNr">464 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L465" class="LineNr">465 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L466" class="LineNr">466 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L467" class="LineNr">467 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L468" class="LineNr">468 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L469" class="LineNr">469 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L470" class="LineNr">470 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L471" class="LineNr">471 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L472" class="LineNr">472 </span>  <span class="Constant">9</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(scenario index_product_type_mismatch)</span>
+<span id="L375" class="LineNr">375 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L376" class="LineNr">376 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L377" class="LineNr">377 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L378" class="LineNr">378 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L379" class="LineNr">379 </span>]
+<span id="L380" class="LineNr">380 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'index' on '1:array:point' can't be saved in '10:num'; type should be 'point'</span>
+<span id="L381" class="LineNr">381 </span>
+<span id="L382" class="LineNr">382 </span><span class="Comment">//: we might want to call 'index' without saving the results, say in a sandbox</span>
+<span id="L383" class="LineNr">383 </span>
+<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(scenario index_without_product)</span>
+<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L386" class="LineNr">386 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L387" class="LineNr">387 </span>  index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L388" class="LineNr">388 </span>]
+<span id="L389" class="LineNr">389 </span><span class="Comment"># just don't die</span>
+<span id="L390" class="LineNr">390 </span>
+<span id="L391" class="LineNr">391 </span><span class="SalientComment">//:: To write to elements of arrays, use 'put'.</span>
+<span id="L392" class="LineNr">392 </span>
+<span id="L393" class="LineNr">393 </span><span class="Delimiter">:(scenario put_index)</span>
+<span id="L394" class="LineNr">394 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L395" class="LineNr">395 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L396" class="LineNr">396 </span>  <span class="Constant">1</span>:array:num<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:num<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L397" class="LineNr">397 </span>]
+<span id="L398" class="LineNr">398 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L399" class="LineNr">399 </span>
+<span id="L400" class="LineNr">400 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L401" class="LineNr">401 </span>PUT_INDEX<span class="Delimiter">,</span>
+<span id="L402" class="LineNr">402 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L403" class="LineNr">403 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;put-index&quot;</span><span class="Delimiter">,</span> PUT_INDEX<span class="Delimiter">);</span>
+<span id="L404" class="LineNr">404 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L405" class="LineNr">405 </span><span class="Normal">case</span> PUT_INDEX: <span class="Delimiter">{</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L407" class="LineNr">407 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index' expects exactly 3 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L408" class="LineNr">408 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L409" class="LineNr">409 </span>  <span class="Delimiter">}</span>
+<span id="L410" class="LineNr">410 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L411" class="LineNr">411 </span>  <span class="Comment">// Update PUT_INDEX base in Check</span>
+<span id="L412" class="LineNr">412 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L413" class="LineNr">413 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index' on a non-array '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L414" class="LineNr">414 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span>  <span class="Delimiter">}</span>
+<span id="L416" class="LineNr">416 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L417" class="LineNr">417 </span>  <span class="Comment">// Update PUT_INDEX index in Check</span>
+<span id="L418" class="LineNr">418 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L419" class="LineNr">419 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'put-index' should have type 'number', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L420" class="LineNr">420 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Delimiter">}</span>
+<span id="L422" class="LineNr">422 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> value = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L423" class="LineNr">423 </span>  <span class="Comment">// Update PUT_INDEX value in Check</span>
+<span id="L424" class="LineNr">424 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L299'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L425" class="LineNr">425 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>element<span class="Delimiter">,</span> value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L426" class="LineNr">426 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should store &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; value<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>value<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L427" class="LineNr">427 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L428" class="LineNr">428 </span>  <span class="Delimiter">}</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// no more checks necessary</span>
+<span id="L430" class="LineNr">430 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L431" class="LineNr">431 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L432" class="LineNr">432 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Delimiter">}</span>
+<span id="L434" class="LineNr">434 </span>  <span class="Comment">// End PUT_INDEX Product Checks</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L436" class="LineNr">436 </span><span class="Delimiter">}</span>
+<span id="L437" class="LineNr">437 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L438" class="LineNr">438 </span><span class="Normal">case</span> PUT_INDEX: <span class="Delimiter">{</span>
+<span id="L439" class="LineNr">439 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L440" class="LineNr">440 </span>  <span class="Comment">// Update PUT_INDEX base in Run</span>
+<span id="L441" class="LineNr">441 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L442" class="LineNr">442 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L443" class="LineNr">443 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L444" class="LineNr">444 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L445" class="LineNr">445 </span>  <span class="Delimiter">}</span>
+<span id="L446" class="LineNr">446 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <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">1</span><span class="Delimiter">);</span>
+<span id="L447" class="LineNr">447 </span>  <span class="Comment">// Update PUT_INDEX index in Run</span>
+<span id="L448" class="LineNr">448 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L450" class="LineNr">450 </span>    <a href='003trace.cc.html#L197'>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;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L451" class="LineNr">451 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L452" class="LineNr">452 </span>  <span class="Delimiter">}</span>
+<span id="L453" class="LineNr">453 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span><a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
+<span id="L454" class="LineNr">454 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy to is &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L455" class="LineNr">455 </span>  <span class="Comment">// optimization: directly write the element rather than updating 'product'</span>
+<span id="L456" class="LineNr">456 </span>  <span class="Comment">// and writing the entire array</span>
+<span id="L457" class="LineNr">457 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L458" class="LineNr">458 </span>  vector&lt;<span class="Normal">double</span>&gt; value = read_memory<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">2</span><span class="Delimiter">));</span>
+<span id="L459" class="LineNr">459 </span>  <span class="Comment">// Write Memory in PUT_INDEX in Run</span>
+<span id="L460" class="LineNr">460 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>value<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L461" class="LineNr">461 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; address+i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L462" class="LineNr">462 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+i<span class="Delimiter">,</span> value<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L463" class="LineNr">463 </span>  <span class="Delimiter">}</span>
+<span id="L464" class="LineNr">464 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L465" class="LineNr">465 </span><span class="Delimiter">}</span>
+<span id="L466" class="LineNr">466 </span>
+<span id="L467" class="LineNr">467 </span><span class="Delimiter">:(scenario put_index_out_of_bounds)</span>
+<span id="L468" class="LineNr">468 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L469" class="LineNr">469 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L470" class="LineNr">470 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L471" class="LineNr">471 </span>  <span class="Constant">8</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L472" class="LineNr">472 </span>  <span class="Constant">1</span>:array:point<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">8</span>:point  <span class="Comment"># '4' is less than size of array in locations, but larger than its length in elements</span>
 <span id="L473" class="LineNr">473 </span>]
-<span id="L474" class="LineNr">474 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'index' on '1:array:point' can't be saved in '9:num'; type should be 'point'</span>
+<span id="L474" class="LineNr">474 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index 4 in '1:array:point &lt;- put-index 1:array:point, 4, 8:point'</span>
 <span id="L475" class="LineNr">475 </span>
-<span id="L476" class="LineNr">476 </span><span class="Comment">//: we might want to call 'index' without saving the results, say in a sandbox</span>
-<span id="L477" class="LineNr">477 </span>
-<span id="L478" class="LineNr">478 </span><span class="Delimiter">:(scenario index_without_product)</span>
-<span id="L479" class="LineNr">479 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L480" class="LineNr">480 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L481" class="LineNr">481 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L482" class="LineNr">482 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L483" class="LineNr">483 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L484" class="LineNr">484 </span>  index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L485" class="LineNr">485 </span>]
-<span id="L486" class="LineNr">486 </span><span class="Comment"># just don't die</span>
-<span id="L487" class="LineNr">487 </span>
-<span id="L488" class="LineNr">488 </span><span class="SalientComment">//:: To write to elements of arrays, use 'put'.</span>
-<span id="L489" class="LineNr">489 </span>
-<span id="L490" class="LineNr">490 </span><span class="Delimiter">:(scenario put_index)</span>
-<span id="L491" class="LineNr">491 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L492" class="LineNr">492 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L493" class="LineNr">493 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L494" class="LineNr">494 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L495" class="LineNr">495 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L496" class="LineNr">496 </span>  <span class="Constant">1</span>:array:num<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:num<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L497" class="LineNr">497 </span>]
-<span id="L498" class="LineNr">498 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L499" class="LineNr">499 </span>
-<span id="L500" class="LineNr">500 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L501" class="LineNr">501 </span>PUT_INDEX<span class="Delimiter">,</span>
-<span id="L502" class="LineNr">502 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L503" class="LineNr">503 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;put-index&quot;</span><span class="Delimiter">,</span> PUT_INDEX<span class="Delimiter">);</span>
-<span id="L504" class="LineNr">504 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L505" class="LineNr">505 </span><span class="Normal">case</span> PUT_INDEX: <span class="Delimiter">{</span>
-<span id="L506" class="LineNr">506 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L507" class="LineNr">507 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index' expects exactly 3 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L508" class="LineNr">508 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L509" class="LineNr">509 </span>  <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> base = 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="L511" class="LineNr">511 </span>  <span class="Comment">// Update PUT_INDEX base in Check</span>
-<span id="L512" class="LineNr">512 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>base<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L513" class="LineNr">513 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index' on a non-array '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L514" class="LineNr">514 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L515" class="LineNr">515 </span>  <span class="Delimiter">}</span>
-<span id="L516" class="LineNr">516 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L517" class="LineNr">517 </span>  <span class="Comment">// Update PUT_INDEX index in Check</span>
-<span id="L518" class="LineNr">518 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L519" class="LineNr">519 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'put-index' should have type 'number', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L520" class="LineNr">520 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L521" class="LineNr">521 </span>  <span class="Delimiter">}</span>
-<span id="L522" class="LineNr">522 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> value = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L523" class="LineNr">523 </span>  <span class="Comment">// Update PUT_INDEX value in Check</span>
-<span id="L524" class="LineNr">524 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> element<span class="Delimiter">(</span><a href='032array.cc.html#L375'>copy_array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L525" class="LineNr">525 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>element<span class="Delimiter">,</span> value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L526" class="LineNr">526 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'put-index &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should store &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; value<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>value<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L527" class="LineNr">527 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L528" class="LineNr">528 </span>  <span class="Delimiter">}</span>
-<span id="L529" class="LineNr">529 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// no more checks necessary</span>
-<span id="L530" class="LineNr">530 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L531" class="LineNr">531 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L532" class="LineNr">532 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L533" class="LineNr">533 </span>  <span class="Delimiter">}</span>
-<span id="L534" class="LineNr">534 </span>  <span class="Comment">// End PUT_INDEX Product Checks</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>
-<span id="L537" class="LineNr">537 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L538" class="LineNr">538 </span><span class="Normal">case</span> PUT_INDEX: <span class="Delimiter">{</span>
-<span id="L539" class="LineNr">539 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L540" class="LineNr">540 </span>  <span class="Comment">// Update PUT_INDEX base in Run</span>
-<span id="L541" class="LineNr">541 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L542" class="LineNr">542 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L543" class="LineNr">543 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L544" class="LineNr">544 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L545" class="LineNr">545 </span>  <span class="Delimiter">}</span>
-<span id="L546" class="LineNr">546 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> index = <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">1</span><span class="Delimiter">);</span>
-<span id="L547" class="LineNr">547 </span>  <span class="Comment">// Update PUT_INDEX index in Run</span>
-<span id="L548" class="LineNr">548 </span>  vector&lt;<span class="Normal">double</span>&gt; index_val<span class="Delimiter">(</span>read_memory<span class="Delimiter">(</span>index<span class="Delimiter">));</span>
-<span id="L549" class="LineNr">549 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt; <span class="Constant">0</span> || index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &gt;= <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L550" class="LineNr">550 </span>    <a href='003trace.cc.html#L174'>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;invalid index &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L551" class="LineNr">551 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L552" class="LineNr">552 </span>  <span class="Delimiter">}</span>
-<span id="L553" class="LineNr">553 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = base_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + index_val<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span>*size_of<span class="Delimiter">(</span><a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L554" class="LineNr">554 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy to is &quot;</span> &lt;&lt; <a href='043space.cc.html#L80'>address</a> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L555" class="LineNr">555 </span>  <span class="Comment">// optimization: directly write the element rather than updating 'product'</span>
-<span id="L556" class="LineNr">556 </span>  <span class="Comment">// and writing the entire array</span>
-<span id="L557" class="LineNr">557 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span>  vector&lt;<span class="Normal">double</span>&gt; value = read_memory<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">2</span><span class="Delimiter">));</span>
-<span id="L559" class="LineNr">559 </span>  <span class="Comment">// Write Memory in PUT_INDEX in Run</span>
-<span id="L560" class="LineNr">560 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>value<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L561" class="LineNr">561 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; address+i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L562" class="LineNr">562 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+i<span class="Delimiter">,</span> value<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L563" class="LineNr">563 </span>  <span class="Delimiter">}</span>
-<span id="L564" class="LineNr">564 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L565" class="LineNr">565 </span><span class="Delimiter">}</span>
-<span id="L566" class="LineNr">566 </span>
-<span id="L567" class="LineNr">567 </span><span class="Delimiter">:(scenario put_index_out_of_bounds)</span>
-<span id="L568" class="LineNr">568 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L569" class="LineNr">569 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L570" class="LineNr">570 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L571" class="LineNr">571 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L572" class="LineNr">572 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L573" class="LineNr">573 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L574" class="LineNr">574 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L575" class="LineNr">575 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L576" class="LineNr">576 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L577" class="LineNr">577 </span>  <span class="Constant">8</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L578" class="LineNr">578 </span>  <span class="Constant">1</span>:array:point<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">8</span>:point  <span class="Comment"># '4' is less than size of array in locations, but larger than its length in elements</span>
-<span id="L579" class="LineNr">579 </span>]
-<span id="L580" class="LineNr">580 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index 4 in '1:array:point &lt;- put-index 1:array:point, 4, 8:point'</span>
-<span id="L581" class="LineNr">581 </span>
-<span id="L582" class="LineNr">582 </span><span class="Delimiter">:(scenario put_index_out_of_bounds_2)</span>
-<span id="L583" class="LineNr">583 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L584" class="LineNr">584 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L585" class="LineNr">585 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L586" class="LineNr">586 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L587" class="LineNr">587 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L588" class="LineNr">588 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L589" class="LineNr">589 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L590" class="LineNr">590 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L591" class="LineNr">591 </span>  <span class="Constant">7</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L592" class="LineNr">592 </span>  <span class="Constant">8</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L593" class="LineNr">593 </span>  <span class="Constant">1</span>:array:point<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> -<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">8</span>:point
-<span id="L594" class="LineNr">594 </span>]
-<span id="L595" class="LineNr">595 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index -1 in '1:array:point &lt;- put-index 1:array:point, -1, 8:point'</span>
-<span id="L596" class="LineNr">596 </span>
-<span id="L597" class="LineNr">597 </span><span class="Delimiter">:(scenario put_index_product_error)</span>
-<span id="L598" class="LineNr">598 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L599" class="LineNr">599 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L600" class="LineNr">600 </span>  local-scope
-<span id="L601" class="LineNr">601 </span>  load-ingredients
-<span id="L602" class="LineNr">602 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L603" class="LineNr">603 </span>  <span class="Constant">4</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L604" class="LineNr">604 </span>]
-<span id="L605" class="LineNr">605 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put-index' must be first ingredient '1:array:num:3', but got '4:array:num:3'</span>
-<span id="L606" class="LineNr">606 </span>
-<span id="L607" class="LineNr">607 </span><span class="SalientComment">//:: compute the length of an array</span>
-<span id="L608" class="LineNr">608 </span>
-<span id="L609" class="LineNr">609 </span><span class="Delimiter">:(scenario array_length)</span>
-<span id="L610" class="LineNr">610 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L611" class="LineNr">611 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L612" class="LineNr">612 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L613" class="LineNr">613 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L614" class="LineNr">614 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L615" class="LineNr">615 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>length <span class="Constant">1</span>:array:num:<span class="Constant">3</span>
-<span id="L616" class="LineNr">616 </span>]
-<span id="L617" class="LineNr">617 </span><span class="traceContains">+mem: storing 3 in location 5</span>
-<span id="L618" class="LineNr">618 </span>
-<span id="L619" class="LineNr">619 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L620" class="LineNr">620 </span>LENGTH<span class="Delimiter">,</span>
-<span id="L621" class="LineNr">621 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L622" class="LineNr">622 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;length&quot;</span><span class="Delimiter">,</span> LENGTH<span class="Delimiter">);</span>
-<span id="L623" class="LineNr">623 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L624" class="LineNr">624 </span><span class="Normal">case</span> LENGTH: <span class="Delimiter">{</span>
-<span id="L625" class="LineNr">625 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L626" class="LineNr">626 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'length' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L627" class="LineNr">627 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L628" class="LineNr">628 </span>  <span class="Delimiter">}</span>
-<span id="L629" class="LineNr">629 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> array = 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="L630" class="LineNr">630 </span>  <span class="Comment">// Update LENGTH array in Check</span>
-<span id="L631" class="LineNr">631 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>array<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L632" class="LineNr">632 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;tried to calculate length of non-array '&quot;</span> &lt;&lt; array<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L633" class="LineNr">633 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L634" class="LineNr">634 </span>  <span class="Delimiter">}</span>
-<span id="L635" class="LineNr">635 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L636" class="LineNr">636 </span><span class="Delimiter">}</span>
-<span id="L637" class="LineNr">637 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L638" class="LineNr">638 </span><span class="Normal">case</span> LENGTH: <span class="Delimiter">{</span>
-<span id="L639" class="LineNr">639 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> array = <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="L640" class="LineNr">640 </span>  <span class="Comment">// Update LENGTH array in Run</span>
-<span id="L641" class="LineNr">641 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>array<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L642" class="LineNr">642 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L643" class="LineNr">643 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L644" class="LineNr">644 </span>  <span class="Delimiter">}</span>
-<span id="L645" class="LineNr">645 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L646" class="LineNr">646 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
-<span id="L647" class="LineNr">647 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L648" class="LineNr">648 </span><span class="Delimiter">}</span>
-<span id="L649" class="LineNr">649 </span>
-<span id="L650" class="LineNr">650 </span><span class="Comment">//: optimization: none of the instructions in this layer use 'ingredients' so</span>
-<span id="L651" class="LineNr">651 </span><span class="Comment">//: stop copying potentially huge arrays into it.</span>
-<span id="L652" class="LineNr">652 </span><span class="Delimiter">:(before &quot;End should_copy_ingredients Special-cases&quot;)</span>
-<span id="L653" class="LineNr">653 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">;</span>
-<span id="L654" class="LineNr">654 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r == CREATE_ARRAY || r == INDEX || r == PUT_INDEX || r == LENGTH<span class="Delimiter">)</span>
-<span id="L655" class="LineNr">655 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L476" class="LineNr">476 </span><span class="Delimiter">:(scenario put_index_out_of_bounds_2)</span>
+<span id="L477" class="LineNr">477 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L478" class="LineNr">478 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L479" class="LineNr">479 </span>  <span class="Constant">1</span>:array:point:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L480" class="LineNr">480 </span>  <span class="Constant">10</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L481" class="LineNr">481 </span>  <span class="Constant">1</span>:array:point<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:point<span class="Delimiter">,</span> -<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">10</span>:point
+<span id="L482" class="LineNr">482 </span>]
+<span id="L483" class="LineNr">483 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: invalid index -1 in '1:array:point &lt;- put-index 1:array:point, -1, 10:point'</span>
+<span id="L484" class="LineNr">484 </span>
+<span id="L485" class="LineNr">485 </span><span class="Delimiter">:(scenario put_index_product_error)</span>
+<span id="L486" class="LineNr">486 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L487" class="LineNr">487 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L488" class="LineNr">488 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L489" class="LineNr">489 </span>  <span class="Constant">4</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L490" class="LineNr">490 </span>]
+<span id="L491" class="LineNr">491 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put-index' must be first ingredient '1:array:num:3', but got '4:array:num:3'</span>
+<span id="L492" class="LineNr">492 </span>
+<span id="L493" class="LineNr">493 </span><span class="SalientComment">//:: compute the length of an array</span>
+<span id="L494" class="LineNr">494 </span>
+<span id="L495" class="LineNr">495 </span><span class="Delimiter">:(scenario array_length)</span>
+<span id="L496" class="LineNr">496 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L497" class="LineNr">497 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L498" class="LineNr">498 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>length <span class="Constant">1</span>:array:num
+<span id="L499" class="LineNr">499 </span>]
+<span id="L500" class="LineNr">500 </span><span class="traceContains">+mem: storing 3 in location 10</span>
+<span id="L501" class="LineNr">501 </span>
+<span id="L502" class="LineNr">502 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L503" class="LineNr">503 </span>LENGTH<span class="Delimiter">,</span>
+<span id="L504" class="LineNr">504 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L505" class="LineNr">505 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;length&quot;</span><span class="Delimiter">,</span> LENGTH<span class="Delimiter">);</span>
+<span id="L506" class="LineNr">506 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L507" class="LineNr">507 </span><span class="Normal">case</span> LENGTH: <span class="Delimiter">{</span>
+<span id="L508" class="LineNr">508 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L509" class="LineNr">509 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'length' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L510" class="LineNr">510 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L511" class="LineNr">511 </span>  <span class="Delimiter">}</span>
+<span id="L512" class="LineNr">512 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> array = 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="L513" class="LineNr">513 </span>  <span class="Comment">// Update LENGTH array in Check</span>
+<span id="L514" class="LineNr">514 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_array<span class="Delimiter">(</span>array<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L515" class="LineNr">515 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;tried to calculate length of non-array '&quot;</span> &lt;&lt; array<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L516" class="LineNr">516 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L517" class="LineNr">517 </span>  <span class="Delimiter">}</span>
+<span id="L518" class="LineNr">518 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L519" class="LineNr">519 </span><span class="Delimiter">}</span>
+<span id="L520" class="LineNr">520 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L521" class="LineNr">521 </span><span class="Normal">case</span> LENGTH: <span class="Delimiter">{</span>
+<span id="L522" class="LineNr">522 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> array = <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="L523" class="LineNr">523 </span>  <span class="Comment">// Update LENGTH array in Run</span>
+<span id="L524" class="LineNr">524 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>array<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L525" class="LineNr">525 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L526" class="LineNr">526 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L527" class="LineNr">527 </span>  <span class="Delimiter">}</span>
+<span id="L528" class="LineNr">528 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L529" class="LineNr">529 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> array<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L530" class="LineNr">530 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span><span class="Delimiter">}</span>
+<span id="L532" class="LineNr">532 </span>
+<span id="L533" class="LineNr">533 </span><span class="Comment">//: optimization: none of the instructions in this layer use 'ingredients' so</span>
+<span id="L534" class="LineNr">534 </span><span class="Comment">//: stop copying potentially huge arrays into it.</span>
+<span id="L535" class="LineNr">535 </span><span class="Delimiter">:(before &quot;End should_copy_ingredients Special-cases&quot;)</span>
+<span id="L536" class="LineNr">536 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation<span class="Delimiter">;</span>
+<span id="L537" class="LineNr">537 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r == CREATE_ARRAY || r == INDEX || r == PUT_INDEX || r == LENGTH<span class="Delimiter">)</span>
+<span id="L538" class="LineNr">538 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/033exclusive_container.cc.html b/html/033exclusive_container.cc.html
index c1f9c9b9..a62938fa 100644
--- a/html/033exclusive_container.cc.html
+++ b/html/033exclusive_container.cc.html
@@ -71,17 +71,17 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L8" class="LineNr">  8 </span><span class="Comment">//: We'll use this container as a running example, with two number elements.</span>
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">{</span>
-<span id="L10" class="LineNr"> 10 </span><a href='010vm.cc.html#L124'>type_ordinal</a> tmp = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L10" class="LineNr"> 10 </span><a href='010vm.cc.html#L125'>type_ordinal</a> tmp = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
 <span id="L11" class="LineNr"> 11 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>  <span class="Comment">// initialize</span>
-<span id="L12" class="LineNr"> 12 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
+<span id="L12" class="LineNr"> 12 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>kind = <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
 <span id="L13" class="LineNr"> 13 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>name = <span class="Constant">&quot;number-or-point&quot;</span><span class="Delimiter">;</span>
 <span id="L14" class="LineNr"> 14 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;i:number&quot;</span><span class="Delimiter">));</span>
 <span id="L15" class="LineNr"> 15 </span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> tmp<span class="Delimiter">).</span>elements<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;p:point&quot;</span><span class="Delimiter">));</span>
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">}</span>
 <span id="L17" class="LineNr"> 17 </span>
-<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: Tests in this layer often explicitly set up memory before reading it as an</span>
-<span id="L19" class="LineNr"> 19 </span><span class="Comment">//: array. Don't do this in general. I'm tagging exceptions with /raw to keep</span>
-<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: checks in future layers from flagging them.</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: Tests in this layer often explicitly set up memory before reading it as a</span>
+<span id="L19" class="LineNr"> 19 </span><span class="Comment">//: container. Don't do this in general. I'm tagging such cases with /unsafe;</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: they'll be exceptions to later checks.</span>
 <span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(scenario copy_exclusive_container)</span>
 <span id="L22" class="LineNr"> 22 </span><span class="Comment"># Copying exclusive containers copies all their contents and an extra location for the tag.</span>
 <span id="L23" class="LineNr"> 23 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
@@ -95,445 +95,432 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span><span class="traceContains">+mem: storing 35 in location 6</span>
 <span id="L32" class="LineNr"> 32 </span>
 <span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(before &quot;End size_of(type) Special-cases&quot;)</span>
-<span id="L34" class="LineNr"> 34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="Comment">// Compute size_of Exclusive Container</span>
-<span id="L36" class="LineNr"> 36 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> type<span class="Delimiter">).</span>size<span class="Delimiter">;</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">}</span>
-<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(before &quot;End compute_container_sizes Atom Special-cases&quot;)</span>
-<span id="L39" class="LineNr"> 39 </span><span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L40" class="LineNr"> 40 </span>  <a href='033exclusive_container.cc.html#L44'>compute_exclusive_container_sizes</a><span class="Delimiter">(</span>info<span class="Delimiter">,</span> type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">}</span>
-<span id="L42" class="LineNr"> 42 </span>
-<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(code)</span>
-<span id="L44" class="LineNr"> 44 </span><span class="Normal">void</span> <a href='033exclusive_container.cc.html#L44'>compute_exclusive_container_sizes</a><span class="Delimiter">(</span><span class="Normal">const</span> type_info&amp; exclusive_container_info<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* full_type<span class="Delimiter">,</span> set&lt;type_tree&gt;&amp; pending_metadata<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Comment">// size of an exclusive container is the size of its largest variant</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Comment">// (So, like containers, it can only contain arrays if they're static and</span>
-<span id="L47" class="LineNr"> 47 </span>  <span class="Comment">// include their length in the type.)</span>
-<span id="L48" class="LineNr"> 48 </span>  container_metadata metadata<span class="Delimiter">;</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exclusive_container_info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L50" class="LineNr"> 50 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = exclusive_container_info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L51" class="LineNr"> 51 </span>    <span class="Comment">// Compute Exclusive Container Size(element, full_type)</span>
-<span id="L52" class="LineNr"> 52 </span>    compute_container_sizes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L53" class="LineNr"> 53 </span>    <span class="Normal">int</span> variant_size = size_of<span class="Delimiter">(</span>element<span class="Delimiter">);</span>
-<span id="L54" class="LineNr"> 54 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variant_size &gt; metadata<span class="Delimiter">.</span>size<span class="Delimiter">)</span> metadata<span class="Delimiter">.</span>size = variant_size<span class="Delimiter">;</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Delimiter">}</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="Comment">// ...+1 for its tag.</span>
-<span id="L57" class="LineNr"> 57 </span>  ++metadata<span class="Delimiter">.</span>size<span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  Container_metadata<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;type_tree*<span class="Delimiter">,</span> container_metadata&gt;<span class="Delimiter">(</span><span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*full_type<span class="Delimiter">),</span> metadata<span class="Delimiter">));</span>
-<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">}</span>
-<span id="L60" class="LineNr"> 60 </span>
-<span id="L61" class="LineNr"> 61 </span><span class="SalientComment">//:: To access variants of an exclusive container, use 'maybe-convert'.</span>
-<span id="L62" class="LineNr"> 62 </span><span class="Comment">//: It always returns an address (so that you can modify it) or null (to</span>
-<span id="L63" class="LineNr"> 63 </span><span class="Comment">//: signal that the conversion failed (because the container contains a</span>
-<span id="L64" class="LineNr"> 64 </span><span class="Comment">//: different variant).</span>
-<span id="L65" class="LineNr"> 65 </span>
-<span id="L66" class="LineNr"> 66 </span><span class="Comment">//: 'maybe-convert' requires a literal in ingredient 1. We'll use a synonym</span>
-<span id="L67" class="LineNr"> 67 </span><span class="Comment">//: called 'variant'.</span>
-<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L69" class="LineNr"> 69 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;variant&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Comment">// size of an exclusive container is the size of its largest variant</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Comment">// (So like containers, it can't contain arrays.)</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L39" class="LineNr"> 39 </span>    reagent tmp<span class="Delimiter">;</span>
+<span id="L40" class="LineNr"> 40 </span>    tmp<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*type<span class="Delimiter">);</span>
+<span id="L41" class="LineNr"> 41 </span>    <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>variant_type<span class="Delimiter">(</span>tmp<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L42" class="LineNr"> 42 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>size &gt; result<span class="Delimiter">)</span> result = size<span class="Delimiter">;</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Delimiter">}</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Comment">// ...+1 for its tag.</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Identifier">return</span> result+<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span><span class="Delimiter">}</span>
+<span id="L47" class="LineNr"> 47 </span>
+<span id="L48" class="LineNr"> 48 </span><span class="SalientComment">//:: To access variants of an exclusive container, use 'maybe-convert'.</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Comment">//: It always returns an address (so that you can modify it) or null (to</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Comment">//: signal that the conversion failed (because the container contains a</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Comment">//: different variant).</span>
+<span id="L52" class="LineNr"> 52 </span>
+<span id="L53" class="LineNr"> 53 </span><span class="Comment">//: 'maybe-convert' requires a literal in ingredient 1. We'll use a synonym</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Comment">//: called 'variant'.</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L56" class="LineNr"> 56 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;variant&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>
+<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(scenario maybe_convert)</span>
+<span id="L59" class="LineNr"> 59 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L60" class="LineNr"> 60 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Constant">20</span>:point<span class="Delimiter">,</span> <span class="Constant">22</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
+<span id="L64" class="LineNr"> 64 </span>]
+<span id="L65" class="LineNr"> 65 </span><span class="Comment"># boolean</span>
+<span id="L66" class="LineNr"> 66 </span><span class="traceContains">+mem: storing 1 in location 22</span>
+<span id="L67" class="LineNr"> 67 </span><span class="Comment"># point</span>
+<span id="L68" class="LineNr"> 68 </span><span class="traceContains">+mem: storing 35 in location 20</span>
+<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+mem: storing 36 in location 21</span>
 <span id="L70" class="LineNr"> 70 </span>
-<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(scenario maybe_convert)</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(scenario maybe_convert_fail)</span>
 <span id="L72" class="LineNr"> 72 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L73" class="LineNr"> 73 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
 <span id="L74" class="LineNr"> 74 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
 <span id="L75" class="LineNr"> 75 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">20</span>:point<span class="Delimiter">,</span> <span class="Constant">22</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">0:variant</span>
 <span id="L77" class="LineNr"> 77 </span>]
 <span id="L78" class="LineNr"> 78 </span><span class="Comment"># boolean</span>
-<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+mem: storing 1 in location 22</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Comment"># point</span>
-<span id="L81" class="LineNr"> 81 </span><span class="traceContains">+mem: storing 35 in location 20</span>
-<span id="L82" class="LineNr"> 82 </span><span class="traceContains">+mem: storing 36 in location 21</span>
-<span id="L83" class="LineNr"> 83 </span>
-<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(scenario maybe_convert_fail)</span>
-<span id="L85" class="LineNr"> 85 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L86" class="LineNr"> 86 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">0:variant</span>
-<span id="L90" class="LineNr"> 90 </span>]
-<span id="L91" class="LineNr"> 91 </span><span class="Comment"># boolean</span>
-<span id="L92" class="LineNr"> 92 </span><span class="traceContains">+mem: storing 0 in location 21</span>
-<span id="L93" class="LineNr"> 93 </span><span class="Comment"># number: no write</span>
-<span id="L94" class="LineNr"> 94 </span>
-<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L96" class="LineNr"> 96 </span>MAYBE_CONVERT<span class="Delimiter">,</span>
-<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L98" class="LineNr"> 98 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;maybe-convert&quot;</span><span class="Delimiter">,</span> MAYBE_CONVERT<span class="Delimiter">);</span>
-<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L100" class="LineNr">100 </span><span class="Normal">case</span> MAYBE_CONVERT: <span class="Delimiter">{</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L104" class="LineNr">104 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Delimiter">}</span>
-<span id="L106" class="LineNr">106 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L107" class="LineNr">107 </span>  <span class="Comment">// Update MAYBE_CONVERT base in Check</span>
-<span id="L108" class="LineNr">108 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L109" class="LineNr">109 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'maybe-convert' should be an exclusive-container, but got '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L110" class="LineNr">110 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Delimiter">}</span>
-<span id="L112" class="LineNr">112 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L113" class="LineNr">113 </span>  <span class="Comment">// Update MAYBE_CONVERT base_type in Check</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L115" class="LineNr">115 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'maybe-convert' should be an exclusive-container, but got '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L116" class="LineNr">116 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>  <span class="Delimiter">}</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L119" class="LineNr">119 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'maybe-convert' should have type 'variant', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+mem: storing 0 in location 21</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment"># number: no write</span>
+<span id="L81" class="LineNr"> 81 </span>
+<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L83" class="LineNr"> 83 </span>MAYBE_CONVERT<span class="Delimiter">,</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L85" class="LineNr"> 85 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;maybe-convert&quot;</span><span class="Delimiter">,</span> MAYBE_CONVERT<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L87" class="LineNr"> 87 </span><span class="Normal">case</span> MAYBE_CONVERT: <span class="Delimiter">{</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L90" class="LineNr"> 90 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Delimiter">}</span>
+<span id="L93" class="LineNr"> 93 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L94" class="LineNr"> 94 </span>  <span class="Comment">// Update MAYBE_CONVERT base in Check</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L96" class="LineNr"> 96 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'maybe-convert' should be an exclusive-container, but got '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L97" class="LineNr"> 97 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Normal">const</span> type_tree* base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Comment">// Update MAYBE_CONVERT base_type in Check</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_type<span class="Delimiter">-&gt;</span>atom || base_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'maybe-convert' should be an exclusive-container, but got '&quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Delimiter">}</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L106" class="LineNr">106 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'maybe-convert' should have type 'variant', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L107" class="LineNr">107 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Delimiter">}</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L111" class="LineNr">111 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert' expects exactly 2 products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L112" class="LineNr">112 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L115" class="LineNr">115 </span>  <span class="Comment">// Update MAYBE_CONVERT product in Check</span>
+<span id="L116" class="LineNr">116 </span>  reagent&amp; offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>offset<span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset<span class="Delimiter">.</span>value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid tag &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L120" class="LineNr">120 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L121" class="LineNr">121 </span>  <span class="Delimiter">}</span>
-<span id="L122" class="LineNr">122 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L124" class="LineNr">124 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert' expects exactly 2 products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> offset<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> variant<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L124" class="LineNr">124 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L125" class="LineNr">125 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
-<span id="L127" class="LineNr">127 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L128" class="LineNr">128 </span>  <span class="Comment">// Update MAYBE_CONVERT product in Check</span>
-<span id="L129" class="LineNr">129 </span>  reagent&amp; offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L130" class="LineNr">130 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>offset<span class="Delimiter">);</span>
-<span id="L131" class="LineNr">131 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset<span class="Delimiter">.</span>value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L132" class="LineNr">132 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid tag &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L133" class="LineNr">133 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> offset<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>product<span class="Delimiter">,</span> variant<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L137" class="LineNr">137 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'maybe-convert &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>product<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L138" class="LineNr">138 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
-<span id="L140" class="LineNr">140 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L141" class="LineNr">141 </span>  <span class="Comment">// Update MAYBE_CONVERT status in Check</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_boolean<span class="Delimiter">(</span>status<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product yielded by 'maybe-convert' should be a boolean, but tried to write to '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L144" class="LineNr">144 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Delimiter">}</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
-<span id="L148" class="LineNr">148 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L149" class="LineNr">149 </span><span class="Normal">case</span> MAYBE_CONVERT: <span class="Delimiter">{</span>
-<span id="L150" class="LineNr">150 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L151" class="LineNr">151 </span>  <span class="Comment">// Update MAYBE_CONVERT base in Run</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L153" class="LineNr">153 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L154" class="LineNr">154 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L155" class="LineNr">155 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Delimiter">}</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Normal">int</span> tag = <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">1</span><span class="Delimiter">).</span>value<span class="Delimiter">;</span>
-<span id="L158" class="LineNr">158 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L89'>current_instruction</a><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="L159" class="LineNr">159 </span>  <span class="Comment">// Update MAYBE_CONVERT product in Run</span>
-<span id="L160" class="LineNr">160 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L161" class="LineNr">161 </span>  <span class="Comment">// Update MAYBE_CONVERT status in Run</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Comment">// optimization: directly write results to only update first product when necessary</span>
-<span id="L163" class="LineNr">163 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L165" class="LineNr">165 </span>    <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
-<span id="L166" class="LineNr">166 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 1 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L167" class="LineNr">167 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L168" class="LineNr">168 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L169" class="LineNr">169 </span>      <span class="Comment">// Write Memory in Successful MAYBE_CONVERT in Run</span>
-<span id="L170" class="LineNr">170 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; size_of<span class="Delimiter">(</span>variant<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L171" class="LineNr">171 </span>        <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
-<span id="L172" class="LineNr">172 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>value+i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L173" class="LineNr">173 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> product<span class="Delimiter">.</span>value+i<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
-<span id="L174" class="LineNr">174 </span>      <span class="Delimiter">}</span>
-<span id="L175" class="LineNr">175 </span>    <span class="Delimiter">}</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Delimiter">}</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L179" class="LineNr">179 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Delimiter">}</span>
-<span id="L181" class="LineNr">181 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L182" class="LineNr">182 </span><span class="Delimiter">}</span>
-<span id="L183" class="LineNr">183 </span>
-<span id="L184" class="LineNr">184 </span><span class="Delimiter">:(code)</span>
-<span id="L185" class="LineNr">185 </span><span class="Normal">const</span> reagent variant_type<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; base<span class="Delimiter">,</span> <span class="Normal">int</span> tag<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Identifier">return</span> variant_type<span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
-<span id="L187" class="LineNr">187 </span><span class="Delimiter">}</span>
-<span id="L188" class="LineNr">188 </span>
-<span id="L189" class="LineNr">189 </span><span class="Normal">const</span> reagent variant_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> tag<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L190" class="LineNr">190 </span>  assert<span class="Delimiter">(</span>tag &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L191" class="LineNr">191 </span>  <span class="Normal">const</span> type_tree* root_type = type<span class="Delimiter">-&gt;</span>atom ? type : type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L192" class="LineNr">192 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">));</span>
-<span id="L193" class="LineNr">193 </span>  assert<span class="Delimiter">(</span>!get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L195" class="LineNr">195 </span>  assert<span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">);</span>
-<span id="L196" class="LineNr">196 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>tag<span class="Delimiter">);</span>
-<span id="L197" class="LineNr">197 </span>  <span class="Comment">// End variant_type Special-cases</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Identifier">return</span> element<span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span>
-<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(scenario maybe_convert_product_type_mismatch)</span>
-<span id="L202" class="LineNr">202 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L203" class="LineNr">203 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L204" class="LineNr">204 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L205" class="LineNr">205 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
-<span id="L208" class="LineNr">208 </span>]
-<span id="L209" class="LineNr">209 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'maybe-convert 12:number-or-point/unsafe, 1:variant' should write to point but '20' has type number</span>
-<span id="L210" class="LineNr">210 </span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(scenario maybe_convert_dummy_product)</span>
-<span id="L212" class="LineNr">212 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L213" class="LineNr">213 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L216" class="LineNr">216 </span>  _<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
-<span id="L217" class="LineNr">217 </span>]
-<span id="L218" class="LineNr">218 </span>$error: <span class="Constant">0</span>
-<span id="L219" class="LineNr">219 </span>
-<span id="L220" class="LineNr">220 </span><span class="SalientComment">//:: Allow exclusive containers to be defined in Mu code.</span>
-<span id="L221" class="LineNr">221 </span>
-<span id="L222" class="LineNr">222 </span><span class="Delimiter">:(scenario exclusive_container)</span>
-<span id="L223" class="LineNr">223 </span><span class="muData">exclusive-container</span> foo [
-<span id="L224" class="LineNr">224 </span>  <span class="Normal">x</span>:num
-<span id="L225" class="LineNr">225 </span>  <span class="Normal">y</span>:num
-<span id="L226" class="LineNr">226 </span>]
-<span id="L227" class="LineNr">227 </span><span class="traceContains">+parse: --- defining exclusive-container foo</span>
-<span id="L228" class="LineNr">228 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
-<span id="L229" class="LineNr">229 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
-<span id="L232" class="LineNr">232 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;exclusive-container&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L233" class="LineNr">233 </span>  <a href='030container.cc.html#L661'>insert_container</a><span class="Delimiter">(</span>command<span class="Delimiter">,</span> <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">,</span> in<span class="Delimiter">);</span>
-<span id="L234" class="LineNr">234 </span><span class="Delimiter">}</span>
-<span id="L235" class="LineNr">235 </span>
-<span id="L236" class="LineNr">236 </span><span class="Comment">//: arrays are disallowed inside exclusive containers unless their length is</span>
-<span id="L237" class="LineNr">237 </span><span class="Comment">//: fixed in advance</span>
+<span id="L127" class="LineNr">127 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Comment">// Update MAYBE_CONVERT status in Check</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_boolean<span class="Delimiter">(</span>status<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L130" class="LineNr">130 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product yielded by 'maybe-convert' should be a boolean, but tried to write to '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L131" class="LineNr">131 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L134" class="LineNr">134 </span><span class="Delimiter">}</span>
+<span id="L135" class="LineNr">135 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L136" class="LineNr">136 </span><span class="Normal">case</span> MAYBE_CONVERT: <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L138" class="LineNr">138 </span>  <span class="Comment">// Update MAYBE_CONVERT base in Run</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L141" class="LineNr">141 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L142" class="LineNr">142 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Delimiter">}</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Normal">int</span> tag = <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">1</span><span class="Delimiter">).</span>value<span class="Delimiter">;</span>
+<span id="L145" class="LineNr">145 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = <a href='026call.cc.html#L89'>current_instruction</a><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="L146" class="LineNr">146 </span>  <span class="Comment">// Update MAYBE_CONVERT product in Run</span>
+<span id="L147" class="LineNr">147 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> status = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Comment">// Update MAYBE_CONVERT status in Run</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// optimization: directly write results to only update first product when necessary</span>
+<span id="L150" class="LineNr">150 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tag == <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>    <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>base<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 1 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L154" class="LineNr">154 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L155" class="LineNr">155 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L156" class="LineNr">156 </span>      <span class="Comment">// Write Memory in Successful MAYBE_CONVERT in Run</span>
+<span id="L157" class="LineNr">157 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; size_of<span class="Delimiter">(</span>variant<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L158" class="LineNr">158 </span>        <span class="Normal">double</span> val = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+i<span class="Delimiter">);</span>
+<span id="L159" class="LineNr">159 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>val<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>value+i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L160" class="LineNr">160 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> product<span class="Delimiter">.</span>value+i<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
+<span id="L161" class="LineNr">161 </span>      <span class="Delimiter">}</span>
+<span id="L162" class="LineNr">162 </span>    <span class="Delimiter">}</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L165" class="LineNr">165 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0 in location &quot;</span> &lt;&lt; status<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L166" class="LineNr">166 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> status<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Delimiter">}</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
+<span id="L170" class="LineNr">170 </span>
+<span id="L171" class="LineNr">171 </span><span class="Delimiter">:(code)</span>
+<span id="L172" class="LineNr">172 </span><span class="Normal">const</span> reagent variant_type<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; base<span class="Delimiter">,</span> <span class="Normal">int</span> tag<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Identifier">return</span> variant_type<span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
+<span id="L175" class="LineNr">175 </span>
+<span id="L176" class="LineNr">176 </span><span class="Normal">const</span> reagent variant_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> tag<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L177" class="LineNr">177 </span>  assert<span class="Delimiter">(</span>tag &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Normal">const</span> type_tree* root_type = type<span class="Delimiter">-&gt;</span>atom ? type : type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">));</span>
+<span id="L180" class="LineNr">180 </span>  assert<span class="Delimiter">(</span>!get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Normal">const</span> type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L182" class="LineNr">182 </span>  assert<span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">);</span>
+<span id="L183" class="LineNr">183 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>tag<span class="Delimiter">);</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Comment">// End variant_type Special-cases</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Identifier">return</span> element<span class="Delimiter">;</span>
+<span id="L186" class="LineNr">186 </span><span class="Delimiter">}</span>
+<span id="L187" class="LineNr">187 </span>
+<span id="L188" class="LineNr">188 </span><span class="Delimiter">:(scenario maybe_convert_product_type_mismatch)</span>
+<span id="L189" class="LineNr">189 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L194" class="LineNr">194 </span>  <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
+<span id="L195" class="LineNr">195 </span>]
+<span id="L196" class="LineNr">196 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'maybe-convert 12:number-or-point/unsafe, 1:variant' should write to point but '20' has type number</span>
+<span id="L197" class="LineNr">197 </span>
+<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(scenario maybe_convert_dummy_product)</span>
+<span id="L199" class="LineNr">199 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L200" class="LineNr">200 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L201" class="LineNr">201 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L203" class="LineNr">203 </span>  _<span class="Delimiter">,</span> <span class="Constant">21</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">1:variant</span>
+<span id="L204" class="LineNr">204 </span>]
+<span id="L205" class="LineNr">205 </span>$error: <span class="Constant">0</span>
+<span id="L206" class="LineNr">206 </span>
+<span id="L207" class="LineNr">207 </span><span class="SalientComment">//:: Allow exclusive containers to be defined in Mu code.</span>
+<span id="L208" class="LineNr">208 </span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">:(scenario exclusive_container)</span>
+<span id="L210" class="LineNr">210 </span><span class="muData">exclusive-container</span> foo [
+<span id="L211" class="LineNr">211 </span>  <span class="Normal">x</span>:num
+<span id="L212" class="LineNr">212 </span>  <span class="Normal">y</span>:num
+<span id="L213" class="LineNr">213 </span>]
+<span id="L214" class="LineNr">214 </span><span class="traceContains">+parse: --- defining exclusive-container foo</span>
+<span id="L215" class="LineNr">215 </span><span class="traceContains">+parse: element: {x: &quot;number&quot;}</span>
+<span id="L216" class="LineNr">216 </span><span class="traceContains">+parse: element: {y: &quot;number&quot;}</span>
+<span id="L217" class="LineNr">217 </span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
+<span id="L219" class="LineNr">219 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;exclusive-container&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L220" class="LineNr">220 </span>  <a href='030container.cc.html#L446'>insert_container</a><span class="Delimiter">(</span>command<span class="Delimiter">,</span> <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">,</span> in<span class="Delimiter">);</span>
+<span id="L221" class="LineNr">221 </span><span class="Delimiter">}</span>
+<span id="L222" class="LineNr">222 </span>
+<span id="L223" class="LineNr">223 </span><span class="Comment">//: arrays are disallowed inside exclusive containers unless their length is</span>
+<span id="L224" class="LineNr">224 </span><span class="Comment">//: fixed in advance</span>
+<span id="L225" class="LineNr">225 </span>
+<span id="L226" class="LineNr">226 </span><span class="Delimiter">:(scenario exclusive_container_contains_array)</span>
+<span id="L227" class="LineNr">227 </span><span class="muData">exclusive-container</span> foo [
+<span id="L228" class="LineNr">228 </span>  <span class="Normal">x</span>:@:num:<span class="Constant">3</span>
+<span id="L229" class="LineNr">229 </span>]
+<span id="L230" class="LineNr">230 </span>$error: <span class="Constant">0</span>
+<span id="L231" class="LineNr">231 </span>
+<span id="L232" class="LineNr">232 </span><span class="Delimiter">:(scenario exclusive_container_disallows_dynamic_array_element)</span>
+<span id="L233" class="LineNr">233 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L234" class="LineNr">234 </span><span class="muData">exclusive-container</span> foo [
+<span id="L235" class="LineNr">235 </span>  <span class="Normal">x</span>:@:num
+<span id="L236" class="LineNr">236 </span>]
+<span id="L237" class="LineNr">237 </span><span class="traceContains">+error: container 'foo' cannot determine size of element 'x'</span>
 <span id="L238" class="LineNr">238 </span>
-<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(scenario exclusive_container_contains_array)</span>
-<span id="L240" class="LineNr">240 </span><span class="muData">exclusive-container</span> foo [
-<span id="L241" class="LineNr">241 </span>  <span class="Normal">x</span>:array:num:<span class="Constant">3</span>
-<span id="L242" class="LineNr">242 </span>]
-<span id="L243" class="LineNr">243 </span>$error: <span class="Constant">0</span>
-<span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(scenario exclusive_container_disallows_dynamic_array_element)</span>
-<span id="L246" class="LineNr">246 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L247" class="LineNr">247 </span><span class="muData">exclusive-container</span> foo [
-<span id="L248" class="LineNr">248 </span>  <span class="Normal">x</span>:array:num
+<span id="L239" class="LineNr">239 </span><span class="SalientComment">//:: To construct exclusive containers out of variant types, use 'merge'.</span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(scenario lift_to_exclusive_container)</span>
+<span id="L241" class="LineNr">241 </span><span class="muData">exclusive-container</span> foo [
+<span id="L242" class="LineNr">242 </span>  <span class="Normal">x</span>:num
+<span id="L243" class="LineNr">243 </span>  <span class="Normal">y</span>:num
+<span id="L244" class="LineNr">244 </span>]
+<span id="L245" class="LineNr">245 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L246" class="LineNr">246 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:num  <span class="Comment"># tag must be a literal when merging exclusive containers</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Constant">4</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">1</span>:num
 <span id="L249" class="LineNr">249 </span>]
-<span id="L250" class="LineNr">250 </span><span class="traceContains">+error: container 'foo' cannot determine size of element 'x'</span>
-<span id="L251" class="LineNr">251 </span>
-<span id="L252" class="LineNr">252 </span><span class="SalientComment">//:: To construct exclusive containers out of variant types, use 'merge'.</span>
-<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(scenario lift_to_exclusive_container)</span>
-<span id="L254" class="LineNr">254 </span><span class="muData">exclusive-container</span> foo [
-<span id="L255" class="LineNr">255 </span>  <span class="Normal">x</span>:num
-<span id="L256" class="LineNr">256 </span>  <span class="Normal">y</span>:num
-<span id="L257" class="LineNr">257 </span>]
-<span id="L258" class="LineNr">258 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L259" class="LineNr">259 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:num  <span class="Comment"># tag must be a literal when merging exclusive containers</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Constant">4</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">1</span>:num
-<span id="L262" class="LineNr">262 </span>]
-<span id="L263" class="LineNr">263 </span><span class="traceContains">+mem: storing 0 in location 2</span>
-<span id="L264" class="LineNr">264 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L265" class="LineNr">265 </span><span class="traceContains">+mem: storing 1 in location 4</span>
-<span id="L266" class="LineNr">266 </span><span class="traceContains">+mem: storing 34 in location 5</span>
-<span id="L267" class="LineNr">267 </span>
-<span id="L268" class="LineNr">268 </span><span class="Comment">//: type-checking for 'merge' on exclusive containers</span>
-<span id="L269" class="LineNr">269 </span>
-<span id="L270" class="LineNr">270 </span><span class="Delimiter">:(scenario merge_handles_exclusive_container)</span>
-<span id="L271" class="LineNr">271 </span><span class="muData">exclusive-container</span> foo [
-<span id="L272" class="LineNr">272 </span>  <span class="Normal">x</span>:num
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">y</span>:bar
-<span id="L274" class="LineNr">274 </span>]
-<span id="L275" class="LineNr">275 </span><span class="muData">container</span> bar [
-<span id="L276" class="LineNr">276 </span>  <span class="Normal">z</span>:num
+<span id="L250" class="LineNr">250 </span><span class="traceContains">+mem: storing 0 in location 2</span>
+<span id="L251" class="LineNr">251 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L252" class="LineNr">252 </span><span class="traceContains">+mem: storing 1 in location 4</span>
+<span id="L253" class="LineNr">253 </span><span class="traceContains">+mem: storing 34 in location 5</span>
+<span id="L254" class="LineNr">254 </span>
+<span id="L255" class="LineNr">255 </span><span class="Comment">//: type-checking for 'merge' on exclusive containers</span>
+<span id="L256" class="LineNr">256 </span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(scenario merge_handles_exclusive_container)</span>
+<span id="L258" class="LineNr">258 </span><span class="muData">exclusive-container</span> foo [
+<span id="L259" class="LineNr">259 </span>  <span class="Normal">x</span>:num
+<span id="L260" class="LineNr">260 </span>  <span class="Normal">y</span>:bar
+<span id="L261" class="LineNr">261 </span>]
+<span id="L262" class="LineNr">262 </span><span class="muData">container</span> bar [
+<span id="L263" class="LineNr">263 </span>  <span class="Normal">z</span>:num
+<span id="L264" class="LineNr">264 </span>]
+<span id="L265" class="LineNr">265 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L266" class="LineNr">266 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L267" class="LineNr">267 </span>]
+<span id="L268" class="LineNr">268 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L269" class="LineNr">269 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L270" class="LineNr">270 </span>$error: <span class="Constant">0</span>
+<span id="L271" class="LineNr">271 </span>
+<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(scenario merge_requires_literal_tag_for_exclusive_container)</span>
+<span id="L273" class="LineNr">273 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L274" class="LineNr">274 </span><span class="muData">exclusive-container</span> foo [
+<span id="L275" class="LineNr">275 </span>  <span class="Normal">x</span>:num
+<span id="L276" class="LineNr">276 </span>  <span class="Normal">y</span>:bar
 <span id="L277" class="LineNr">277 </span>]
-<span id="L278" class="LineNr">278 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L279" class="LineNr">279 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L278" class="LineNr">278 </span><span class="muData">container</span> bar [
+<span id="L279" class="LineNr">279 </span>  <span class="Normal">z</span>:num
 <span id="L280" class="LineNr">280 </span>]
-<span id="L281" class="LineNr">281 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L282" class="LineNr">282 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L283" class="LineNr">283 </span>$error: <span class="Constant">0</span>
-<span id="L284" class="LineNr">284 </span>
-<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(scenario merge_requires_literal_tag_for_exclusive_container)</span>
-<span id="L286" class="LineNr">286 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L287" class="LineNr">287 </span><span class="muData">exclusive-container</span> foo [
-<span id="L288" class="LineNr">288 </span>  <span class="Normal">x</span>:num
-<span id="L289" class="LineNr">289 </span>  <span class="Normal">y</span>:bar
-<span id="L290" class="LineNr">290 </span>]
-<span id="L291" class="LineNr">291 </span><span class="muData">container</span> bar [
-<span id="L292" class="LineNr">292 </span>  <span class="Normal">z</span>:num
-<span id="L293" class="LineNr">293 </span>]
-<span id="L294" class="LineNr">294 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L295" class="LineNr">295 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L296" class="LineNr">296 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L297" class="LineNr">297 </span>]
-<span id="L298" class="LineNr">298 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: ingredient 0 of 'merge' should be a literal, for the tag of exclusive-container 'foo' in '2:foo &lt;- merge 1:num, 34'</span>
-<span id="L299" class="LineNr">299 </span>
-<span id="L300" class="LineNr">300 </span><span class="Delimiter">:(scenario merge_handles_exclusive_container_inside_exclusive_container)</span>
-<span id="L301" class="LineNr">301 </span><span class="muData">exclusive-container</span> foo [
-<span id="L302" class="LineNr">302 </span>  <span class="Normal">x</span>:num
-<span id="L303" class="LineNr">303 </span>  <span class="Normal">y</span>:bar
-<span id="L304" class="LineNr">304 </span>]
-<span id="L305" class="LineNr">305 </span><span class="muData">exclusive-container</span> bar [
-<span id="L306" class="LineNr">306 </span>  <span class="Normal">a</span>:num
-<span id="L307" class="LineNr">307 </span>  <span class="Normal">b</span>:num
-<span id="L308" class="LineNr">308 </span>]
-<span id="L309" class="LineNr">309 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L310" class="LineNr">310 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L311" class="LineNr">311 </span>  <span class="Constant">2</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/a<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Constant">4</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">2</span>:bar
-<span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span><span class="traceContains">+mem: storing 0 in location 5</span>
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: storing 34 in location 6</span>
-<span id="L316" class="LineNr">316 </span>$error: <span class="Constant">0</span>
-<span id="L317" class="LineNr">317 </span>
-<span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End <a href='031merge.cc.html#L142'>check_merge_call</a> Special-cases&quot;)</span>
-<span id="L319" class="LineNr">319 </span><span class="Normal">case</span> <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a>: <span class="Delimiter">{</span>
-<span id="L320" class="LineNr">320 </span>  assert<span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L321" class="LineNr">321 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Comment">// easy case: exact match</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
-<span id="L324" class="LineNr">324 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L325" class="LineNr">325 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L326" class="LineNr">326 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; of 'merge' should be a literal, for the tag of exclusive-container '&quot;</span> &lt;&lt; container_info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L327" class="LineNr">327 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Delimiter">}</span>
-<span id="L329" class="LineNr">329 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> ingredient = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">);</span>  <span class="Comment">// unnecessary copy just to keep this function from modifying caller</span>
-<span id="L330" class="LineNr">330 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
-<span id="L331" class="LineNr">331 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient<span class="Delimiter">.</span>value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>container_info<span class="Delimiter">.</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L332" class="LineNr">332 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid tag at &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; for '&quot;</span> &lt;&lt; container_info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L333" class="LineNr">333 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L334" class="LineNr">334 </span>  <span class="Delimiter">}</span>
-<span id="L335" class="LineNr">335 </span>  <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>container<span class="Delimiter">,</span> ingredient<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
-<span id="L336" class="LineNr">336 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;tag: &quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Comment">// replace union with its variant</span>
-<span id="L338" class="LineNr">338 </span>  state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
-<span id="L339" class="LineNr">339 </span>  state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>push<span class="Delimiter">(</span>merge_check_point<span class="Delimiter">(</span>variant<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L340" class="LineNr">340 </span>  ++ingredient_index<span class="Delimiter">;</span>
-<span id="L341" class="LineNr">341 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
-<span id="L343" class="LineNr">343 </span>
-<span id="L344" class="LineNr">344 </span><span class="Delimiter">:(scenario merge_check_container_containing_exclusive_container)</span>
-<span id="L345" class="LineNr">345 </span><span class="muData">container</span> foo [
-<span id="L346" class="LineNr">346 </span>  <span class="Normal">x</span>:num
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">y</span>:bar
-<span id="L348" class="LineNr">348 </span>]
-<span id="L349" class="LineNr">349 </span><span class="muData">exclusive-container</span> bar [
-<span id="L350" class="LineNr">350 </span>  <span class="Normal">x</span>:num
-<span id="L351" class="LineNr">351 </span>  <span class="Normal">y</span>:num
-<span id="L352" class="LineNr">352 </span>]
-<span id="L353" class="LineNr">353 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L354" class="LineNr">354 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L355" class="LineNr">355 </span>]
-<span id="L356" class="LineNr">356 </span><span class="traceContains">+mem: storing 23 in location 1</span>
-<span id="L357" class="LineNr">357 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L358" class="LineNr">358 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L359" class="LineNr">359 </span>$error: <span class="Constant">0</span>
-<span id="L360" class="LineNr">360 </span>
-<span id="L361" class="LineNr">361 </span><span class="Delimiter">:(scenario merge_check_container_containing_exclusive_container_2)</span>
-<span id="L362" class="LineNr">362 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L363" class="LineNr">363 </span><span class="muData">container</span> foo [
-<span id="L364" class="LineNr">364 </span>  <span class="Normal">x</span>:num
-<span id="L365" class="LineNr">365 </span>  <span class="Normal">y</span>:bar
-<span id="L366" class="LineNr">366 </span>]
-<span id="L367" class="LineNr">367 </span><span class="muData">exclusive-container</span> bar [
-<span id="L368" class="LineNr">368 </span>  <span class="Normal">x</span>:num
-<span id="L369" class="LineNr">369 </span>  <span class="Normal">y</span>:num
-<span id="L370" class="LineNr">370 </span>]
-<span id="L371" class="LineNr">371 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L372" class="LineNr">372 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L373" class="LineNr">373 </span>]
-<span id="L374" class="LineNr">374 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too many ingredients in '1:foo &lt;- merge 23, 1/y, 34, 35'</span>
-<span id="L375" class="LineNr">375 </span>
-<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container)</span>
-<span id="L377" class="LineNr">377 </span><span class="muData">exclusive-container</span> foo [
-<span id="L378" class="LineNr">378 </span>  <span class="Normal">x</span>:num
-<span id="L379" class="LineNr">379 </span>  <span class="Normal">y</span>:bar
-<span id="L380" class="LineNr">380 </span>]
-<span id="L381" class="LineNr">381 </span><span class="muData">container</span> bar [
+<span id="L281" class="LineNr">281 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L282" class="LineNr">282 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Constant">2</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L284" class="LineNr">284 </span>]
+<span id="L285" class="LineNr">285 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: ingredient 0 of 'merge' should be a literal, for the tag of exclusive-container 'foo' in '2:foo &lt;- merge 1:num, 34'</span>
+<span id="L286" class="LineNr">286 </span>
+<span id="L287" class="LineNr">287 </span><span class="Delimiter">:(scenario merge_handles_exclusive_container_inside_exclusive_container)</span>
+<span id="L288" class="LineNr">288 </span><span class="muData">exclusive-container</span> foo [
+<span id="L289" class="LineNr">289 </span>  <span class="Normal">x</span>:num
+<span id="L290" class="LineNr">290 </span>  <span class="Normal">y</span>:bar
+<span id="L291" class="LineNr">291 </span>]
+<span id="L292" class="LineNr">292 </span><span class="muData">exclusive-container</span> bar [
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">a</span>:num
+<span id="L294" class="LineNr">294 </span>  <span class="Normal">b</span>:num
+<span id="L295" class="LineNr">295 </span>]
+<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L297" class="LineNr">297 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Constant">2</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/a<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Constant">4</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">2</span>:bar
+<span id="L300" class="LineNr">300 </span>]
+<span id="L301" class="LineNr">301 </span><span class="traceContains">+mem: storing 0 in location 5</span>
+<span id="L302" class="LineNr">302 </span><span class="traceContains">+mem: storing 34 in location 6</span>
+<span id="L303" class="LineNr">303 </span>$error: <span class="Constant">0</span>
+<span id="L304" class="LineNr">304 </span>
+<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(before &quot;End <a href='031merge.cc.html#L142'>check_merge_call</a> Special-cases&quot;)</span>
+<span id="L306" class="LineNr">306 </span><span class="Normal">case</span> <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a>: <span class="Delimiter">{</span>
+<span id="L307" class="LineNr">307 </span>  assert<span class="Delimiter">(</span>state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>top<span class="Delimiter">().</span>container_element_index == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L308" class="LineNr">308 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking exclusive container &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>container<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L309" class="LineNr">309 </span>  <span class="Comment">// easy case: exact match</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>types_strictly_match<span class="Delimiter">(</span>container<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span>
+<span id="L311" class="LineNr">311 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L312" class="LineNr">312 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L313" class="LineNr">313 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; of 'merge' should be a literal, for the tag of exclusive-container '&quot;</span> &lt;&lt; container_info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L314" class="LineNr">314 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> ingredient = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">);</span>  <span class="Comment">// unnecessary copy just to keep this function from modifying caller</span>
+<span id="L317" class="LineNr">317 </span>  <a href='012transform.cc.html#L91'>populate_value</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
+<span id="L318" class="LineNr">318 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient<span class="Delimiter">.</span>value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>container_info<span class="Delimiter">.</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid tag at &quot;</span> &lt;&lt; ingredient_index &lt;&lt; <span class="Constant">&quot; for '&quot;</span> &lt;&lt; container_info<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L320" class="LineNr">320 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>  <span class="Delimiter">}</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Normal">const</span> reagent&amp; variant = variant_type<span class="Delimiter">(</span>container<span class="Delimiter">,</span> ingredient<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
+<span id="L323" class="LineNr">323 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;tag: &quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>value &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Comment">// replace union with its variant</span>
+<span id="L325" class="LineNr">325 </span>  state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
+<span id="L326" class="LineNr">326 </span>  state<span class="Delimiter">.</span>data<span class="Delimiter">.</span>push<span class="Delimiter">(</span>merge_check_point<span class="Delimiter">(</span>variant<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L327" class="LineNr">327 </span>  ++ingredient_index<span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L329" class="LineNr">329 </span><span class="Delimiter">}</span>
+<span id="L330" class="LineNr">330 </span>
+<span id="L331" class="LineNr">331 </span><span class="Delimiter">:(scenario merge_check_container_containing_exclusive_container)</span>
+<span id="L332" class="LineNr">332 </span><span class="muData">container</span> foo [
+<span id="L333" class="LineNr">333 </span>  <span class="Normal">x</span>:num
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">y</span>:bar
+<span id="L335" class="LineNr">335 </span>]
+<span id="L336" class="LineNr">336 </span><span class="muData">exclusive-container</span> bar [
+<span id="L337" class="LineNr">337 </span>  <span class="Normal">x</span>:num
+<span id="L338" class="LineNr">338 </span>  <span class="Normal">y</span>:num
+<span id="L339" class="LineNr">339 </span>]
+<span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L341" class="LineNr">341 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L342" class="LineNr">342 </span>]
+<span id="L343" class="LineNr">343 </span><span class="traceContains">+mem: storing 23 in location 1</span>
+<span id="L344" class="LineNr">344 </span><span class="traceContains">+mem: storing 1 in location 2</span>
+<span id="L345" class="LineNr">345 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L346" class="LineNr">346 </span>$error: <span class="Constant">0</span>
+<span id="L347" class="LineNr">347 </span>
+<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(scenario merge_check_container_containing_exclusive_container_2)</span>
+<span id="L349" class="LineNr">349 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L350" class="LineNr">350 </span><span class="muData">container</span> foo [
+<span id="L351" class="LineNr">351 </span>  <span class="Normal">x</span>:num
+<span id="L352" class="LineNr">352 </span>  <span class="Normal">y</span>:bar
+<span id="L353" class="LineNr">353 </span>]
+<span id="L354" class="LineNr">354 </span><span class="muData">exclusive-container</span> bar [
+<span id="L355" class="LineNr">355 </span>  <span class="Normal">x</span>:num
+<span id="L356" class="LineNr">356 </span>  <span class="Normal">y</span>:num
+<span id="L357" class="LineNr">357 </span>]
+<span id="L358" class="LineNr">358 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L359" class="LineNr">359 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L360" class="LineNr">360 </span>]
+<span id="L361" class="LineNr">361 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too many ingredients in '1:foo &lt;- merge 23, 1/y, 34, 35'</span>
+<span id="L362" class="LineNr">362 </span>
+<span id="L363" class="LineNr">363 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container)</span>
+<span id="L364" class="LineNr">364 </span><span class="muData">exclusive-container</span> foo [
+<span id="L365" class="LineNr">365 </span>  <span class="Normal">x</span>:num
+<span id="L366" class="LineNr">366 </span>  <span class="Normal">y</span>:bar
+<span id="L367" class="LineNr">367 </span>]
+<span id="L368" class="LineNr">368 </span><span class="muData">container</span> bar [
+<span id="L369" class="LineNr">369 </span>  <span class="Normal">x</span>:num
+<span id="L370" class="LineNr">370 </span>  <span class="Normal">y</span>:num
+<span id="L371" class="LineNr">371 </span>]
+<span id="L372" class="LineNr">372 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L373" class="LineNr">373 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L374" class="LineNr">374 </span>]
+<span id="L375" class="LineNr">375 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L376" class="LineNr">376 </span><span class="traceContains">+mem: storing 23 in location 2</span>
+<span id="L377" class="LineNr">377 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L378" class="LineNr">378 </span>$error: <span class="Constant">0</span>
+<span id="L379" class="LineNr">379 </span>
+<span id="L380" class="LineNr">380 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_2)</span>
+<span id="L381" class="LineNr">381 </span><span class="muData">exclusive-container</span> foo [
 <span id="L382" class="LineNr">382 </span>  <span class="Normal">x</span>:num
-<span id="L383" class="LineNr">383 </span>  <span class="Normal">y</span>:num
+<span id="L383" class="LineNr">383 </span>  <span class="Normal">y</span>:bar
 <span id="L384" class="LineNr">384 </span>]
-<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L386" class="LineNr">386 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L387" class="LineNr">387 </span>]
-<span id="L388" class="LineNr">388 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L389" class="LineNr">389 </span><span class="traceContains">+mem: storing 23 in location 2</span>
-<span id="L390" class="LineNr">390 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L391" class="LineNr">391 </span>$error: <span class="Constant">0</span>
-<span id="L392" class="LineNr">392 </span>
-<span id="L393" class="LineNr">393 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_2)</span>
-<span id="L394" class="LineNr">394 </span><span class="muData">exclusive-container</span> foo [
-<span id="L395" class="LineNr">395 </span>  <span class="Normal">x</span>:num
-<span id="L396" class="LineNr">396 </span>  <span class="Normal">y</span>:bar
-<span id="L397" class="LineNr">397 </span>]
-<span id="L398" class="LineNr">398 </span><span class="muData">container</span> bar [
-<span id="L399" class="LineNr">399 </span>  <span class="Normal">x</span>:num
-<span id="L400" class="LineNr">400 </span>  <span class="Normal">y</span>:num
-<span id="L401" class="LineNr">401 </span>]
-<span id="L402" class="LineNr">402 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L403" class="LineNr">403 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">23</span>
-<span id="L404" class="LineNr">404 </span>]
-<span id="L405" class="LineNr">405 </span>$error: <span class="Constant">0</span>
-<span id="L406" class="LineNr">406 </span>
-<span id="L407" class="LineNr">407 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_3)</span>
-<span id="L408" class="LineNr">408 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L409" class="LineNr">409 </span><span class="muData">exclusive-container</span> foo [
-<span id="L410" class="LineNr">410 </span>  <span class="Normal">x</span>:num
-<span id="L411" class="LineNr">411 </span>  <span class="Normal">y</span>:bar
-<span id="L412" class="LineNr">412 </span>]
-<span id="L413" class="LineNr">413 </span><span class="muData">container</span> bar [
-<span id="L414" class="LineNr">414 </span>  <span class="Normal">x</span>:num
-<span id="L415" class="LineNr">415 </span>  <span class="Normal">y</span>:num
-<span id="L416" class="LineNr">416 </span>]
-<span id="L417" class="LineNr">417 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L418" class="LineNr">418 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
-<span id="L419" class="LineNr">419 </span>]
-<span id="L420" class="LineNr">420 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too few ingredients in '1:foo &lt;- merge 1/y, 23'</span>
-<span id="L421" class="LineNr">421 </span>
-<span id="L422" class="LineNr">422 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_4)</span>
-<span id="L423" class="LineNr">423 </span><span class="muData">exclusive-container</span> foo [
-<span id="L424" class="LineNr">424 </span>  <span class="Normal">x</span>:num
-<span id="L425" class="LineNr">425 </span>  <span class="Normal">y</span>:bar
-<span id="L426" class="LineNr">426 </span>]
-<span id="L427" class="LineNr">427 </span><span class="muData">container</span> bar [
-<span id="L428" class="LineNr">428 </span>  <span class="Normal">a</span>:num
-<span id="L429" class="LineNr">429 </span>  <span class="Normal">b</span>:num
-<span id="L430" class="LineNr">430 </span>]
-<span id="L431" class="LineNr">431 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L432" class="LineNr">432 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">24</span>
-<span id="L433" class="LineNr">433 </span>  <span class="Constant">3</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">1</span>:bar
-<span id="L434" class="LineNr">434 </span>]
-<span id="L435" class="LineNr">435 </span>$error: <span class="Constant">0</span>
-<span id="L436" class="LineNr">436 </span>
-<span id="L437" class="LineNr">437 </span><span class="Comment">//: Since the different variants of an exclusive-container might have</span>
-<span id="L438" class="LineNr">438 </span><span class="Comment">//: different sizes, relax the size mismatch check for 'merge' instructions.</span>
-<span id="L439" class="LineNr">439 </span><span class="Delimiter">:(before &quot;End size_mismatch(x) Special-cases&quot;)</span>
-<span id="L440" class="LineNr">440 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>steps<span class="Delimiter">())</span>
-<span id="L441" class="LineNr">441 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation == MERGE
-<span id="L442" class="LineNr">442 </span>    &amp;&amp; !current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
-<span id="L443" class="LineNr">443 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L444" class="LineNr">444 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x = <a href='026call.cc.html#L89'>current_instruction</a><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="L445" class="LineNr">445 </span>  <span class="Comment">// Update size_mismatch Check for MERGE(x)</span>
-<span id="L446" class="LineNr">446 </span>  <span class="Normal">const</span> type_tree* root_type = x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom ? x<span class="Delimiter">.</span>type : x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L447" class="LineNr">447 </span>  assert<span class="Delimiter">(</span>root_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L448" class="LineNr">448 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span>
-<span id="L449" class="LineNr">449 </span>    <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">);</span>
-<span id="L450" class="LineNr">450 </span><span class="Delimiter">}</span>
-<span id="L451" class="LineNr">451 </span>
-<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(scenario merge_exclusive_container_with_mismatched_sizes)</span>
-<span id="L453" class="LineNr">453 </span><span class="muData">container</span> foo [
-<span id="L454" class="LineNr">454 </span>  <span class="Normal">x</span>:num
-<span id="L455" class="LineNr">455 </span>  <span class="Normal">y</span>:num
-<span id="L456" class="LineNr">456 </span>]
-<span id="L457" class="LineNr">457 </span><span class="muData">exclusive-container</span> bar [
-<span id="L458" class="LineNr">458 </span>  <span class="Normal">x</span>:num
-<span id="L459" class="LineNr">459 </span>  <span class="Normal">y</span>:foo
-<span id="L460" class="LineNr">460 </span>]
-<span id="L461" class="LineNr">461 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L462" class="LineNr">462 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L463" class="LineNr">463 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L464" class="LineNr">464 </span>  <span class="Constant">3</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:num
-<span id="L465" class="LineNr">465 </span>  <span class="Constant">6</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/foo<span class="Delimiter">,</span> <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L466" class="LineNr">466 </span>]
-<span id="L467" class="LineNr">467 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L468" class="LineNr">468 </span><span class="traceContains">+mem: storing 34 in location 4</span>
-<span id="L469" class="LineNr">469 </span><span class="Comment"># bar is always 3 large so location 5 is skipped</span>
-<span id="L470" class="LineNr">470 </span><span class="traceContains">+mem: storing 1 in location 6</span>
-<span id="L471" class="LineNr">471 </span><span class="traceContains">+mem: storing 34 in location 7</span>
-<span id="L472" class="LineNr">472 </span><span class="traceContains">+mem: storing 35 in location 8</span>
+<span id="L385" class="LineNr">385 </span><span class="muData">container</span> bar [
+<span id="L386" class="LineNr">386 </span>  <span class="Normal">x</span>:num
+<span id="L387" class="LineNr">387 </span>  <span class="Normal">y</span>:num
+<span id="L388" class="LineNr">388 </span>]
+<span id="L389" class="LineNr">389 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L390" class="LineNr">390 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">23</span>
+<span id="L391" class="LineNr">391 </span>]
+<span id="L392" class="LineNr">392 </span>$error: <span class="Constant">0</span>
+<span id="L393" class="LineNr">393 </span>
+<span id="L394" class="LineNr">394 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_3)</span>
+<span id="L395" class="LineNr">395 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L396" class="LineNr">396 </span><span class="muData">exclusive-container</span> foo [
+<span id="L397" class="LineNr">397 </span>  <span class="Normal">x</span>:num
+<span id="L398" class="LineNr">398 </span>  <span class="Normal">y</span>:bar
+<span id="L399" class="LineNr">399 </span>]
+<span id="L400" class="LineNr">400 </span><span class="muData">container</span> bar [
+<span id="L401" class="LineNr">401 </span>  <span class="Normal">x</span>:num
+<span id="L402" class="LineNr">402 </span>  <span class="Normal">y</span>:num
+<span id="L403" class="LineNr">403 </span>]
+<span id="L404" class="LineNr">404 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L405" class="LineNr">405 </span>  <span class="Constant">1</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
+<span id="L406" class="LineNr">406 </span>]
+<span id="L407" class="LineNr">407 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too few ingredients in '1:foo &lt;- merge 1/y, 23'</span>
+<span id="L408" class="LineNr">408 </span>
+<span id="L409" class="LineNr">409 </span><span class="Delimiter">:(scenario merge_check_exclusive_container_containing_container_4)</span>
+<span id="L410" class="LineNr">410 </span><span class="muData">exclusive-container</span> foo [
+<span id="L411" class="LineNr">411 </span>  <span class="Normal">x</span>:num
+<span id="L412" class="LineNr">412 </span>  <span class="Normal">y</span>:bar
+<span id="L413" class="LineNr">413 </span>]
+<span id="L414" class="LineNr">414 </span><span class="muData">container</span> bar [
+<span id="L415" class="LineNr">415 </span>  <span class="Normal">a</span>:num
+<span id="L416" class="LineNr">416 </span>  <span class="Normal">b</span>:num
+<span id="L417" class="LineNr">417 </span>]
+<span id="L418" class="LineNr">418 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L419" class="LineNr">419 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">24</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Constant">3</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">1</span>:bar
+<span id="L421" class="LineNr">421 </span>]
+<span id="L422" class="LineNr">422 </span>$error: <span class="Constant">0</span>
+<span id="L423" class="LineNr">423 </span>
+<span id="L424" class="LineNr">424 </span><span class="Comment">//: Since the different variants of an exclusive-container might have</span>
+<span id="L425" class="LineNr">425 </span><span class="Comment">//: different sizes, relax the size mismatch check for 'merge' instructions.</span>
+<span id="L426" class="LineNr">426 </span><span class="Delimiter">:(before &quot;End size_mismatch(x) Special-cases&quot;)</span>
+<span id="L427" class="LineNr">427 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='026call.cc.html#L84'>current_step_index</a><span class="Delimiter">()</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>steps<span class="Delimiter">())</span>
+<span id="L428" class="LineNr">428 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>operation == MERGE
+<span id="L429" class="LineNr">429 </span>    &amp;&amp; !current_instruction<span class="Delimiter">().</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
+<span id="L430" class="LineNr">430 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L431" class="LineNr">431 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x = <a href='026call.cc.html#L89'>current_instruction</a><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="L432" class="LineNr">432 </span>  <span class="Comment">// Update size_mismatch Check for MERGE(x)</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Normal">const</span> type_tree* root_type = x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom ? x<span class="Delimiter">.</span>type : x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L434" class="LineNr">434 </span>  assert<span class="Delimiter">(</span>root_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind == <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span>
+<span id="L436" class="LineNr">436 </span>    <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">);</span>
+<span id="L437" class="LineNr">437 </span><span class="Delimiter">}</span>
+<span id="L438" class="LineNr">438 </span>
+<span id="L439" class="LineNr">439 </span><span class="Delimiter">:(scenario merge_exclusive_container_with_mismatched_sizes)</span>
+<span id="L440" class="LineNr">440 </span><span class="muData">container</span> foo [
+<span id="L441" class="LineNr">441 </span>  <span class="Normal">x</span>:num
+<span id="L442" class="LineNr">442 </span>  <span class="Normal">y</span>:num
+<span id="L443" class="LineNr">443 </span>]
+<span id="L444" class="LineNr">444 </span><span class="muData">exclusive-container</span> bar [
+<span id="L445" class="LineNr">445 </span>  <span class="Normal">x</span>:num
+<span id="L446" class="LineNr">446 </span>  <span class="Normal">y</span>:foo
+<span id="L447" class="LineNr">447 </span>]
+<span id="L448" class="LineNr">448 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L449" class="LineNr">449 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L450" class="LineNr">450 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L451" class="LineNr">451 </span>  <span class="Constant">3</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:num
+<span id="L452" class="LineNr">452 </span>  <span class="Constant">6</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/foo<span class="Delimiter">,</span> <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L453" class="LineNr">453 </span>]
+<span id="L454" class="LineNr">454 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L455" class="LineNr">455 </span><span class="traceContains">+mem: storing 34 in location 4</span>
+<span id="L456" class="LineNr">456 </span><span class="Comment"># bar is always 3 large so location 5 is skipped</span>
+<span id="L457" class="LineNr">457 </span><span class="traceContains">+mem: storing 1 in location 6</span>
+<span id="L458" class="LineNr">458 </span><span class="traceContains">+mem: storing 34 in location 7</span>
+<span id="L459" class="LineNr">459 </span><span class="traceContains">+mem: storing 35 in location 8</span>
 </pre>
 </body>
 </html>
diff --git a/html/034address.cc.html b/html/034address.cc.html
index 48fcd0aa..a1beb9aa 100644
--- a/html/034address.cc.html
+++ b/html/034address.cc.html
@@ -81,320 +81,426 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span><span class="Comment">//: write to the payload of an ingredient rather than its value, simply add</span>
 <span id="L19" class="LineNr"> 19 </span><span class="Comment">//: the /lookup property to it. Modern computers provide efficient support for</span>
 <span id="L20" class="LineNr"> 20 </span><span class="Comment">//: addresses and lookups, making this a realistic feature.</span>
-<span id="L21" class="LineNr"> 21 </span>
-<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: todo: give 'new' a custodian ingredient. Following malloc/free is a temporary hack.</span>
-<span id="L23" class="LineNr"> 23 </span>
-<span id="L24" class="LineNr"> 24 </span><span class="Delimiter">:(scenario new)</span>
-<span id="L25" class="LineNr"> 25 </span><span class="Comment"># call 'new' two times with identical types without modifying the results; you</span>
-<span id="L26" class="LineNr"> 26 </span><span class="Comment"># should get back different results</span>
-<span id="L27" class="LineNr"> 27 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L28" class="LineNr"> 28 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L29" class="LineNr"> 29 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L30" class="LineNr"> 30 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span>/<span class="Special">raw &lt;- </span>equal <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span>
-<span id="L31" class="LineNr"> 31 </span>]
-<span id="L32" class="LineNr"> 32 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Comment">//:</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: To create addresses and allocate memory exclusively for their use, use</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Comment">//: 'new'. Memory is a finite resource so if the computer can't satisfy your</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">//: request, 'new' may return a 0 (null) address.</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Comment">//:</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Comment">//: Computers these days have lots of memory so in practice we can often</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Comment">//: assume we'll never run out. If you start running out however, say in a</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Comment">//: long-running program, you'll need to switch mental gears and start</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Comment">//: husbanding our memory more carefully. The most important tool to avoid</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Comment">//: wasting memory is to 'abandon' an address when you don't need it anymore.</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment">//: That frees up the memory allocated to it to be reused in future calls to</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Comment">//: 'new'.</span>
 <span id="L33" class="LineNr"> 33 </span>
-<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(scenario new_array)</span>
-<span id="L35" class="LineNr"> 35 </span><span class="Comment"># call 'new' with a second ingredient to allocate an array of some type rather than a single copy</span>
-<span id="L36" class="LineNr"> 36 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L37" class="LineNr"> 37 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">5</span>
-<span id="L38" class="LineNr"> 38 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Constant">3</span>:num/<span class="Special">raw &lt;- </span>subtract <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw</span>
-<span id="L40" class="LineNr"> 40 </span>]
-<span id="L41" class="LineNr"> 41 </span><span class="traceContains">+run: {1: (&quot;address&quot; &quot;array&quot; &quot;number&quot;), &quot;raw&quot;: ()} &lt;- new {number: &quot;type&quot;}, {5: &quot;literal&quot;}</span>
-<span id="L42" class="LineNr"> 42 </span><span class="traceContains">+mem: array length is 5</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Comment"># don't forget the extra location for array length</span>
-<span id="L44" class="LineNr"> 44 </span><span class="traceContains">+mem: storing 6 in location 3</span>
-<span id="L45" class="LineNr"> 45 </span>
-<span id="L46" class="LineNr"> 46 </span><span class="Delimiter">:(scenario dilated_reagent_with_new)</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">1</span>:<a href='043space.cc.html#L80'>address</a>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
-<span id="L49" class="LineNr"> 49 </span>]
-<span id="L50" class="LineNr"> 50 </span><span class="traceContains">+new: size of '(address number)' is 1</span>
-<span id="L51" class="LineNr"> 51 </span>
-<span id="L52" class="LineNr"> 52 </span><span class="Comment">//: 'new' takes a weird 'type' as its first ingredient; don't error on it</span>
-<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L54" class="LineNr"> 54 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;type&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(code)</span>
-<span id="L56" class="LineNr"> 56 </span><span class="Normal">bool</span> is_mu_type_literal<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="Identifier">return</span> is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> &amp;&amp; r<span class="Delimiter">.</span>type &amp;&amp; r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;type&quot;</span><span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
-<span id="L59" class="LineNr"> 59 </span>
-<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L61" class="LineNr"> 61 </span>NEW<span class="Delimiter">,</span>
-<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L63" class="LineNr"> 63 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;new&quot;</span><span class="Delimiter">,</span> NEW<span class="Delimiter">);</span>
-<span id="L64" class="LineNr"> 64 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L65" class="LineNr"> 65 </span><span class="Normal">case</span> NEW: <span class="Delimiter">{</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L68" class="LineNr"> 68 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'new' requires one or two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L69" class="LineNr"> 69 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L70" class="LineNr"> 70 </span>  <span class="Delimiter">}</span>
-<span id="L71" class="LineNr"> 71 </span>  <span class="Comment">// End NEW Check Special-cases</span>
-<span id="L72" class="LineNr"> 72 </span>  <span class="Normal">const</span> reagent&amp; type = 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="L73" class="LineNr"> 73 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_type_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L74" class="LineNr"> 74 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'new' should be a type, but got '&quot;</span> &lt;&lt; type<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L75" class="LineNr"> 75 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'new' should be a number (array length), but got '&quot;</span> &lt;&lt; type<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">}</span>
-<span id="L81" class="LineNr"> 81 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result of 'new' should never be ignored</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L83" class="LineNr"> 83 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Delimiter">}</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product_of_new_is_valid<span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L86" class="LineNr"> 86 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of 'new' has incorrect type: '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Delimiter">}</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">}</span>
-<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">:(code)</span>
-<span id="L92" class="LineNr"> 92 </span><span class="Normal">bool</span> product_of_new_is_valid<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L94" class="LineNr"> 94 </span>  <span class="Comment">// Update NEW product in Check</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != Address_type_ordinal<span class="Delimiter">)</span>
-<span id="L96" class="LineNr"> 96 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L97" class="LineNr"> 97 </span>  drop_from_type<span class="Delimiter">(</span>product<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L99" class="LineNr"> 99 </span>    <span class="Comment">// array allocation</span>
-<span id="L100" class="LineNr">100 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != Array_type_ordinal<span class="Delimiter">)</span>
-<span id="L101" class="LineNr">101 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>    drop_from_type<span class="Delimiter">(</span>product<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Delimiter">}</span>
-<span id="L104" class="LineNr">104 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> expected_product<span class="Delimiter">(</span><a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">));</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>product<span class="Delimiter">,</span> expected_product<span class="Delimiter">);</span>
-<span id="L106" class="LineNr">106 </span><span class="Delimiter">}</span>
-<span id="L107" class="LineNr">107 </span>
-<span id="L108" class="LineNr">108 </span><span class="Normal">void</span> drop_from_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> string expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L109" class="LineNr">109 </span>  assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L112" class="LineNr">112 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Comment">// r.type = r.type-&gt;right</span>
-<span id="L115" class="LineNr">115 </span>  type_tree* tmp = r<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>  r<span class="Delimiter">.</span>type = tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>  tmp<span class="Delimiter">-&gt;</span>right = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Normal">delete</span> tmp<span class="Delimiter">;</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Comment">// if (!r.type-&gt;right) r.type = r.type-&gt;left</span>
-<span id="L120" class="LineNr">120 </span>  assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L122" class="LineNr">122 </span>  tmp = r<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>  r<span class="Delimiter">.</span>type = tmp<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L124" class="LineNr">124 </span>  tmp<span class="Delimiter">-&gt;</span>left = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Normal">delete</span> tmp<span class="Delimiter">;</span>
-<span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
-<span id="L127" class="LineNr">127 </span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">:(scenario new_returns_incorrect_type)</span>
-<span id="L129" class="LineNr">129 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L130" class="LineNr">130 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L131" class="LineNr">131 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
-<span id="L132" class="LineNr">132 </span>]
-<span id="L133" class="LineNr">133 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:bool &lt;- new num:type'</span>
-<span id="L134" class="LineNr">134 </span>
-<span id="L135" class="LineNr">135 </span><span class="Delimiter">:(scenario new_discerns_singleton_list_from_atom_container)</span>
-<span id="L136" class="LineNr">136 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L137" class="LineNr">137 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L138" class="LineNr">138 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>  <span class="Comment"># should be '{num: type}'</span>
-<span id="L139" class="LineNr">139 </span>]
-<span id="L140" class="LineNr">140 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:address:num/raw &lt;- new {(num): type}'</span>
-<span id="L141" class="LineNr">141 </span>
-<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(scenario new_with_type_abbreviation)</span>
-<span id="L143" class="LineNr">143 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L144" class="LineNr">144 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
-<span id="L145" class="LineNr">145 </span>]
-<span id="L146" class="LineNr">146 </span>$error: <span class="Constant">0</span>
-<span id="L147" class="LineNr">147 </span>
-<span id="L148" class="LineNr">148 </span><span class="Delimiter">:(scenario new_with_type_abbreviation_inside_compound)</span>
-<span id="L149" class="LineNr">149 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L150" class="LineNr">150 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> <a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">),</span> <span class="Special">raw</span>: <span class="Delimiter">()}</span><span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>&amp; num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
-<span id="L151" class="LineNr">151 </span>]
-<span id="L152" class="LineNr">152 </span>$error: <span class="Constant">0</span>
-<span id="L153" class="LineNr">153 </span>
-<span id="L154" class="LineNr">154 </span><span class="Comment">//: To implement 'new', a Mu transform turns all 'new' instructions into</span>
-<span id="L155" class="LineNr">155 </span><span class="Comment">//: 'allocate' instructions that precompute the amount of memory they want to</span>
-<span id="L156" class="LineNr">156 </span><span class="Comment">//: allocate.</span>
-<span id="L157" class="LineNr">157 </span>
-<span id="L158" class="LineNr">158 </span><span class="Comment">//: Ensure that we never call 'allocate' directly, and that there's no 'new'</span>
-<span id="L159" class="LineNr">159 </span><span class="Comment">//: instructions left after the transforms have run.</span>
-<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L161" class="LineNr">161 </span><span class="Normal">case</span> ALLOCATE: <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;never call 'allocate' directly'; always use 'new'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
-<span id="L165" class="LineNr">165 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L166" class="LineNr">166 </span><span class="Normal">case</span> NEW: <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;no implementation for 'new'; why wasn't it translated to 'allocate'? Please save a copy of your program and send it to Kartik.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
-<span id="L170" class="LineNr">170 </span>
-<span id="L171" class="LineNr">171 </span><span class="Delimiter">:(after &quot;Transform.push_back(check_instruction)&quot;)</span>  <span class="Comment">// check_instruction will guard against direct 'allocate' instructions below</span>
-<span id="L172" class="LineNr">172 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>transform_new_to_allocate<span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L173" class="LineNr">173 </span>
-<span id="L174" class="LineNr">174 </span><span class="Delimiter">:(code)</span>
-<span id="L175" class="LineNr">175 </span><span class="Normal">void</span> transform_new_to_allocate<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- convert 'new' to 'allocate' for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>    instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L179" class="LineNr">179 </span>    <span class="Comment">// Convert 'new' To 'allocate'</span>
-<span id="L180" class="LineNr">180 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L181" class="LineNr">181 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
-<span id="L182" class="LineNr">182 </span>      inst<span class="Delimiter">.</span>operation = ALLOCATE<span class="Delimiter">;</span>
-<span id="L183" class="LineNr">183 </span>      type_tree* type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
-<span id="L184" class="LineNr">184 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>size_of<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L185" class="LineNr">185 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;size of '&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>name &lt;&lt; <span class="Constant">&quot;' is &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>value &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L186" class="LineNr">186 </span>      <span class="Normal">delete</span> type<span class="Delimiter">;</span>
-<span id="L187" class="LineNr">187 </span>    <span class="Delimiter">}</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Delimiter">}</span>
-<span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
-<span id="L190" class="LineNr">190 </span>
-<span id="L191" class="LineNr">191 </span><span class="Comment">//: implement 'allocate' based on size</span>
-<span id="L192" class="LineNr">192 </span>
-<span id="L193" class="LineNr">193 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L194" class="LineNr">194 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Reserved_for_tests = <span class="Constant">1000</span><span class="Delimiter">;</span>
-<span id="L195" class="LineNr">195 </span><span class="Normal">int</span> Memory_allocated_until = Reserved_for_tests<span class="Delimiter">;</span>
-<span id="L196" class="LineNr">196 </span><span class="Normal">int</span> Initial_memory_per_routine = <span class="Constant">100000</span><span class="Delimiter">;</span>
-<span id="L197" class="LineNr">197 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L198" class="LineNr">198 </span>Memory_allocated_until = Reserved_for_tests<span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span>Initial_memory_per_routine = <span class="Constant">100000</span><span class="Delimiter">;</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
-<span id="L201" class="LineNr">201 </span><span class="Normal">int</span> alloc<span class="Delimiter">,</span> alloc_max<span class="Delimiter">;</span>
-<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
-<span id="L203" class="LineNr">203 </span>alloc = Memory_allocated_until<span class="Delimiter">;</span>
-<span id="L204" class="LineNr">204 </span>Memory_allocated_until += Initial_memory_per_routine<span class="Delimiter">;</span>
-<span id="L205" class="LineNr">205 </span>alloc_max = Memory_allocated_until<span class="Delimiter">;</span>
-<span id="L206" class="LineNr">206 </span><a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;routine allocated memory from &quot;</span> &lt;&lt; alloc &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; alloc_max &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L209" class="LineNr">209 </span>ALLOCATE<span class="Delimiter">,</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L211" class="LineNr">211 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;allocate&quot;</span><span class="Delimiter">,</span> ALLOCATE<span class="Delimiter">);</span>
-<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L213" class="LineNr">213 </span><span class="Normal">case</span> ALLOCATE: <span class="Delimiter">{</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Comment">// compute the space we need</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Normal">int</span> size = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L217" class="LineNr">217 </span>    <span class="Comment">// array allocation</span>
-<span id="L218" class="LineNr">218 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;array length is &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L219" class="LineNr">219 </span>    size = <span class="Comment">/*</span><span class="Comment">space for length</span><span class="Comment">*/</span><span class="Constant">1</span> + size*ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L220" class="LineNr">220 </span>  <span class="Delimiter">}</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Normal">int</span> result = allocate<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>    <span class="Comment">// initialize array length</span>
-<span id="L224" class="LineNr">224 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L225" class="LineNr">225 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Delimiter">}</span>
-<span id="L227" class="LineNr">227 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L228" class="LineNr">228 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L230" class="LineNr">230 </span><span class="Delimiter">}</span>
-<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(code)</span>
-<span id="L232" class="LineNr">232 </span><span class="Normal">int</span> allocate<span class="Delimiter">(</span><span class="Normal">int</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L233" class="LineNr">233 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;allocating size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L234" class="LineNr">234 </span><span class="CommentedCode">//?   Total_alloc += size;</span>
-<span id="L235" class="LineNr">235 </span><span class="CommentedCode">//?   ++Num_alloc;</span>
-<span id="L236" class="LineNr">236 </span>  <span class="Comment">// Allocate Special-cases</span>
-<span id="L237" class="LineNr">237 </span>  <span class="Comment">// compute the region of memory to return</span>
-<span id="L238" class="LineNr">238 </span>  <span class="Comment">// really crappy at the moment</span>
-<span id="L239" class="LineNr">239 </span>  ensure_space<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">const</span> <span class="Normal">int</span> result = Current_routine<span class="Delimiter">-&gt;</span>alloc<span class="Delimiter">;</span>
-<span id="L241" class="LineNr">241 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new alloc: &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Comment">// initialize allocated space</span>
-<span id="L243" class="LineNr">243 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = result<span class="Delimiter">;</span>  <a href='043space.cc.html#L80'>address</a> &lt; result+size<span class="Delimiter">;</span>  ++address<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L244" class="LineNr">244 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0 in location &quot;</span> &lt;&lt; <a href='043space.cc.html#L80'>address</a> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L245" class="LineNr">245 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L246" class="LineNr">246 </span>  <span class="Delimiter">}</span>
-<span id="L247" class="LineNr">247 </span>  Current_routine<span class="Delimiter">-&gt;</span>alloc += size<span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>  <span class="Comment">// no support yet for reclaiming memory between routines</span>
-<span id="L249" class="LineNr">249 </span>  assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;= Current_routine<span class="Delimiter">-&gt;</span>alloc_max<span class="Delimiter">);</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L251" class="LineNr">251 </span><span class="Delimiter">}</span>
-<span id="L252" class="LineNr">252 </span>
-<span id="L253" class="LineNr">253 </span><span class="Comment">//: statistics for debugging</span>
-<span id="L254" class="LineNr">254 </span><span class="CommentedCode">//? :(before &quot;End Globals&quot;)</span>
-<span id="L255" class="LineNr">255 </span><span class="CommentedCode">//? int Total_alloc = 0;</span>
-<span id="L256" class="LineNr">256 </span><span class="CommentedCode">//? int Num_alloc = 0;</span>
-<span id="L257" class="LineNr">257 </span><span class="CommentedCode">//? int Total_free = 0;</span>
-<span id="L258" class="LineNr">258 </span><span class="CommentedCode">//? int Num_free = 0;</span>
-<span id="L259" class="LineNr">259 </span><span class="CommentedCode">//? :(before &quot;End Reset&quot;)</span>
-<span id="L260" class="LineNr">260 </span><span class="CommentedCode">//? if (!Memory.empty()) {</span>
-<span id="L261" class="LineNr">261 </span><span class="CommentedCode">//?   cerr &lt;&lt; Total_alloc &lt;&lt; &quot;/&quot; &lt;&lt; Num_alloc</span>
-<span id="L262" class="LineNr">262 </span><span class="CommentedCode">//?        &lt;&lt; &quot; vs &quot; &lt;&lt; Total_free &lt;&lt; &quot;/&quot; &lt;&lt; Num_free &lt;&lt; '\n';</span>
-<span id="L263" class="LineNr">263 </span><span class="CommentedCode">//?   cerr &lt;&lt; SIZE(Memory) &lt;&lt; '\n';</span>
-<span id="L264" class="LineNr">264 </span><span class="CommentedCode">//? }</span>
-<span id="L265" class="LineNr">265 </span><span class="CommentedCode">//? Total_alloc = Num_alloc = Total_free = Num_free = 0;</span>
-<span id="L266" class="LineNr">266 </span>
-<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(code)</span>
-<span id="L268" class="LineNr">268 </span><span class="Normal">void</span> ensure_space<span class="Delimiter">(</span><span class="Normal">int</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L269" class="LineNr">269 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size &gt; Initial_memory_per_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L270" class="LineNr">270 </span>    cerr &lt;&lt; <span class="Constant">&quot;can't allocate &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; locations, that's too much compared to &quot;</span> &lt;&lt; Initial_memory_per_routine &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L271" class="LineNr">271 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Delimiter">}</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>alloc + size &gt; Current_routine<span class="Delimiter">-&gt;</span>alloc_max<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L274" class="LineNr">274 </span>    <span class="Comment">// waste the remaining space and create a new chunk</span>
-<span id="L275" class="LineNr">275 </span>    Current_routine<span class="Delimiter">-&gt;</span>alloc = Memory_allocated_until<span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span>    Memory_allocated_until += Initial_memory_per_routine<span class="Delimiter">;</span>
-<span id="L277" class="LineNr">277 </span>    Current_routine<span class="Delimiter">-&gt;</span>alloc_max = Memory_allocated_until<span class="Delimiter">;</span>
-<span id="L278" class="LineNr">278 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;routine allocated memory from &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc_max &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Delimiter">}</span>
-<span id="L280" class="LineNr">280 </span><span class="Delimiter">}</span>
-<span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Delimiter">:(scenario new_initializes)</span>
-<span id="L283" class="LineNr">283 </span><span class="Special">% Memory_allocated_until = 10;</span>
-<span id="L284" class="LineNr">284 </span><span class="Special">% put(Memory, Memory_allocated_until, 1);</span>
-<span id="L285" class="LineNr">285 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L286" class="LineNr">286 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L287" class="LineNr">287 </span>]
-<span id="L288" class="LineNr">288 </span><span class="traceContains">+mem: storing 0 in location 10</span>
-<span id="L289" class="LineNr">289 </span>
-<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(scenario new_size)</span>
-<span id="L291" class="LineNr">291 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L292" class="LineNr">292 </span>  <span class="Constant">11</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L293" class="LineNr">293 </span>  <span class="Constant">12</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Constant">13</span>:num/<span class="Special">raw &lt;- </span>subtract <span class="Constant">12</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">11</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span>
-<span id="L295" class="LineNr">295 </span>]
-<span id="L296" class="LineNr">296 </span><span class="Comment"># size of number</span>
-<span id="L297" class="LineNr">297 </span><span class="traceContains">+mem: storing 1 in location 13</span>
-<span id="L298" class="LineNr">298 </span>
-<span id="L299" class="LineNr">299 </span><span class="Delimiter">:(scenario new_array_size)</span>
-<span id="L300" class="LineNr">300 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L301" class="LineNr">301 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">5</span>
-<span id="L302" class="LineNr">302 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L303" class="LineNr">303 </span>  <span class="Constant">3</span>:num/<span class="Special">raw &lt;- </span>subtract <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw</span>
-<span id="L304" class="LineNr">304 </span>]
-<span id="L305" class="LineNr">305 </span><span class="Comment"># 5 locations for array contents + array length</span>
-<span id="L306" class="LineNr">306 </span><span class="traceContains">+mem: storing 6 in location 3</span>
-<span id="L307" class="LineNr">307 </span>
-<span id="L308" class="LineNr">308 </span><span class="Delimiter">:(scenario new_empty_array)</span>
-<span id="L309" class="LineNr">309 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L310" class="LineNr">310 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L311" class="LineNr">311 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Constant">3</span>:num/<span class="Special">raw &lt;- </span>subtract <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/<span class="Special">raw</span>
-<span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span><span class="traceContains">+run: {1: (&quot;address&quot; &quot;array&quot; &quot;number&quot;), &quot;raw&quot;: ()} &lt;- new {number: &quot;type&quot;}, {0: &quot;literal&quot;}</span>
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: array length is 0</span>
-<span id="L316" class="LineNr">316 </span><span class="Comment"># one location for array length</span>
-<span id="L317" class="LineNr">317 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L318" class="LineNr">318 </span>
-<span id="L319" class="LineNr">319 </span><span class="Comment">//: If a routine runs out of its initial allocation, it should allocate more.</span>
-<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(scenario new_overflow)</span>
-<span id="L321" class="LineNr">321 </span><span class="Special">% Initial_memory_per_routine = 2;  // barely enough room for point allocation below</span>
-<span id="L322" class="LineNr">322 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L323" class="LineNr">323 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L324" class="LineNr">324 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:point/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">point:type</span>  <span class="Comment"># not enough room in initial page</span>
-<span id="L325" class="LineNr">325 </span>]
-<span id="L326" class="LineNr">326 </span><span class="traceContains">+new: routine allocated memory from 1000 to 1002</span>
-<span id="L327" class="LineNr">327 </span><span class="traceContains">+new: routine allocated memory from 1002 to 1004</span>
-<span id="L328" class="LineNr">328 </span>
-<span id="L329" class="LineNr">329 </span><span class="Delimiter">:(scenario new_without_ingredient)</span>
-<span id="L330" class="LineNr">330 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L331" class="LineNr">331 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L332" class="LineNr">332 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number<span class="Special"> &lt;- </span><span class="Normal">new</span>  <span class="Comment"># missing ingredient</span>
-<span id="L333" class="LineNr">333 </span>]
-<span id="L334" class="LineNr">334 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'new' requires one or two ingredients, but got '1:address:number &lt;- new'</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: Since memory can be reused multiple times, it can happen that you have a</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Comment">//: stale copy to an address that has since been abandoned and reused. Using</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Comment">//: the stale address is almost never safe, but it can be very hard to track</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Comment">//: down such copies because any errors caused by them may occur even millions</span>
+<span id="L38" class="LineNr"> 38 </span><span class="Comment">//: of instructions after the copy or abandon instruction. To help track down</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Comment">//: such issues, Mu tracks an 'alloc id' for each allocation it makes. The</span>
+<span id="L40" class="LineNr"> 40 </span><span class="Comment">//: first call to 'new' has an alloc id of 1, the second gets 2, and so on.</span>
+<span id="L41" class="LineNr"> 41 </span><span class="Comment">//: The alloc id is never reused.</span>
+<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Normal">long</span> <span class="Normal">long</span> Next_alloc_id = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L45" class="LineNr"> 45 </span>Next_alloc_id = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Comment">//: The 'new' instruction records alloc ids both in the memory being allocated</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Comment">//: and *also* in the address. The 'abandon' instruction clears alloc ids in</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Comment">//: both places as well. Tracking alloc ids in this manner allows us to raise</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Comment">//: errors about stale addresses much earlier: 'lookup' operations always</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Comment">//: compare alloc ids between the address and its payload.</span>
+<span id="L52" class="LineNr"> 52 </span>
+<span id="L53" class="LineNr"> 53 </span><span class="Comment">//: todo: give 'new' a custodian ingredient. Following malloc/free is a temporary hack.</span>
+<span id="L54" class="LineNr"> 54 </span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(scenario new)</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Comment"># call 'new' two times with identical types without modifying the results; you</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Comment"># should get back different results</span>
+<span id="L58" class="LineNr"> 58 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L59" class="LineNr"> 59 </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="L60" class="LineNr"> 60 </span>  <span class="Constant">12</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Constant">20</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">10</span>:&amp;:num<span class="Delimiter">,</span> <span class="Constant">12</span>:&amp;:num
+<span id="L62" class="LineNr"> 62 </span>]
+<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+mem: storing 1000 in location 11</span>
+<span id="L64" class="LineNr"> 64 </span><span class="traceContains">+mem: storing 0 in location 20</span>
+<span id="L65" class="LineNr"> 65 </span>
+<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">:(scenario new_array)</span>
+<span id="L67" class="LineNr"> 67 </span><span class="Comment"># call 'new' with a second ingredient to allocate an array of some type rather than a single copy</span>
+<span id="L68" class="LineNr"> 68 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L69" class="LineNr"> 69 </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 class="Delimiter">,</span> <span class="Constant">5</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Constant">12</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Constant">20</span>:num/alloc2<span class="Delimiter">,</span> <span class="Constant">21</span>:num/alloc1<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">12</span>:&amp;:num
+<span id="L72" class="LineNr"> 72 </span>  <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">21</span>:num/alloc2<span class="Delimiter">,</span> <span class="Constant">20</span>:num/alloc1
+<span id="L73" class="LineNr"> 73 </span>]
+<span id="L74" class="LineNr"> 74 </span><span class="traceContains">+run: {10: (&quot;address&quot; &quot;array&quot; &quot;number&quot;)} &lt;- new {num: &quot;type&quot;}, {5: &quot;literal&quot;}</span>
+<span id="L75" class="LineNr"> 75 </span><span class="traceContains">+mem: array length is 5</span>
+<span id="L76" class="LineNr"> 76 </span><span class="Comment"># skip alloc id in allocation</span>
+<span id="L77" class="LineNr"> 77 </span><span class="traceContains">+mem: storing 1000 in location 11</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Comment"># don't forget the extra locations for alloc id and array length</span>
+<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+mem: storing 7 in location 30</span>
+<span id="L80" class="LineNr"> 80 </span>
+<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(scenario dilated_reagent_with_new)</span>
+<span id="L82" class="LineNr"> 82 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L83" class="LineNr"> 83 </span>  <span class="Constant">10</span>:&amp;:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>&amp; num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
+<span id="L84" class="LineNr"> 84 </span>]
+<span id="L85" class="LineNr"> 85 </span><span class="traceContains">+new: size of '(&amp; num)' is 2</span>
+<span id="L86" class="LineNr"> 86 </span>
+<span id="L87" class="LineNr"> 87 </span><span class="Comment">//: 'new' takes a weird 'type' as its first ingredient; don't error on it</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L89" class="LineNr"> 89 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;type&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(code)</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Normal">bool</span> is_mu_type_literal<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Identifier">return</span> is_literal<span class="Delimiter">(</span>r<span class="Delimiter">)</span> &amp;&amp; r<span class="Delimiter">.</span>type &amp;&amp; r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;type&quot;</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">}</span>
+<span id="L94" class="LineNr"> 94 </span>
+<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L96" class="LineNr"> 96 </span>NEW<span class="Delimiter">,</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L98" class="LineNr"> 98 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;new&quot;</span><span class="Delimiter">,</span> NEW<span class="Delimiter">);</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L100" class="LineNr">100 </span><span class="Normal">case</span> NEW: <span class="Delimiter">{</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L103" class="LineNr">103 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'new' requires one or two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Delimiter">}</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Comment">// End NEW Check Special-cases</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Normal">const</span> reagent&amp; type = 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="L108" class="LineNr">108 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_type_literal<span class="Delimiter">(</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'new' should be a type, but got '&quot;</span> &lt;&lt; type<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L110" class="LineNr">110 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L113" class="LineNr">113 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'new' should be a number (array length), but got '&quot;</span> &lt;&lt; type<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L114" class="LineNr">114 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Delimiter">}</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L117" class="LineNr">117 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;result of 'new' should never be ignored</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L118" class="LineNr">118 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L119" class="LineNr">119 </span>  <span class="Delimiter">}</span>
+<span id="L120" class="LineNr">120 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product_of_new_is_valid<span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L121" class="LineNr">121 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of 'new' has incorrect type: '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L122" class="LineNr">122 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Delimiter">}</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
+<span id="L126" class="LineNr">126 </span><span class="Delimiter">:(code)</span>
+<span id="L127" class="LineNr">127 </span><span class="Normal">bool</span> product_of_new_is_valid<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L128" class="LineNr">128 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = 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="L129" class="LineNr">129 </span>  <span class="Comment">// Update NEW product in Check</span>
+<span id="L130" class="LineNr">130 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != Address_type_ordinal<span class="Delimiter">)</span>
+<span id="L131" class="LineNr">131 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span>  drop_from_type<span class="Delimiter">(</span>product<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">);</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Comment">// array allocation</span>
+<span id="L135" class="LineNr">135 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!product<span class="Delimiter">.</span>type || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || product<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value != Array_type_ordinal<span class="Delimiter">)</span>
+<span id="L136" class="LineNr">136 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>    drop_from_type<span class="Delimiter">(</span>product<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
+<span id="L138" class="LineNr">138 </span>  <span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> expected_product<span class="Delimiter">(</span><a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">));</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>product<span class="Delimiter">,</span> expected_product<span class="Delimiter">);</span>
+<span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
+<span id="L142" class="LineNr">142 </span>
+<span id="L143" class="LineNr">143 </span><span class="Normal">void</span> drop_from_type<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> string expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L144" class="LineNr">144 </span>  assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != expected_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't drop2 &quot;</span> &lt;&lt; expected_type &lt;&lt; <span class="Constant">&quot; from '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>r<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Delimiter">}</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// r.type = r.type-&gt;right</span>
+<span id="L150" class="LineNr">150 </span>  type_tree* tmp = r<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  r<span class="Delimiter">.</span>type = tmp<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L152" class="LineNr">152 </span>  tmp<span class="Delimiter">-&gt;</span>right = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Normal">delete</span> tmp<span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Comment">// if (!r.type-&gt;right) r.type = r.type-&gt;left</span>
+<span id="L155" class="LineNr">155 </span>  assert<span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span>  tmp = r<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>  r<span class="Delimiter">.</span>type = tmp<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L159" class="LineNr">159 </span>  tmp<span class="Delimiter">-&gt;</span>left = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">delete</span> tmp<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="Delimiter">:(scenario new_returns_incorrect_type)</span>
+<span id="L164" class="LineNr">164 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L165" class="LineNr">165 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L166" class="LineNr">166 </span>  <span class="Constant">1</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L167" class="LineNr">167 </span>]
+<span id="L168" class="LineNr">168 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:bool &lt;- new num:type'</span>
+<span id="L169" class="LineNr">169 </span>
+<span id="L170" class="LineNr">170 </span><span class="Delimiter">:(scenario new_discerns_singleton_list_from_atom_container)</span>
+<span id="L171" class="LineNr">171 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L172" class="LineNr">172 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L173" class="LineNr">173 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>  <span class="Comment"># should be '{num: type}'</span>
+<span id="L174" class="LineNr">174 </span>]
+<span id="L175" class="LineNr">175 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:&amp;:num &lt;- new {(num): type}'</span>
+<span id="L176" class="LineNr">176 </span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">:(scenario new_with_type_abbreviation)</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="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L180" class="LineNr">180 </span>]
+<span id="L181" class="LineNr">181 </span>$error: <span class="Constant">0</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(scenario new_with_type_abbreviation_inside_compound)</span>
+<span id="L184" class="LineNr">184 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L185" class="LineNr">185 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> <a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">),</span> <span class="Special">raw</span>: <span class="Delimiter">()}</span><span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>&amp; num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
+<span id="L186" class="LineNr">186 </span>]
+<span id="L187" class="LineNr">187 </span>$error: <span class="Constant">0</span>
+<span id="L188" class="LineNr">188 </span>
+<span id="L189" class="LineNr">189 </span><span class="Delimiter">:(scenario equal_result_of_new_with_null)</span>
+<span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Constant">10</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:&amp;:num<span class="Delimiter">,</span><span class="Constant"> null</span>
+<span id="L193" class="LineNr">193 </span>]
+<span id="L194" class="LineNr">194 </span><span class="traceContains">+mem: storing 0 in location 10</span>
+<span id="L195" class="LineNr">195 </span>
+<span id="L196" class="LineNr">196 </span><span class="Comment">//: To implement 'new', a Mu transform turns all 'new' instructions into</span>
+<span id="L197" class="LineNr">197 </span><span class="Comment">//: 'allocate' instructions that precompute the amount of memory they want to</span>
+<span id="L198" class="LineNr">198 </span><span class="Comment">//: allocate.</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Comment">//: Ensure that we never call 'allocate' directly, and that there's no 'new'</span>
+<span id="L201" class="LineNr">201 </span><span class="Comment">//: instructions left after the transforms have run.</span>
+<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L203" class="LineNr">203 </span><span class="Normal">case</span> ALLOCATE: <span class="Delimiter">{</span>
+<span id="L204" class="LineNr">204 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;never call 'allocate' directly'; always use 'new'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L205" class="LineNr">205 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">}</span>
+<span id="L207" class="LineNr">207 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L208" class="LineNr">208 </span><span class="Normal">case</span> NEW: <span class="Delimiter">{</span>
+<span id="L209" class="LineNr">209 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;no implementation for 'new'; why wasn't it translated to 'allocate'? Please save a copy of your program and send it to Kartik.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">}</span>
+<span id="L212" class="LineNr">212 </span>
+<span id="L213" class="LineNr">213 </span><span class="Delimiter">:(after &quot;Transform.push_back(check_instruction)&quot;)</span>  <span class="Comment">// check_instruction will guard against direct 'allocate' instructions below</span>
+<span id="L214" class="LineNr">214 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>transform_new_to_allocate<span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L215" class="LineNr">215 </span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(code)</span>
+<span id="L217" class="LineNr">217 </span><span class="Normal">void</span> transform_new_to_allocate<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L218" class="LineNr">218 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- convert 'new' to 'allocate' for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L220" class="LineNr">220 </span>    instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L221" class="LineNr">221 </span>    <span class="Comment">// Convert 'new' To 'allocate'</span>
+<span id="L222" class="LineNr">222 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L223" class="LineNr">223 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L224" class="LineNr">224 </span>      inst<span class="Delimiter">.</span>operation = ALLOCATE<span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span>      type_tree* type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
+<span id="L226" class="LineNr">226 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>size_of<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
+<span id="L227" class="LineNr">227 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;size of '&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>name &lt;&lt; <span class="Constant">&quot;' is &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>value &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span>      <span class="Normal">delete</span> type<span class="Delimiter">;</span>
+<span id="L229" class="LineNr">229 </span>    <span class="Delimiter">}</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Delimiter">}</span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span>
+<span id="L233" class="LineNr">233 </span><span class="Comment">//: implement 'allocate' based on size</span>
+<span id="L234" class="LineNr">234 </span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L236" class="LineNr">236 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> Reserved_for_tests = <span class="Constant">1000</span><span class="Delimiter">;</span>
+<span id="L237" class="LineNr">237 </span><span class="Normal">int</span> Memory_allocated_until = Reserved_for_tests<span class="Delimiter">;</span>
+<span id="L238" class="LineNr">238 </span><span class="Normal">int</span> Initial_memory_per_routine = <span class="Constant">100000</span><span class="Delimiter">;</span>
+<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L240" class="LineNr">240 </span>Memory_allocated_until = Reserved_for_tests<span class="Delimiter">;</span>
+<span id="L241" class="LineNr">241 </span>Initial_memory_per_routine = <span class="Constant">100000</span><span class="Delimiter">;</span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
+<span id="L243" class="LineNr">243 </span><span class="Normal">int</span> alloc<span class="Delimiter">,</span> alloc_max<span class="Delimiter">;</span>
+<span id="L244" class="LineNr">244 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
+<span id="L245" class="LineNr">245 </span>alloc = Memory_allocated_until<span class="Delimiter">;</span>
+<span id="L246" class="LineNr">246 </span>Memory_allocated_until += Initial_memory_per_routine<span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span>alloc_max = Memory_allocated_until<span class="Delimiter">;</span>
+<span id="L248" class="LineNr">248 </span><a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;routine allocated memory from &quot;</span> &lt;&lt; alloc &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; alloc_max &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L249" class="LineNr">249 </span>
+<span id="L250" class="LineNr">250 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L251" class="LineNr">251 </span>ALLOCATE<span class="Delimiter">,</span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L253" class="LineNr">253 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;allocate&quot;</span><span class="Delimiter">,</span> ALLOCATE<span class="Delimiter">);</span>
+<span id="L254" class="LineNr">254 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L255" class="LineNr">255 </span><span class="Normal">case</span> ALLOCATE: <span class="Delimiter">{</span>
+<span id="L256" class="LineNr">256 </span>  <span class="Comment">// compute the space we need</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Normal">int</span> size = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Normal">int</span> alloc_id = Next_alloc_id<span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span>  Next_alloc_id++<span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L261" class="LineNr">261 </span>    <span class="Comment">// array allocation</span>
+<span id="L262" class="LineNr">262 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;array length is &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L263" class="LineNr">263 </span>    size = <span class="Comment">/*</span><span class="Comment">space for length</span><span class="Comment">*/</span><span class="Constant">1</span> + size*ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Delimiter">}</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Normal">int</span> result = allocate<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Comment">// initialize alloc-id in payload</span>
+<span id="L267" class="LineNr">267 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing alloc-id &quot;</span> &lt;&lt; alloc_id &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L268" class="LineNr">268 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">,</span> alloc_id<span class="Delimiter">);</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L270" class="LineNr">270 </span>    <span class="Comment">// initialize array length</span>
+<span id="L271" class="LineNr">271 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing array length &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; result+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L272" class="LineNr">272 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Delimiter">}</span>
+<span id="L274" class="LineNr">274 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L275" class="LineNr">275 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>alloc_id<span class="Delimiter">);</span>
+<span id="L276" class="LineNr">276 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L277" class="LineNr">277 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span><span class="Delimiter">}</span>
+<span id="L279" class="LineNr">279 </span><span class="Delimiter">:(code)</span>
+<span id="L280" class="LineNr">280 </span><span class="Normal">int</span> allocate<span class="Delimiter">(</span><span class="Normal">int</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Comment">// include space for alloc id</span>
+<span id="L282" class="LineNr">282 </span>  ++size<span class="Delimiter">;</span>
+<span id="L283" class="LineNr">283 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;allocating size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L284" class="LineNr">284 </span><span class="CommentedCode">//?   Total_alloc += size;</span>
+<span id="L285" class="LineNr">285 </span><span class="CommentedCode">//?   ++Num_alloc;</span>
+<span id="L286" class="LineNr">286 </span>  <span class="Comment">// Allocate Special-cases</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Comment">// compute the region of memory to return</span>
+<span id="L288" class="LineNr">288 </span>  <span class="Comment">// really crappy at the moment</span>
+<span id="L289" class="LineNr">289 </span>  ensure_space<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
+<span id="L290" class="LineNr">290 </span>  <span class="Normal">const</span> <span class="Normal">int</span> result = Current_routine<span class="Delimiter">-&gt;</span>alloc<span class="Delimiter">;</span>
+<span id="L291" class="LineNr">291 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new alloc: &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L292" class="LineNr">292 </span>  <span class="Comment">// initialize allocated space</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = result<span class="Delimiter">;</span>  <a href='043space.cc.html#L101'>address</a> &lt; result+size<span class="Delimiter">;</span>  ++address<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L294" class="LineNr">294 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0 in location &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L295" class="LineNr">295 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L296" class="LineNr">296 </span>  <span class="Delimiter">}</span>
+<span id="L297" class="LineNr">297 </span>  Current_routine<span class="Delimiter">-&gt;</span>alloc += size<span class="Delimiter">;</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Comment">// no support yet for reclaiming memory between routines</span>
+<span id="L299" class="LineNr">299 </span>  assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;= Current_routine<span class="Delimiter">-&gt;</span>alloc_max<span class="Delimiter">);</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L301" class="LineNr">301 </span><span class="Delimiter">}</span>
+<span id="L302" class="LineNr">302 </span>
+<span id="L303" class="LineNr">303 </span><span class="Comment">//: statistics for debugging</span>
+<span id="L304" class="LineNr">304 </span><span class="CommentedCode">//? :(before &quot;End Globals&quot;)</span>
+<span id="L305" class="LineNr">305 </span><span class="CommentedCode">//? int Total_alloc = 0;</span>
+<span id="L306" class="LineNr">306 </span><span class="CommentedCode">//? int Num_alloc = 0;</span>
+<span id="L307" class="LineNr">307 </span><span class="CommentedCode">//? int Total_free = 0;</span>
+<span id="L308" class="LineNr">308 </span><span class="CommentedCode">//? int Num_free = 0;</span>
+<span id="L309" class="LineNr">309 </span><span class="CommentedCode">//? :(before &quot;End Reset&quot;)</span>
+<span id="L310" class="LineNr">310 </span><span class="CommentedCode">//? if (!Memory.empty()) {</span>
+<span id="L311" class="LineNr">311 </span><span class="CommentedCode">//?   cerr &lt;&lt; Total_alloc &lt;&lt; &quot;/&quot; &lt;&lt; Num_alloc</span>
+<span id="L312" class="LineNr">312 </span><span class="CommentedCode">//?        &lt;&lt; &quot; vs &quot; &lt;&lt; Total_free &lt;&lt; &quot;/&quot; &lt;&lt; Num_free &lt;&lt; '\n';</span>
+<span id="L313" class="LineNr">313 </span><span class="CommentedCode">//?   cerr &lt;&lt; SIZE(Memory) &lt;&lt; '\n';</span>
+<span id="L314" class="LineNr">314 </span><span class="CommentedCode">//? }</span>
+<span id="L315" class="LineNr">315 </span><span class="CommentedCode">//? Total_alloc = Num_alloc = Total_free = Num_free = 0;</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(code)</span>
+<span id="L318" class="LineNr">318 </span><span class="Normal">void</span> ensure_space<span class="Delimiter">(</span><span class="Normal">int</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size &gt; Initial_memory_per_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L320" class="LineNr">320 </span>    cerr &lt;&lt; <span class="Constant">&quot;can't allocate &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; locations, that's too much compared to &quot;</span> &lt;&lt; Initial_memory_per_routine &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Delimiter">}</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>alloc + size &gt; Current_routine<span class="Delimiter">-&gt;</span>alloc_max<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L324" class="LineNr">324 </span>    <span class="Comment">// waste the remaining space and create a new chunk</span>
+<span id="L325" class="LineNr">325 </span>    Current_routine<span class="Delimiter">-&gt;</span>alloc = Memory_allocated_until<span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>    Memory_allocated_until += Initial_memory_per_routine<span class="Delimiter">;</span>
+<span id="L327" class="LineNr">327 </span>    Current_routine<span class="Delimiter">-&gt;</span>alloc_max = Memory_allocated_until<span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;routine allocated memory from &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc_max &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L329" class="LineNr">329 </span>  <span class="Delimiter">}</span>
+<span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
+<span id="L331" class="LineNr">331 </span>
+<span id="L332" class="LineNr">332 </span><span class="Delimiter">:(scenario new_initializes)</span>
+<span id="L333" class="LineNr">333 </span><span class="Special">% Memory_allocated_until = 10;</span>
+<span id="L334" class="LineNr">334 </span><span class="Special">% put(Memory, Memory_allocated_until, 1);</span>
+<span id="L335" class="LineNr">335 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L336" class="LineNr">336 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L337" class="LineNr">337 </span>]
+<span id="L338" class="LineNr">338 </span><span class="traceContains">+mem: storing 0 in location 10</span>
+<span id="L339" class="LineNr">339 </span><span class="traceContains">+mem: storing 0 in location 11</span>
+<span id="L340" class="LineNr">340 </span><span class="traceContains">+mem: storing 10 in location 2</span>
+<span id="L341" class="LineNr">341 </span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(scenario new_initializes_alloc_id)</span>
+<span id="L343" class="LineNr">343 </span><span class="Special">% Memory_allocated_until = 10;</span>
+<span id="L344" class="LineNr">344 </span><span class="Special">% put(Memory, Memory_allocated_until, 1);</span>
+<span id="L345" class="LineNr">345 </span><span class="Special">% Next_alloc_id = 23;</span>
+<span id="L346" class="LineNr">346 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L347" class="LineNr">347 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L348" class="LineNr">348 </span>]
+<span id="L349" class="LineNr">349 </span><span class="Comment"># initialize memory</span>
+<span id="L350" class="LineNr">350 </span><span class="traceContains">+mem: storing 0 in location 10</span>
+<span id="L351" class="LineNr">351 </span><span class="traceContains">+mem: storing 0 in location 11</span>
+<span id="L352" class="LineNr">352 </span><span class="Comment"># alloc-id in payload</span>
+<span id="L353" class="LineNr">353 </span><span class="traceContains">+mem: storing alloc-id 23 in location 10</span>
+<span id="L354" class="LineNr">354 </span><span class="Comment"># alloc-id in address</span>
+<span id="L355" class="LineNr">355 </span><span class="traceContains">+mem: storing 23 in location 1</span>
+<span id="L356" class="LineNr">356 </span>
+<span id="L357" class="LineNr">357 </span><span class="Delimiter">:(scenario new_size)</span>
+<span id="L358" class="LineNr">358 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L359" class="LineNr">359 </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="L360" class="LineNr">360 </span>  <span class="Constant">12</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L361" class="LineNr">361 </span>  <span class="Constant">20</span>:num/alloc1<span class="Delimiter">,</span> <span class="Constant">21</span>:num/alloc2<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:num<span class="Delimiter">,</span> <span class="Constant">12</span>:&amp;:num
+<span id="L362" class="LineNr">362 </span>  <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">21</span>:num/alloc2<span class="Delimiter">,</span> <span class="Constant">20</span>:num/alloc1
+<span id="L363" class="LineNr">363 </span>]
+<span id="L364" class="LineNr">364 </span><span class="Comment"># size of number + alloc id</span>
+<span id="L365" class="LineNr">365 </span><span class="traceContains">+mem: storing 2 in location 30</span>
+<span id="L366" class="LineNr">366 </span>
+<span id="L367" class="LineNr">367 </span><span class="Delimiter">:(scenario new_array_size)</span>
+<span id="L368" class="LineNr">368 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L369" class="LineNr">369 </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 class="Delimiter">,</span> <span class="Constant">5</span>
+<span id="L370" class="LineNr">370 </span>  <span class="Constant">12</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L371" class="LineNr">371 </span>  <span class="Constant">20</span>:num/alloc1<span class="Delimiter">,</span> <span class="Constant">21</span>:num/alloc2<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:num<span class="Delimiter">,</span> <span class="Constant">12</span>:&amp;:num
+<span id="L372" class="LineNr">372 </span>  <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">21</span>:num/alloc2<span class="Delimiter">,</span> <span class="Constant">20</span>:num/alloc1
+<span id="L373" class="LineNr">373 </span>]
+<span id="L374" class="LineNr">374 </span><span class="Comment"># 5 locations for array contents + array length + alloc id</span>
+<span id="L375" class="LineNr">375 </span><span class="traceContains">+mem: storing 7 in location 30</span>
+<span id="L376" class="LineNr">376 </span>
+<span id="L377" class="LineNr">377 </span><span class="Delimiter">:(scenario new_empty_array)</span>
+<span id="L378" class="LineNr">378 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L379" class="LineNr">379 </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 class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Constant">12</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L381" class="LineNr">381 </span>  <span class="Constant">20</span>:num/alloc1<span class="Delimiter">,</span> <span class="Constant">21</span>:num/alloc2<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">12</span>:&amp;:num
+<span id="L382" class="LineNr">382 </span>  <span class="Constant">30</span>:num<span class="Special"> &lt;- </span>subtract <span class="Constant">21</span>:num/alloc2<span class="Delimiter">,</span> <span class="Constant">20</span>:num/alloc1
+<span id="L383" class="LineNr">383 </span>]
+<span id="L384" class="LineNr">384 </span><span class="traceContains">+run: {10: (&quot;address&quot; &quot;array&quot; &quot;number&quot;)} &lt;- new {num: &quot;type&quot;}, {0: &quot;literal&quot;}</span>
+<span id="L385" class="LineNr">385 </span><span class="traceContains">+mem: array length is 0</span>
+<span id="L386" class="LineNr">386 </span><span class="Comment"># one location for array length</span>
+<span id="L387" class="LineNr">387 </span><span class="traceContains">+mem: storing 2 in location 30</span>
+<span id="L388" class="LineNr">388 </span>
+<span id="L389" class="LineNr">389 </span><span class="Comment">//: If a routine runs out of its initial allocation, it should allocate more.</span>
+<span id="L390" class="LineNr">390 </span><span class="Delimiter">:(scenario new_overflow)</span>
+<span id="L391" class="LineNr">391 </span><span class="Special">% Initial_memory_per_routine = 3;  // barely enough room for point allocation below</span>
+<span id="L392" class="LineNr">392 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L393" class="LineNr">393 </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="L394" class="LineNr">394 </span>  <span class="Constant">12</span>:&amp;:point<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">point:type</span>  <span class="Comment"># not enough room in initial page</span>
+<span id="L395" class="LineNr">395 </span>]
+<span id="L396" class="LineNr">396 </span><span class="traceContains">+new: routine allocated memory from 1000 to 1003</span>
+<span id="L397" class="LineNr">397 </span><span class="traceContains">+new: routine allocated memory from 1003 to 1006</span>
+<span id="L398" class="LineNr">398 </span>
+<span id="L399" class="LineNr">399 </span><span class="Delimiter">:(scenario new_without_ingredient)</span>
+<span id="L400" class="LineNr">400 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L401" class="LineNr">401 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L402" class="LineNr">402 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span>  <span class="Comment"># missing ingredient</span>
+<span id="L403" class="LineNr">403 </span>]
+<span id="L404" class="LineNr">404 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'new' requires one or two ingredients, but got '1:&amp;:num &lt;- new'</span>
+<span id="L405" class="LineNr">405 </span>
+<span id="L406" class="LineNr">406 </span><span class="Comment">//: a little helper: convert address to number</span>
+<span id="L407" class="LineNr">407 </span>
+<span id="L408" class="LineNr">408 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L409" class="LineNr">409 </span>DEADDRESS<span class="Delimiter">,</span>
+<span id="L410" class="LineNr">410 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L411" class="LineNr">411 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;deaddress&quot;</span><span class="Delimiter">,</span> DEADDRESS<span class="Delimiter">);</span>
+<span id="L412" class="LineNr">412 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L413" class="LineNr">413 </span><span class="Normal">case</span> DEADDRESS: <span class="Delimiter">{</span>
+<span id="L414" class="LineNr">414 </span>  <span class="Comment">// primary goal of these checks is to forbid address arithmetic</span>
+<span id="L415" class="LineNr">415 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L416" class="LineNr">416 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L417" class="LineNr">417 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'deaddress' requires <a href='043space.cc.html#L101'>address</a> ingredients, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L418" class="LineNr">418 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L419" class="LineNr">419 </span>    <span class="Delimiter">}</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Delimiter">}</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> &gt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L422" class="LineNr">422 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;too many products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L423" class="LineNr">423 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L424" class="LineNr">424 </span>  <span class="Delimiter">}</span>
+<span id="L425" class="LineNr">425 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L426" class="LineNr">426 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_real_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L427" class="LineNr">427 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'deaddress' requires number products, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L428" class="LineNr">428 </span>      <span class="Identifier">goto</span> finish_checking_instruction<span class="Delimiter">;</span>
+<span id="L429" class="LineNr">429 </span>    <span class="Delimiter">}</span>
+<span id="L430" class="LineNr">430 </span>  <span class="Delimiter">}</span>
+<span id="L431" class="LineNr">431 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L434" class="LineNr">434 </span><span class="Normal">case</span> DEADDRESS: <span class="Delimiter">{</span>
+<span id="L435" class="LineNr">435 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">));</span>
+<span id="L436" class="LineNr">436 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L437" class="LineNr">437 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L438" class="LineNr">438 </span>  <span class="Delimiter">}</span>
+<span id="L439" class="LineNr">439 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L440" class="LineNr">440 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/035lookup.cc.html b/html/035lookup.cc.html
index 9264c72a..f69999d1 100644
--- a/html/035lookup.cc.html
+++ b/html/035lookup.cc.html
@@ -17,6 +17,7 @@ a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .Constant { color: #00a0a0; }
 .Special { color: #c00000; }
+.CommentedCode { color: #6c6c6c; }
 .muRecipe { color: #ff8700; }
 .SalientComment { color: #00ffff; }
 .Comment { color: #9090ff; }
@@ -69,486 +70,535 @@ if ('onhashchange' in window) {
 <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="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L9" class="LineNr">  9 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L10" class="LineNr"> 10 </span>  <span class="Comment"># This loads location 1 as an address and looks up *that* location.</span>
-<span id="L11" class="LineNr"> 11 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup
-<span id="L12" class="LineNr"> 12 </span>]
-<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L14" class="LineNr"> 14 </span>
-<span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(before &quot;End Preprocess read_memory(x)&quot;)</span>
-<span id="L16" class="LineNr"> 16 </span>canonize<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<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="Comment">//: similarly, write to addresses pointing at other locations using the</span>
-<span id="L19" class="LineNr"> 19 </span><span class="Comment">//: 'lookup' property</span>
-<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(scenario store_indirect)</span>
-<span id="L21" class="LineNr"> 21 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L22" class="LineNr"> 22 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L24" class="LineNr"> 24 </span>]
-<span id="L25" class="LineNr"> 25 </span><span class="traceContains">+mem: storing 34 in location 10</span>
-<span id="L26" class="LineNr"> 26 </span>
-<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(before &quot;End Preprocess write_memory(x, data)&quot;)</span>
-<span id="L28" class="LineNr"> 28 </span>canonize<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L29" class="LineNr"> 29 </span>
-<span id="L30" class="LineNr"> 30 </span><span class="Comment">//: writes to address 0 always loudly fail</span>
-<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(scenario store_to_0_fails)</span>
-<span id="L32" class="LineNr"> 32 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L33" class="LineNr"> 33 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L36" class="LineNr"> 36 </span>]
-<span id="L37" class="LineNr"> 37 </span><span class="traceAbsent">-mem: storing 34 in location 0</span>
-<span id="L38" class="LineNr"> 38 </span><span class="traceContains">+error: can't write to location 0 in '1:<a href='043space.cc.html#L80'>address</a>:num/lookup &lt;- copy 34'</span>
-<span id="L39" class="LineNr"> 39 </span>
-<span id="L40" class="LineNr"> 40 </span><span class="Comment">//: attempts to /lookup address 0 always loudly fail</span>
-<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(scenario lookup_0_fails)</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L43" class="LineNr"> 43 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup
-<span id="L46" class="LineNr"> 46 </span>]
-<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to lookup 0 in '2:num &lt;- copy 1:address:num/lookup'</span>
-<span id="L48" class="LineNr"> 48 </span>
-<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(scenario lookup_0_dumps_callstack)</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L51" class="LineNr"> 51 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L52" class="LineNr"> 52 </span>  foo <span class="Constant">0</span>
-<span id="L53" class="LineNr"> 53 </span>]
-<span id="L54" class="LineNr"> 54 </span><span class="muRecipe">def</span> foo [
-<span id="L55" class="LineNr"> 55 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>next-input
-<span id="L56" class="LineNr"> 56 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup
+<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="traceContains">+error: foo: tried to lookup 0 in '2:num &lt;- copy 1:address:num/lookup'</span>
-<span id="L59" class="LineNr"> 59 </span><span class="traceContains">+error:   called from <a href='000organization.cc.html#L113'>main</a>: foo 0</span>
-<span id="L60" class="LineNr"> 60 </span>
-<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">:(code)</span>
-<span id="L62" class="LineNr"> 62 </span><span class="Normal">void</span> canonize<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L63" class="LineNr"> 63 </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="L64" class="LineNr"> 64 </span>  <span class="Comment">// Begin canonize(x) Lookups</span>
-<span id="L65" class="LineNr"> 65 </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="L66" class="LineNr"> 66 </span>    lookup_memory<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">}</span>
-<span id="L68" class="LineNr"> 68 </span>
-<span id="L69" class="LineNr"> 69 </span><span class="Normal">void</span> lookup_memory<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L70" class="LineNr"> 70 </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 != Address_type_ordinal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L71" class="LineNr"> 71 </span>    <a href='003trace.cc.html#L174'>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</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L72" class="LineNr"> 72 </span>    dump_callstack<span class="Delimiter">();</span>
-<span id="L73" class="LineNr"> 73 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
-<span id="L75" class="LineNr"> 75 </span>  <span class="Comment">// compute value</span>
-<span id="L76" class="LineNr"> 76 </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="L77" class="LineNr"> 77 </span>    <a href='003trace.cc.html#L174'>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</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L78" class="LineNr"> 78 </span>    dump_callstack<span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>  <span class="Delimiter">}</span>
-<span id="L81" class="LineNr"> 81 </span>  lookup_memory_core<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="L82" class="LineNr"> 82 </span><span class="Delimiter">}</span>
-<span id="L83" class="LineNr"> 83 </span>
-<span id="L84" class="LineNr"> 84 </span><span class="Normal">void</span> lookup_memory_core<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="L85" class="LineNr"> 85 </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="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L86" class="LineNr"> 86 </span>  <a href='003trace.cc.html#L167'>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; x<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> x<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
-<span id="L88" class="LineNr"> 88 </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="L89" class="LineNr"> 89 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>check_for_null &amp;&amp; x<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L90" class="LineNr"> 90 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L91" class="LineNr"> 91 </span>      <a href='003trace.cc.html#L174'>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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L92" class="LineNr"> 92 </span>      dump_callstack<span class="Delimiter">();</span>
-<span id="L93" class="LineNr"> 93 </span>    <span class="Delimiter">}</span>
-<span id="L94" class="LineNr"> 94 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L95" class="LineNr"> 95 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;tried to lookup 0</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L96" class="LineNr"> 96 </span>    <span class="Delimiter">}</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Delimiter">}</span>
-<span id="L98" class="LineNr"> 98 </span>  drop_one_lookup<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">}</span>
-<span id="L100" class="LineNr">100 </span>
-<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(before &quot;End Preprocess types_strictly_match(reagent to, reagent from)&quot;)</span>
-<span id="L102" class="LineNr">102 </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="L103" class="LineNr">103 </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="L104" class="LineNr">104 </span>
-<span id="L105" class="LineNr">105 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_array(reagent r)&quot;)</span>
-<span id="L106" class="LineNr">106 </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="L107" class="LineNr">107 </span>
-<span id="L108" class="LineNr">108 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_address(reagent r)&quot;)</span>
-<span id="L109" class="LineNr">109 </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="L110" class="LineNr">110 </span>
-<span id="L111" class="LineNr">111 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_number(reagent r)&quot;)</span>
-<span id="L112" class="LineNr">112 </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="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_boolean(reagent r)&quot;)</span>
-<span id="L114" class="LineNr">114 </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="L115" class="LineNr">115 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_character(reagent r)&quot;)</span>
-<span id="L116" class="LineNr">116 </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="L117" class="LineNr">117 </span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(after &quot;Update product While Type-checking Merge&quot;)</span>
-<span id="L119" class="LineNr">119 </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="L120" class="LineNr">120 </span>
-<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Compute Call Ingredient&quot;)</span>
-<span id="L122" class="LineNr">122 </span>canonize_type<span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
-<span id="L123" class="LineNr">123 </span><span class="Delimiter">:(before &quot;End Preprocess NEXT_INGREDIENT product&quot;)</span>
-<span id="L124" class="LineNr">124 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(before &quot;End Check RETURN Copy(lhs, rhs)</span>
-<span id="L126" class="LineNr">126 </span>canonize_type<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
-<span id="L127" class="LineNr">127 </span>canonize_type<span class="Delimiter">(</span>rhs<span class="Delimiter">);</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 != Address_type_ordinal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L75" class="LineNr"> 75 </span>    <a href='003trace.cc.html#L197'>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</span><span class="cSpecial">\n</span><span class="Constant">&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#L197'>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</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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>Memory<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#L190'>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#L226'>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>Current_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>      <a href='003trace.cc.html#L197'>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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;tried to lookup 0</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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>Memory<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>Memory<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#L197'>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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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;Compute Container Size(reagent rcopy)&quot;)</span>
-<span id="L130" class="LineNr">130 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>rcopy<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</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;Compute Container Size(element, full_type)&quot;)</span>
-<span id="L133" class="LineNr">133 </span>assert<span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>element<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">));</span>
-<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;Compute Exclusive Container Size(element, full_type)&quot;)</span>
-<span id="L135" class="LineNr">135 </span>assert<span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>element<span class="Delimiter">,</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">));</span>
-<span id="L136" class="LineNr">136 </span>
-<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(code)</span>
-<span id="L138" class="LineNr">138 </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="L139" class="LineNr">139 </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="L140" class="LineNr">140 </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 != Address_type_ordinal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L141" class="LineNr">141 </span>      <a href='003trace.cc.html#L174'>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#L203'>end</a><span class="Delimiter">();</span>
-<span id="L142" class="LineNr">142 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L143" class="LineNr">143 </span>    <span class="Delimiter">}</span>
-<span id="L144" class="LineNr">144 </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="L145" class="LineNr">145 </span>    drop_one_lookup<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span><span class="Delimiter">}</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="Normal">void</span> drop_one_lookup<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L151" class="LineNr">151 </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#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L152" class="LineNr">152 </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="L153" class="LineNr">153 </span>      r<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>p<span class="Delimiter">);</span>
-<span id="L154" class="LineNr">154 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>    <span class="Delimiter">}</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Delimiter">}</span>
-<span id="L157" class="LineNr">157 </span>  assert<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
-<span id="L158" class="LineNr">158 </span><span class="Delimiter">}</span>
-<span id="L159" class="LineNr">159 </span>
-<span id="L160" class="LineNr">160 </span><span class="Comment">//: Tedious fixup to support addresses in container/array instructions of previous layers.</span>
-<span id="L161" class="LineNr">161 </span><span class="Comment">//: Most instructions don't require fixup if they use the 'ingredients' and</span>
-<span id="L162" class="LineNr">162 </span><span class="Comment">//: 'products' variables in run_current_routine().</span>
-<span id="L163" class="LineNr">163 </span>
-<span id="L164" class="LineNr">164 </span><span class="Delimiter">:(scenario get_indirect)</span>
-<span id="L165" class="LineNr">165 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L166" class="LineNr">166 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L167" class="LineNr">167 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L170" class="LineNr">170 </span>]
-<span id="L171" class="LineNr">171 </span><span class="traceContains">+mem: storing 34 in location 2</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 != Address_type_ordinal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L154" class="LineNr">154 </span>      <a href='003trace.cc.html#L197'>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#L226'>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#L226'>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="Delimiter">:(scenario get_indirect2)</span>
-<span id="L174" class="LineNr">174 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L175" class="LineNr">175 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L176" class="LineNr">176 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>/unsafe
-<span id="L179" class="LineNr">179 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L180" class="LineNr">180 </span>]
-<span id="L181" class="LineNr">181 </span><span class="traceContains">+mem: storing 34 in location 20</span>
-<span id="L182" class="LineNr">182 </span>
-<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(scenario include_nonlookup_properties)</span>
-<span id="L184" class="LineNr">184 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L185" class="LineNr">185 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L186" class="LineNr">186 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L187" class="LineNr">187 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup/foo<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L189" class="LineNr">189 </span>]
-<span id="L190" class="LineNr">190 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L191" class="LineNr">191 </span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(after &quot;Update GET base in Check&quot;)</span>
-<span id="L193" class="LineNr">193 </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="L194" class="LineNr">194 </span><span class="Delimiter">:(after &quot;Update GET product in Check&quot;)</span>
-<span id="L195" class="LineNr">195 </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="L196" class="LineNr">196 </span><span class="Delimiter">:(after &quot;Update GET base in Run&quot;)</span>
-<span id="L197" class="LineNr">197 </span>canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
-<span id="L198" class="LineNr">198 </span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">:(scenario put_indirect)</span>
-<span id="L200" class="LineNr">200 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L201" class="LineNr">201 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L202" class="LineNr">202 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L205" class="LineNr">205 </span>]
-<span id="L206" class="LineNr">206 </span><span class="traceContains">+mem: storing 36 in location 10</span>
-<span id="L207" class="LineNr">207 </span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(after &quot;Update PUT base in Check&quot;)</span>
-<span id="L209" class="LineNr">209 </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="L210" class="LineNr">210 </span><span class="Delimiter">:(after &quot;Update PUT offset in Check&quot;)</span>
-<span id="L211" class="LineNr">211 </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="L212" class="LineNr">212 </span><span class="Delimiter">:(after &quot;Update PUT base in Run&quot;)</span>
-<span id="L213" class="LineNr">213 </span>canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
-<span id="L214" class="LineNr">214 </span>
-<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(scenario put_product_error_with_lookup)</span>
-<span id="L216" class="LineNr">216 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L217" class="LineNr">217 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L218" class="LineNr">218 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L219" class="LineNr">219 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L220" class="LineNr">220 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:point/lookup<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">36</span>
-<span id="L222" class="LineNr">222 </span>]
-<span id="L223" class="LineNr">223 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put' must be first ingredient '1:address:point/lookup', but got '1:address:point'</span>
-<span id="L224" class="LineNr">224 </span>
-<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End PUT Product Checks&quot;)</span>
-<span id="L226" class="LineNr">226 </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="L227" class="LineNr">227 </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="L228" class="LineNr">228 </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="L229" class="LineNr">229 </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="L230" class="LineNr">230 </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="L231" class="LineNr">231 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L233" class="LineNr">233 </span><span class="Delimiter">}</span>
-<span id="L234" class="LineNr">234 </span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(scenario new_error)</span>
-<span id="L236" class="LineNr">236 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L237" class="LineNr">237 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L238" class="LineNr">238 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L239" class="LineNr">239 </span>]
-<span id="L240" class="LineNr">240 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'new' has incorrect type: '1:num/raw &lt;- new number:type'</span>
-<span id="L241" class="LineNr">241 </span>
-<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(after &quot;Update NEW product in Check&quot;)</span>
-<span id="L243" class="LineNr">243 </span>canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(scenario copy_array_indirect)</span>
-<span id="L246" class="LineNr">246 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L247" class="LineNr">247 </span>  <span class="Constant">10</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L248" class="LineNr">248 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L249" class="LineNr">249 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L251" class="LineNr">251 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L252" class="LineNr">252 </span>  <span class="Constant">2</span>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup
-<span id="L253" class="LineNr">253 </span>]
-<span id="L254" class="LineNr">254 </span><span class="traceContains">+mem: storing 3 in location 2</span>
-<span id="L255" class="LineNr">255 </span><span class="traceContains">+mem: storing 14 in location 3</span>
-<span id="L256" class="LineNr">256 </span><span class="traceContains">+mem: storing 15 in location 4</span>
-<span id="L257" class="LineNr">257 </span><span class="traceContains">+mem: storing 16 in location 5</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#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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 create_array_indirect)</span>
-<span id="L260" class="LineNr">260 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L261" class="LineNr">261 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>copy <span class="Constant">1000</span>/unsafe  <span class="Comment"># pretend allocation</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num:<span class="Constant">3</span>/lookup<span class="Special"> &lt;- </span>create-array
+<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">+mem: storing 3 in location 1000</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 CREATE_ARRAY product in Check&quot;)</span>
-<span id="L267" class="LineNr">267 </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="L268" class="LineNr">268 </span><span class="Delimiter">:(after &quot;Update CREATE_ARRAY product in Run&quot;)</span>
-<span id="L269" class="LineNr">269 </span>canonize<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L270" class="LineNr">270 </span>
-<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(scenario index_indirect)</span>
-<span id="L272" class="LineNr">272 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L273" class="LineNr">273 </span>  <span class="Constant">10</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L274" class="LineNr">274 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L277" class="LineNr">277 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L278" class="LineNr">278 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>index <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</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 15 in location 2</span>
-<span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Delimiter">:(before &quot;Update INDEX base in Check&quot;)</span>
-<span id="L283" class="LineNr">283 </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="L284" class="LineNr">284 </span><span class="Delimiter">:(before &quot;Update INDEX index in Check&quot;)</span>
-<span id="L285" class="LineNr">285 </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="L286" class="LineNr">286 </span><span class="Delimiter">:(before &quot;Update INDEX product in Check&quot;)</span>
-<span id="L287" class="LineNr">287 </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="L288" class="LineNr">288 </span>
-<span id="L289" class="LineNr">289 </span><span class="Delimiter">:(before &quot;Update INDEX base in Run&quot;)</span>
-<span id="L290" class="LineNr">290 </span>canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
-<span id="L291" class="LineNr">291 </span><span class="Delimiter">:(before &quot;Update INDEX index in Run&quot;)</span>
-<span id="L292" class="LineNr">292 </span>canonize<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L293" class="LineNr">293 </span>
-<span id="L294" class="LineNr">294 </span><span class="Delimiter">:(scenario put_index_indirect)</span>
-<span id="L295" class="LineNr">295 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L296" class="LineNr">296 </span>  <span class="Constant">10</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L297" class="LineNr">297 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L301" class="LineNr">301 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L302" class="LineNr">302 </span>]
-<span id="L303" class="LineNr">303 </span><span class="traceContains">+mem: storing 34 in location 12</span>
-<span id="L304" class="LineNr">304 </span>
-<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(scenario put_index_indirect_2)</span>
-<span id="L306" class="LineNr">306 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L308" class="LineNr">308 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L310" class="LineNr">310 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L311" class="LineNr">311 </span>  <span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L312" class="LineNr">312 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L313" class="LineNr">313 </span>  <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:array:num:<span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L314" class="LineNr">314 </span>]
-<span id="L315" class="LineNr">315 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L316" class="LineNr">316 </span>
-<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(scenario put_index_product_error_with_lookup)</span>
-<span id="L318" class="LineNr">318 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L319" class="LineNr">319 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L320" class="LineNr">320 </span>  <span class="Constant">10</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L321" class="LineNr">321 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L324" class="LineNr">324 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L325" class="LineNr">325 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>put-index <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L326" class="LineNr">326 </span>]
-<span id="L327" class="LineNr">327 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: product of 'put-index' must be first ingredient '1:address:array:num/lookup', but got '1:address:array:num'</span>
-<span id="L328" class="LineNr">328 </span>
-<span id="L329" class="LineNr">329 </span><span class="Delimiter">:(before &quot;End PUT_INDEX Product Checks&quot;)</span>
-<span id="L330" class="LineNr">330 </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="L331" class="LineNr">331 </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="L332" class="LineNr">332 </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="L333" class="LineNr">333 </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="L334" class="LineNr">334 </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="L335" class="LineNr">335 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L336" class="LineNr">336 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L337" class="LineNr">337 </span><span class="Delimiter">}</span>
-<span id="L338" class="LineNr">338 </span>
-<span id="L339" class="LineNr">339 </span><span class="Delimiter">:(scenario dilated_reagent_in_static_array)</span>
-<span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L341" class="LineNr">341 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span> <span class="Constant">3</span><span class="Delimiter">)}</span><span class="Special"> &lt;- </span>create-array
-<span id="L342" class="LineNr">342 </span>  <span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L343" class="LineNr">343 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span>array <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<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><a href='043space.cc.html#L80'>address</a> number<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">5</span>:<a href='043space.cc.html#L80'>address</a>:num
-<span id="L344" class="LineNr">344 </span>  *<span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Constant">6</span>:num<span class="Special"> &lt;- </span>copy *<span class="Constant">5</span>:<a href='043space.cc.html#L80'>address</a>:num
-<span id="L346" class="LineNr">346 </span>]
-<span id="L347" class="LineNr">347 </span><span class="traceContains">+run: creating array of size 4</span>
-<span id="L348" class="LineNr">348 </span><span class="traceContains">+mem: storing 34 in location 6</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">:(before &quot;Update PUT_INDEX base in Check&quot;)</span>
-<span id="L351" class="LineNr">351 </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="L352" class="LineNr">352 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX index in Check&quot;)</span>
-<span id="L353" class="LineNr">353 </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="L354" class="LineNr">354 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX value in Check&quot;)</span>
-<span id="L355" class="LineNr">355 </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="L356" class="LineNr">356 </span>
-<span id="L357" class="LineNr">357 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX base in Run&quot;)</span>
-<span id="L358" class="LineNr">358 </span>canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
-<span id="L359" class="LineNr">359 </span><span class="Delimiter">:(before &quot;Update PUT_INDEX index in Run&quot;)</span>
-<span id="L360" class="LineNr">360 </span>canonize<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L361" class="LineNr">361 </span>
-<span id="L362" class="LineNr">362 </span><span class="Delimiter">:(scenario length_indirect)</span>
-<span id="L363" class="LineNr">363 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L364" class="LineNr">364 </span>  <span class="Constant">10</span>:array:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L365" class="LineNr">365 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">14</span>
-<span id="L366" class="LineNr">366 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">15</span>
-<span id="L367" class="LineNr">367 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">16</span>
-<span id="L368" class="LineNr">368 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L369" class="LineNr">369 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>length <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:array:num/lookup
-<span id="L370" class="LineNr">370 </span>]
-<span id="L371" class="LineNr">371 </span><span class="traceContains">+mem: storing 3 in location 2</span>
-<span id="L372" class="LineNr">372 </span>
-<span id="L373" class="LineNr">373 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Check&quot;)</span>
-<span id="L374" class="LineNr">374 </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="L375" class="LineNr">375 </span><span class="Delimiter">:(before &quot;Update LENGTH array in Run&quot;)</span>
-<span id="L376" class="LineNr">376 </span>canonize<span class="Delimiter">(</span>array<span class="Delimiter">);</span>
-<span id="L377" class="LineNr">377 </span>
-<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(scenario maybe_convert_indirect)</span>
-<span id="L379" class="LineNr">379 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L380" class="LineNr">380 </span>  <span class="Constant">10</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">34</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L382" class="LineNr">382 </span>  <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
-<span id="L383" class="LineNr">383 </span>]
-<span id="L384" class="LineNr">384 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L385" class="LineNr">385 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L386" class="LineNr">386 </span>
-<span id="L387" class="LineNr">387 </span><span class="Delimiter">:(scenario maybe_convert_indirect_2)</span>
-<span id="L388" class="LineNr">388 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L389" class="LineNr">389 </span>  <span class="Constant">10</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">34</span>
-<span id="L390" class="LineNr">390 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L391" class="LineNr">391 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>/unsafe
-<span id="L392" class="LineNr">392 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:num/lookup<span class="Delimiter">,</span> <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
-<span id="L393" class="LineNr">393 </span>]
-<span id="L394" class="LineNr">394 </span><span class="traceContains">+mem: storing 1 in location 3</span>
-<span id="L395" class="LineNr">395 </span><span class="traceContains">+mem: storing 34 in location 20</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#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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 maybe_convert_indirect_3)</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="Constant">10</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">34</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L401" class="LineNr">401 </span>  <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">20</span>/unsafe
-<span id="L402" class="LineNr">402 </span>  <span class="Constant">3</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:<a href='043space.cc.html#L80'>address</a>:<span class="Normal">bool</span>/lookup<span class="Special"> &lt;- </span>maybe-convert <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point/lookup<span class="Delimiter">,</span> <span class="Constant">i:variant</span>
-<span id="L403" class="LineNr">403 </span>]
-<span id="L404" class="LineNr">404 </span><span class="traceContains">+mem: storing 1 in location 20</span>
-<span id="L405" class="LineNr">405 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L406" class="LineNr">406 </span>
-<span id="L407" class="LineNr">407 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Check&quot;)</span>
-<span id="L408" class="LineNr">408 </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="L409" class="LineNr">409 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Check&quot;)</span>
-<span id="L410" class="LineNr">410 </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="L411" class="LineNr">411 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Check&quot;)</span>
-<span id="L412" class="LineNr">412 </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="L413" class="LineNr">413 </span>
-<span id="L414" class="LineNr">414 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT base in Run&quot;)</span>
-<span id="L415" class="LineNr">415 </span>canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
-<span id="L416" class="LineNr">416 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT product in Run&quot;)</span>
-<span id="L417" class="LineNr">417 </span>canonize<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L418" class="LineNr">418 </span><span class="Delimiter">:(before &quot;Update MAYBE_CONVERT status in Run&quot;)</span>
-<span id="L419" class="LineNr">419 </span>canonize<span class="Delimiter">(</span>status<span class="Delimiter">);</span>
-<span id="L420" class="LineNr">420 </span>
-<span id="L421" class="LineNr">421 </span><span class="Delimiter">:(scenario merge_exclusive_container_indirect)</span>
-<span id="L422" class="LineNr">422 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L423" class="LineNr">423 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number-<span class="Normal">or</span>-point<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L424" class="LineNr">424 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>: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="L425" class="LineNr">425 </span>]
-<span id="L426" class="LineNr">426 </span><span class="traceContains">+mem: storing 0 in location 10</span>
-<span id="L427" class="LineNr">427 </span><span class="traceContains">+mem: storing 34 in location 11</span>
-<span id="L428" class="LineNr">428 </span>
-<span id="L429" class="LineNr">429 </span><span class="Delimiter">:(before &quot;Update size_mismatch Check for MERGE(x)</span>
-<span id="L430" class="LineNr">430 </span>canonize<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L431" class="LineNr">431 </span>
-<span id="L432" class="LineNr">432 </span><span class="Comment">//: abbreviation for '/lookup': a prefix '*'</span>
-<span id="L433" class="LineNr">433 </span>
-<span id="L434" class="LineNr">434 </span><span class="Delimiter">:(scenario lookup_abbreviation)</span>
-<span id="L435" class="LineNr">435 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L436" class="LineNr">436 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L437" class="LineNr">437 </span>  <span class="Constant">10</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L438" class="LineNr">438 </span>  <span class="Constant">3</span>:number<span class="Special"> &lt;- </span>copy *<span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:number
-<span id="L439" class="LineNr">439 </span>]
-<span id="L440" class="LineNr">440 </span><span class="traceContains">+parse: ingredient: {1: (&quot;address&quot; &quot;number&quot;), &quot;lookup&quot;: ()}</span>
-<span id="L441" class="LineNr">441 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L442" class="LineNr">442 </span>
-<span id="L443" class="LineNr">443 </span><span class="Delimiter">:(before &quot;End Parsing reagent&quot;)</span>
-<span id="L444" class="LineNr">444 </span><span class="Delimiter">{</span>
-<span id="L445" class="LineNr">445 </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="L446" class="LineNr">446 </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="L447" class="LineNr">447 </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="L448" class="LineNr">448 </span>  <span class="Delimiter">}</span>
-<span id="L449" class="LineNr">449 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L450" class="LineNr">450 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal name '&quot;</span> &lt;&lt; original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L451" class="LineNr">451 </span><span class="Delimiter">}</span>
-<span id="L452" class="LineNr">452 </span>
-<span id="L453" class="LineNr">453 </span><span class="SalientComment">//:: helpers for debugging</span>
-<span id="L454" class="LineNr">454 </span>
-<span id="L455" class="LineNr">455 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L456" class="LineNr">456 </span>_DUMP<span class="Delimiter">,</span>
-<span id="L457" class="LineNr">457 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L458" class="LineNr">458 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$dump&quot;</span><span class="Delimiter">,</span> _DUMP<span class="Delimiter">);</span>
-<span id="L459" class="LineNr">459 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L460" class="LineNr">460 </span><span class="Normal">case</span> _DUMP: <span class="Delimiter">{</span>
-<span id="L461" class="LineNr">461 </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="L462" class="LineNr">462 </span>  canonize<span class="Delimiter">(</span>after_canonize<span class="Delimiter">);</span>
-<span id="L463" class="LineNr">463 </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>Memory<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="L464" class="LineNr">464 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L465" class="LineNr">465 </span><span class="Delimiter">}</span>
-<span id="L466" class="LineNr">466 </span>
-<span id="L467" class="LineNr">467 </span><span class="Comment">//: grab an address, and then dump its value at intervals</span>
-<span id="L468" class="LineNr">468 </span><span class="Comment">//: useful for tracking down memory corruption (writing to an out-of-bounds address)</span>
-<span id="L469" class="LineNr">469 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L470" class="LineNr">470 </span><span class="Normal">int</span> Bar = -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L471" class="LineNr">471 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L472" class="LineNr">472 </span>_BAR<span class="Delimiter">,</span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L474" class="LineNr">474 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$bar&quot;</span><span class="Delimiter">,</span> _BAR<span class="Delimiter">);</span>
-<span id="L475" class="LineNr">475 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L476" class="LineNr">476 </span><span class="Normal">case</span> _BAR: <span class="Delimiter">{</span>
-<span id="L477" class="LineNr">477 </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="L478" class="LineNr">478 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Bar != -<span class="Constant">1</span><span class="Delimiter">)</span> cerr &lt;&lt; Bar &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>Memory<span class="Delimiter">,</span> Bar<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L479" class="LineNr">479 </span>    <span class="Normal">else</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L480" class="LineNr">480 </span>  <span class="Delimiter">}</span>
-<span id="L481" class="LineNr">481 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L482" class="LineNr">482 </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="L483" class="LineNr">483 </span>    canonize<span class="Delimiter">(</span>tmp<span class="Delimiter">);</span>
-<span id="L484" class="LineNr">484 </span>    Bar = tmp<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L485" class="LineNr">485 </span>  <span class="Delimiter">}</span>
-<span id="L486" class="LineNr">486 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L487" class="LineNr">487 </span><span class="Delimiter">}</span>
+<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#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal name '&quot;</span> &lt;&lt; original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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>Recipe_ordinal<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>Memory<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> Bar = -<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>Recipe_ordinal<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>Bar != -<span class="Constant">1</span><span class="Delimiter">)</span> cerr &lt;&lt; Bar &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>Memory<span class="Delimiter">,</span> Bar<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>    Bar = 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>
diff --git a/html/036abandon.cc.html b/html/036abandon.cc.html
new file mode 100644
index 00000000..d3f7014c
--- /dev/null
+++ b/html/036abandon.cc.html
@@ -0,0 +1,199 @@
+<!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 - 036abandon.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.CommentedCode { color: #6c6c6c; }
+.muRecipe { color: #ff8700; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Reclaiming memory when it's no longer used.</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(scenario new_reclaim)</span>
+<span id="L4" class="LineNr">  4 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L5" class="LineNr">  5 </span>  <span class="Constant">10</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
+<span id="L6" class="LineNr">  6 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:num
+<span id="L7" class="LineNr">  7 </span>  <a href='036abandon.cc.html#L63'>abandon</a> <span class="Constant">10</span>:&amp;:num
+<span id="L8" class="LineNr">  8 </span>  <span class="Constant">30</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>  <span class="Comment"># must be same size as abandoned memory to reuse</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="Constant">40</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">30</span>:&amp;:num
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">50</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">40</span>:num
+<span id="L11" class="LineNr"> 11 </span>]
+<span id="L12" class="LineNr"> 12 </span><span class="Comment"># both allocations should have returned the same address</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+mem: storing 1 in location 50</span>
+<span id="L14" class="LineNr"> 14 </span>
+<span id="L15" class="LineNr"> 15 </span><span class="Comment">//: When abandoning addresses we'll save them to a 'free list', segregated by size.</span>
+<span id="L16" class="LineNr"> 16 </span>
+<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: Before, suppose variable V contains address A which points to payload P:</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Comment">//:   location V contains an alloc-id N</span>
+<span id="L19" class="LineNr"> 19 </span><span class="Comment">//:   location V+1 contains A</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Comment">//:   location A contains alloc-id N</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Comment">//:   location A+1 onwards contains P</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: Additionally, suppose the head of the free list is initially F.</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Comment">//: After abandoning:</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">//:   location V contains invalid alloc-id -1</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Comment">//:   location V+1 contains 0</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Comment">//:   location A contains invalid alloc-id N</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Comment">//:   location A+1 contains the previous head of free-list F</span>
+<span id="L28" class="LineNr"> 28 </span>
+<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
+<span id="L30" class="LineNr"> 30 </span>map&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; free_list<span class="Delimiter">;</span>
+<span id="L31" class="LineNr"> 31 </span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L33" class="LineNr"> 33 </span>ABANDON<span class="Delimiter">,</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L35" class="LineNr"> 35 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">,</span> ABANDON<span class="Delimiter">);</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Normal">case</span> ABANDON: <span class="Delimiter">{</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L39" class="LineNr"> 39 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'abandon' shouldn't write to any products in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Delimiter">}</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L43" class="LineNr"> 43 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
+<span id="L44" class="LineNr"> 44 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredients of 'abandon' should be addresses, but ingredient &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; is '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Delimiter">}</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Delimiter">}</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Normal">case</span> ABANDON: <span class="Delimiter">{</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L52" class="LineNr"> 52 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> ingredient = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L53" class="LineNr"> 53 </span>    <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
+<span id="L54" class="LineNr"> 54 </span>    <a href='036abandon.cc.html#L63'>abandon</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> ingredient<span class="Delimiter">.</span>value+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">),</span> <a href='036abandon.cc.html#L75'>payload_size</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">));</span>
+<span id="L55" class="LineNr"> 55 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;clear after abandon: &quot; &lt;&lt; ingredient.value &lt;&lt; '\n';</span>
+<span id="L56" class="LineNr"> 56 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span>ingredient<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">invalid</span><span class="Comment">*/</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment"><a href='043space.cc.html#L101'>address</a></span><span class="Comment">*/</span>ingredient<span class="Delimiter">.</span>value+<span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Delimiter">}</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">}</span>
+<span id="L61" class="LineNr"> 61 </span>
+<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(code)</span>
+<span id="L63" class="LineNr"> 63 </span><span class="Normal">void</span> <a href='036abandon.cc.html#L63'>abandon</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">,</span> <span class="Normal">int</span> <a href='036abandon.cc.html#L75'>payload_size</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L64" class="LineNr"> 64 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">invalid alloc-id</span><span class="Comment">*/</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;abandon: &quot; &lt;&lt; address &lt;&lt; '\n';</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="Comment">// clear rest of payload</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = address+<span class="Constant">1</span><span class="Delimiter">;</span>  curr &lt; address+payload_size<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span>
+<span id="L68" class="LineNr"> 68 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Comment">// append existing free list to address</span>
+<span id="L70" class="LineNr"> 70 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;saving &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <span class="Constant">&quot; in free-list of size &quot;</span> &lt;&lt; <a href='036abandon.cc.html#L75'>payload_size</a> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L71" class="LineNr"> 71 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">skip invalid alloc-id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036abandon.cc.html#L75'>payload_size</a><span class="Delimiter">));</span>
+<span id="L72" class="LineNr"> 72 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> <a href='036abandon.cc.html#L75'>payload_size</a><span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">);</span>
+<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">}</span>
+<span id="L74" class="LineNr"> 74 </span>
+<span id="L75" class="LineNr"> 75 </span><span class="Normal">int</span> <a href='036abandon.cc.html#L75'>payload_size</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L76" class="LineNr"> 76 </span>  x<span class="Delimiter">.</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="L77" class="LineNr"> 77 </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">false</span><span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Identifier">return</span> size_of<span class="Delimiter">(</span>x<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">}</span>
+<span id="L80" class="LineNr"> 80 </span>
+<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(after &quot;Allocate Special-cases&quot;)</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L83" class="LineNr"> 83 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;abandon&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;picking up space from free-list of size &quot;</span> &lt;&lt; size &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">int</span> result = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
+<span id="L85" class="LineNr"> 85 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new alloc from free list: &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L86" class="LineNr"> 86 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>free_list<span class="Delimiter">,</span> size<span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Comment">// clear 'deleted' tag</span>
+<span id="L88" class="LineNr"> 88 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Comment">// clear next pointer</span>
+<span id="L90" class="LineNr"> 90 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> result+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = result<span class="Delimiter">;</span>  curr &lt; result+size<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>      <a href='003trace.cc.html#L197'>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;memory in free list was not zeroed out: &quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">'/'</span> &lt;&lt; result &lt;&lt; <span class="Constant">&quot;; somebody wrote to us after free!!!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// always fatal</span>
+<span id="L95" class="LineNr"> 95 </span>    <span class="Delimiter">}</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span>
+<span id="L100" class="LineNr">100 </span><span class="Delimiter">:(scenario new_differing_size_no_reclaim)</span>
+<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L102" class="LineNr">102 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">1</span>:&amp;:num
+<span id="L104" class="LineNr">104 </span>  <a href='036abandon.cc.html#L63'>abandon</a> <span class="Constant">1</span>:&amp;:num
+<span id="L105" class="LineNr">105 </span>  <span class="Constant">3</span>:&amp;:@:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">2</span>  <span class="Comment"># different size</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">3</span>:&amp;:@:num
+<span id="L107" class="LineNr">107 </span>  <span class="Constant">5</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">4</span>:num
+<span id="L108" class="LineNr">108 </span>]
+<span id="L109" class="LineNr">109 </span><span class="Comment"># no reuse</span>
+<span id="L110" class="LineNr">110 </span><span class="traceContains">+mem: storing 0 in location 5</span>
+<span id="L111" class="LineNr">111 </span>
+<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(scenario new_reclaim_array)</span>
+<span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L114" class="LineNr">114 </span>  <span class="Constant">10</span>:&amp;:@:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">2</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">10</span>:&amp;:@:num
+<span id="L116" class="LineNr">116 </span>  <a href='036abandon.cc.html#L63'>abandon</a> <span class="Constant">10</span>:&amp;:@:num
+<span id="L117" class="LineNr">117 </span>  <span class="Constant">30</span>:&amp;:@:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span><span class="Delimiter">,</span> <span class="Constant">2</span>  <span class="Comment"># same size</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Constant">40</span>:num<span class="Special"> &lt;- </span>deaddress <span class="Constant">30</span>:&amp;:@:num
+<span id="L119" class="LineNr">119 </span>  <span class="Constant">50</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">20</span>:num<span class="Delimiter">,</span> <span class="Constant">40</span>:num
+<span id="L120" class="LineNr">120 </span>]
+<span id="L121" class="LineNr">121 </span><span class="Comment"># both calls to new returned identical addresses</span>
+<span id="L122" class="LineNr">122 </span><span class="traceContains">+mem: storing 1 in location 50</span>
+<span id="L123" class="LineNr">123 </span>
+<span id="L124" class="LineNr">124 </span><span class="Delimiter">:(scenario lookup_of_abandoned_address_raises_error)</span>
+<span id="L125" class="LineNr">125 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L126" class="LineNr">126 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L127" class="LineNr">127 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">num:type</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Constant">3</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:&amp;:num
+<span id="L129" class="LineNr">129 </span>  <a href='036abandon.cc.html#L63'>abandon</a> <span class="Constant">1</span>:&amp;:num
+<span id="L130" class="LineNr">130 </span>  <span class="Constant">5</span>:num/<span class="Special">raw &lt;- </span>copy *<span class="Constant">3</span>:&amp;:num
+<span id="L131" class="LineNr">131 </span>]
+<span id="L132" class="LineNr">132 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='043space.cc.html#L101'>address</a> is already abandoned in '5:num/raw &lt;- copy *3:&amp;:num'</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/038new_text.cc.html b/html/038new_text.cc.html
index a48f15cb..0e1575f1 100644
--- a/html/038new_text.cc.html
+++ b/html/038new_text.cc.html
@@ -66,25 +66,25 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">  2 </span>
 <span id="L3" class="LineNr">  3 </span><span class="Comment">//: A Mu text is an address to an array of characters.</span>
 <span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L5" class="LineNr">  5 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:array:character&quot;</span><span class="Delimiter">));</span>
+<span id="L5" class="LineNr">  5 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;text&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;&amp;:@:character&quot;</span><span class="Delimiter">));</span>
 <span id="L6" class="LineNr">  6 </span>
 <span id="L7" class="LineNr">  7 </span><span class="Delimiter">:(scenario new_string)</span>
 <span id="L8" class="LineNr">  8 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L9" class="LineNr">  9 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc def]
-<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">2</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>index *<span class="Constant">1</span>:text<span class="Delimiter">,</span> <span class="Constant">5</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc def]
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">20</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>index *<span class="Constant">10</span>:text<span class="Delimiter">,</span> <span class="Constant">5</span>
 <span id="L11" class="LineNr"> 11 </span>]
 <span id="L12" class="LineNr"> 12 </span><span class="Comment"># number code for 'e'</span>
-<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+mem: storing 101 in location 2</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+mem: storing 101 in location 20</span>
 <span id="L14" class="LineNr"> 14 </span>
 <span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(scenario new_string_handles_unicode)</span>
 <span id="L16" class="LineNr"> 16 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L17" class="LineNr"> 17 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [a«c]
-<span id="L18" class="LineNr"> 18 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>length *<span class="Constant">1</span>:text
-<span id="L19" class="LineNr"> 19 </span>  <span class="Constant">3</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>index *<span class="Constant">1</span>:text<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L17" class="LineNr"> 17 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [a«c]
+<span id="L18" class="LineNr"> 18 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>length *<span class="Constant">10</span>:text
+<span id="L19" class="LineNr"> 19 </span>  <span class="Constant">21</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>index *<span class="Constant">10</span>:text<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L20" class="LineNr"> 20 </span>]
-<span id="L21" class="LineNr"> 21 </span><span class="traceContains">+mem: storing 3 in location 2</span>
+<span id="L21" class="LineNr"> 21 </span><span class="traceContains">+mem: storing 3 in location 20</span>
 <span id="L22" class="LineNr"> 22 </span><span class="Comment"># unicode for '«'</span>
-<span id="L23" class="LineNr"> 23 </span><span class="traceContains">+mem: storing 171 in location 3</span>
+<span id="L23" class="LineNr"> 23 </span><span class="traceContains">+mem: storing 171 in location 21</span>
 <span id="L24" class="LineNr"> 24 </span>
 <span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End NEW Check Special-cases&quot;)</span>
 <span id="L26" class="LineNr"> 26 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>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 class="Identifier">break</span><span class="Delimiter">;</span>
@@ -93,201 +93,210 @@ if ('onhashchange' in window) {
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(after &quot;case NEW&quot; following &quot;Primitive Recipe Implementations&quot;)</span>
 <span id="L30" class="LineNr"> 30 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><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> <span class="Delimiter">{</span>
 <span id="L31" class="LineNr"> 31 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L32" class="LineNr"> 32 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><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>name<span class="Delimiter">));</span>
-<span id="L33" class="LineNr"> 33 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new string alloc: &quot;</span> &lt;&lt; products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L34" class="LineNr"> 34 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="Delimiter">}</span>
-<span id="L36" class="LineNr"> 36 </span>
-<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(code)</span>
-<span id="L38" class="LineNr"> 38 </span><span class="Normal">int</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Comment">// allocate an array just large enough for it</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Normal">int</span> string_length = <a href='038new_text.cc.html#L129'>unicode_length</a><span class="Delimiter">(</span>contents<span class="Delimiter">);</span>
-<span id="L41" class="LineNr"> 41 </span><span class="CommentedCode">//?   Total_alloc += string_length+1;</span>
-<span id="L42" class="LineNr"> 42 </span><span class="CommentedCode">//?   ++Num_alloc;</span>
-<span id="L43" class="LineNr"> 43 </span>  <span class="Normal">int</span> result = allocate<span class="Delimiter">(</span>string_length+<span class="Comment">/*</span><span class="Comment">array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">int</span> curr_address = result<span class="Delimiter">;</span>
-<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing string length &quot;</span> &lt;&lt; string_length &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L46" class="LineNr"> 46 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> string_length<span class="Delimiter">);</span>
-<span id="L47" class="LineNr"> 47 </span>  ++curr_address<span class="Delimiter">;</span>  <span class="Comment">// skip length</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">int</span> curr = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* raw_contents = contents<span class="Delimiter">.</span>c_str<span class="Delimiter">();</span>
-<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; string_length<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L51" class="LineNr"> 51 </span>    <span class="Normal">uint32_t</span> curr_character<span class="Delimiter">;</span>
-<span id="L52" class="LineNr"> 52 </span>    assert<span class="Delimiter">(</span>curr &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>
-<span id="L53" class="LineNr"> 53 </span>    tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;curr_character<span class="Delimiter">,</span> &amp;raw_contents[curr]<span class="Delimiter">);</span>
-<span id="L54" class="LineNr"> 54 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing string character &quot;</span> &lt;&lt; curr_character &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L55" class="LineNr"> 55 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> curr_character<span class="Delimiter">);</span>
-<span id="L56" class="LineNr"> 56 </span>    curr += tb_utf8_char_length<span class="Delimiter">(</span>raw_contents[curr]<span class="Delimiter">);</span>
-<span id="L57" class="LineNr"> 57 </span>    ++curr_address<span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <span class="Delimiter">}</span>
-<span id="L59" class="LineNr"> 59 </span>  <span class="Comment">// Mu strings are not null-terminated in memory.</span>
-<span id="L60" class="LineNr"> 60 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L61" class="LineNr"> 61 </span><span class="Delimiter">}</span>
-<span id="L62" class="LineNr"> 62 </span>
-<span id="L63" class="LineNr"> 63 </span><span class="Comment">//: a new kind of typo</span>
+<span id="L32" class="LineNr"> 32 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L33" class="LineNr"> 33 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L39'>new_mu_text</a><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>name<span class="Delimiter">));</span>
+<span id="L34" class="LineNr"> 34 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new string alloc: &quot;</span> &lt;&lt; products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L35" class="LineNr"> 35 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Delimiter">}</span>
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(code)</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Normal">int</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Comment">// allocate an array just large enough for it</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">int</span> string_length = <a href='038new_text.cc.html#L130'>unicode_length</a><span class="Delimiter">(</span>contents<span class="Delimiter">);</span>
+<span id="L42" class="LineNr"> 42 </span><span class="CommentedCode">//?   Total_alloc += string_length+1;</span>
+<span id="L43" class="LineNr"> 43 </span><span class="CommentedCode">//?   ++Num_alloc;</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">int</span> result = allocate<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">array length</span><span class="Comment">*/</span><span class="Constant">1</span> + string_length<span class="Delimiter">);</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">int</span> curr_address = result<span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span>  ++curr_address<span class="Delimiter">;</span>  <span class="Comment">// skip alloc id</span>
+<span id="L47" class="LineNr"> 47 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing string length &quot;</span> &lt;&lt; string_length &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L48" class="LineNr"> 48 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> string_length<span class="Delimiter">);</span>
+<span id="L49" class="LineNr"> 49 </span>  ++curr_address<span class="Delimiter">;</span>  <span class="Comment">// skip length</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">int</span> curr = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* raw_contents = contents<span class="Delimiter">.</span>c_str<span class="Delimiter">();</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; string_length<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L53" class="LineNr"> 53 </span>    <span class="Normal">uint32_t</span> curr_character<span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span>    assert<span class="Delimiter">(</span>curr &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>
+<span id="L55" class="LineNr"> 55 </span>    tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;curr_character<span class="Delimiter">,</span> &amp;raw_contents[curr]<span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing string character &quot;</span> &lt;&lt; curr_character &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L57" class="LineNr"> 57 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> curr_character<span class="Delimiter">);</span>
+<span id="L58" class="LineNr"> 58 </span>    curr += tb_utf8_char_length<span class="Delimiter">(</span>raw_contents[curr]<span class="Delimiter">);</span>
+<span id="L59" class="LineNr"> 59 </span>    ++curr_address<span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span>  <span class="Delimiter">}</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Comment">// Mu strings are not null-terminated in memory.</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span><span class="Delimiter">}</span>
 <span id="L64" class="LineNr"> 64 </span>
-<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(scenario string_literal_without_instruction)</span>
-<span id="L66" class="LineNr"> 66 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L67" class="LineNr"> 67 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L68" class="LineNr"> 68 </span>  [abc]
-<span id="L69" class="LineNr"> 69 </span>]
-<span id="L70" class="LineNr"> 70 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L32'>instruction</a> '[abc]' has no <a href='010vm.cc.html#L19'>recipe</a> in '[abc]'</span>
-<span id="L71" class="LineNr"> 71 </span>
-<span id="L72" class="LineNr"> 72 </span><span class="Comment">//: stash recognizes strings</span>
+<span id="L65" class="LineNr"> 65 </span><span class="Comment">//: a new kind of typo</span>
+<span id="L66" class="LineNr"> 66 </span>
+<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(scenario literal_text_without_instruction)</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L69" class="LineNr"> 69 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L70" class="LineNr"> 70 </span>  [abc]
+<span id="L71" class="LineNr"> 71 </span>]
+<span id="L72" class="LineNr"> 72 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L33'>instruction</a> '[abc]' has no <a href='010vm.cc.html#L19'>recipe</a> in '[abc]'</span>
 <span id="L73" class="LineNr"> 73 </span>
-<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(scenario stash_string)</span>
-<span id="L75" class="LineNr"> 75 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L76" class="LineNr"> 76 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L77" class="LineNr"> 77 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:text
-<span id="L78" class="LineNr"> 78 </span>]
-<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+app: foo: abc</span>
-<span id="L80" class="LineNr"> 80 </span>
-<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(before &quot;End inspect Special-cases(r, data)&quot;)</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L83" class="LineNr"> 83 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>data<span class="Delimiter">));</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">}</span>
-<span id="L86" class="LineNr"> 86 </span>
-<span id="L87" class="LineNr"> 87 </span><span class="Delimiter">:(before &quot;End $print Special-cases&quot;)</span>
-<span id="L88" class="LineNr"> 88 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><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>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L89" class="LineNr"> 89 </span>  cout &lt;&lt; <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">}</span>
-<span id="L91" class="LineNr"> 91 </span>
-<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">:(scenario unicode_string)</span>
-<span id="L93" class="LineNr"> 93 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L94" class="LineNr"> 94 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [♠]
-<span id="L95" class="LineNr"> 95 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:text
-<span id="L96" class="LineNr"> 96 </span>]
-<span id="L97" class="LineNr"> 97 </span><span class="traceContains">+app: foo: ♠</span>
-<span id="L98" class="LineNr"> 98 </span>
-<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(scenario stash_space_after_string)</span>
-<span id="L100" class="LineNr">100 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L101" class="LineNr">101 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L102" class="LineNr">102 </span>  stash <span class="Constant">1</span>:text<span class="Delimiter">,</span> [foo]
-<span id="L103" class="LineNr">103 </span>]
-<span id="L104" class="LineNr">104 </span><span class="traceContains">+app: abc foo</span>
-<span id="L105" class="LineNr">105 </span>
-<span id="L106" class="LineNr">106 </span><span class="Delimiter">:(scenario stash_string_as_array)</span>
-<span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L108" class="LineNr">108 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L109" class="LineNr">109 </span>  stash *<span class="Constant">1</span>:text
-<span id="L110" class="LineNr">110 </span>]
-<span id="L111" class="LineNr">111 </span><span class="traceContains">+app: 3 97 98 99</span>
-<span id="L112" class="LineNr">112 </span>
-<span id="L113" class="LineNr">113 </span><span class="Comment">//: fixes way more than just stash</span>
-<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_text(reagent x)&quot;)</span>
-<span id="L115" class="LineNr">115 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>
-<span id="L117" class="LineNr">117 </span><span class="Comment">//: Allocate more to routine when initializing a literal string</span>
-<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(scenario new_string_overflow)</span>
-<span id="L119" class="LineNr">119 </span><span class="Special">% Initial_memory_per_routine = 2;</span>
-<span id="L120" class="LineNr">120 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L121" class="LineNr">121 </span>  <span class="Constant">1</span>:<a href='043space.cc.html#L80'>address</a>:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L122" class="LineNr">122 </span>  <span class="Constant">2</span>:text/<span class="Special">raw &lt;- </span><span class="Normal">new</span> [a]  <span class="Comment"># not enough room in initial page, if you take the array length into account</span>
-<span id="L123" class="LineNr">123 </span>]
-<span id="L124" class="LineNr">124 </span><span class="traceContains">+new: routine allocated memory from 1000 to 1002</span>
-<span id="L125" class="LineNr">125 </span><span class="traceContains">+new: routine allocated memory from 1002 to 1004</span>
-<span id="L126" class="LineNr">126 </span>
-<span id="L127" class="LineNr">127 </span><span class="Comment">//: helpers</span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">:(code)</span>
-<span id="L129" class="LineNr">129 </span><span class="Normal">int</span> <a href='038new_text.cc.html#L129'>unicode_length</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L130" class="LineNr">130 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* in = s<span class="Delimiter">.</span>c_str<span class="Delimiter">();</span>
-<span id="L131" class="LineNr">131 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L132" class="LineNr">132 </span>  <span class="Normal">int</span> curr = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// carefully bounds-check on the string</span>
-<span id="L134" class="LineNr">134 </span>    <span class="Comment">// before accessing its raw pointer</span>
-<span id="L135" class="LineNr">135 </span>    ++result<span class="Delimiter">;</span>
-<span id="L136" class="LineNr">136 </span>    curr += tb_utf8_char_length<span class="Delimiter">(</span>in[curr]<span class="Delimiter">);</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Delimiter">}</span>
-<span id="L138" class="LineNr">138 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span><span class="Delimiter">}</span>
-<span id="L140" class="LineNr">140 </span>
-<span id="L141" class="LineNr">141 </span>string <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">);</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L148'>read_mu_characters</a><span class="Delimiter">(</span>address+<span class="Constant">1</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
-<span id="L146" class="LineNr">146 </span><span class="Delimiter">}</span>
-<span id="L147" class="LineNr">147 </span>
-<span id="L148" class="LineNr">148 </span>string <a href='038new_text.cc.html#L148'>read_mu_characters</a><span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">int</span> length<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L149" class="LineNr">149 </span>  ostringstream tmp<span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = start<span class="Delimiter">;</span>  curr &lt; start+length<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span>
-<span id="L151" class="LineNr">151 </span>    tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Identifier">return</span> tmp<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L153" class="LineNr">153 </span><span class="Delimiter">}</span>
-<span id="L154" class="LineNr">154 </span>
-<span id="L155" class="LineNr">155 </span><span class="SalientComment">//:: some miscellaneous helpers now that we have text</span>
-<span id="L156" class="LineNr">156 </span>
-<span id="L157" class="LineNr">157 </span><span class="Comment">//: assert: perform sanity checks at runtime</span>
-<span id="L158" class="LineNr">158 </span>
-<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(scenario assert)</span>
-<span id="L160" class="LineNr">160 </span><span class="Special">% Hide_errors = true;  // '%' lines insert arbitrary C code into tests before calling 'run' with the lines below. Must be immediately after :(scenario) line.</span>
-<span id="L161" class="LineNr">161 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L162" class="LineNr">162 </span>  assert <span class="Constant">0</span><span class="Delimiter">,</span> [<span class="Normal">this</span> is an assert in Mu]
-<span id="L163" class="LineNr">163 </span>]
-<span id="L164" class="LineNr">164 </span><span class="traceContains">+error: this is an assert in Mu</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L167" class="LineNr">167 </span>ASSERT<span class="Delimiter">,</span>
-<span id="L168" class="LineNr">168 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L169" class="LineNr">169 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;assert&quot;</span><span class="Delimiter">,</span> ASSERT<span class="Delimiter">);</span>
-<span id="L170" class="LineNr">170 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L171" class="LineNr">171 </span><span class="Normal">case</span> ASSERT: <span class="Delimiter">{</span>
-<span id="L172" class="LineNr">172 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' takes exactly two ingredients rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L174" class="LineNr">174 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L175" class="LineNr">175 </span>  <span class="Delimiter">}</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' requires a boolean for its first ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L178" class="LineNr">178 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>  <span class="Delimiter">}</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L181" class="LineNr">181 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' requires a text as its second ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L182" class="LineNr">182 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L183" class="LineNr">183 </span>  <span class="Delimiter">}</span>
-<span id="L184" class="LineNr">184 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L185" class="LineNr">185 </span><span class="Delimiter">}</span>
-<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L187" class="LineNr">187 </span><span class="Normal">case</span> ASSERT: <span class="Delimiter">{</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><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">1</span><span class="Delimiter">)))</span>
-<span id="L190" class="LineNr">190 </span>      <a href='003trace.cc.html#L174'>raise</a> &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">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L191" class="LineNr">191 </span>    <span class="Normal">else</span>
-<span id="L192" class="LineNr">192 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L193" class="LineNr">193 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Delimiter">}</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
-<span id="L197" class="LineNr">197 </span>
-<span id="L198" class="LineNr">198 </span><span class="Comment">//: 'cheating' by using the host system</span>
-<span id="L199" class="LineNr">199 </span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L201" class="LineNr">201 </span>_READ<span class="Delimiter">,</span>
-<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L203" class="LineNr">203 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$read&quot;</span><span class="Delimiter">,</span> _READ<span class="Delimiter">);</span>
-<span id="L204" class="LineNr">204 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L205" class="LineNr">205 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span><span class="Delimiter">}</span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L209" class="LineNr">209 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>  <a href='038new_text.cc.html#L220'>skip_whitespace</a><span class="Delimiter">(</span>cin<span class="Delimiter">);</span>
-<span id="L211" class="LineNr">211 </span>  string result<span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
-<span id="L213" class="LineNr">213 </span>    cin &gt;&gt; result<span class="Delimiter">;</span>
-<span id="L214" class="LineNr">214 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L215" class="LineNr">215 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">));</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span><span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>
-<span id="L219" class="LineNr">219 </span><span class="Delimiter">:(code)</span>
-<span id="L220" class="LineNr">220 </span><span class="Normal">void</span> <a href='038new_text.cc.html#L220'>skip_whitespace</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L222" class="LineNr">222 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L223" class="LineNr">223 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L224" class="LineNr">224 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L225" class="LineNr">225 </span>  <span class="Delimiter">}</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Comment">//: stash recognizes texts</span>
+<span id="L75" class="LineNr"> 75 </span>
+<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(scenario stash_text)</span>
+<span id="L77" class="LineNr"> 77 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L78" class="LineNr"> 78 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L79" class="LineNr"> 79 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:text
+<span id="L80" class="LineNr"> 80 </span>]
+<span id="L81" class="LineNr"> 81 </span><span class="traceContains">+app: foo: abc</span>
+<span id="L82" class="LineNr"> 82 </span>
+<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End inspect Special-cases(r, data)&quot;)</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</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="Delimiter">:(before &quot;End $print Special-cases&quot;)</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L179'>is_mu_text</a><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>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L90" class="LineNr"> 90 </span>  cout &lt;&lt; <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">}</span>
+<span id="L92" class="LineNr"> 92 </span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(scenario unicode_text)</span>
+<span id="L94" class="LineNr"> 94 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L95" class="LineNr"> 95 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [♠]
+<span id="L96" class="LineNr"> 96 </span>  stash [foo:]<span class="Delimiter">,</span> <span class="Constant">1</span>:text
+<span id="L97" class="LineNr"> 97 </span>]
+<span id="L98" class="LineNr"> 98 </span><span class="traceContains">+app: foo: ♠</span>
+<span id="L99" class="LineNr"> 99 </span>
+<span id="L100" class="LineNr">100 </span><span class="Delimiter">:(scenario stash_space_after_text)</span>
+<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L102" class="LineNr">102 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L103" class="LineNr">103 </span>  stash <span class="Constant">1</span>:text<span class="Delimiter">,</span> [foo]
+<span id="L104" class="LineNr">104 </span>]
+<span id="L105" class="LineNr">105 </span><span class="traceContains">+app: abc foo</span>
+<span id="L106" class="LineNr">106 </span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(scenario stash_text_as_array)</span>
+<span id="L108" class="LineNr">108 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L109" class="LineNr">109 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L110" class="LineNr">110 </span>  stash *<span class="Constant">1</span>:text
+<span id="L111" class="LineNr">111 </span>]
+<span id="L112" class="LineNr">112 </span><span class="traceContains">+app: 3 97 98 99</span>
+<span id="L113" class="LineNr">113 </span>
+<span id="L114" class="LineNr">114 </span><span class="Comment">//: fixes way more than just stash</span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(before &quot;End Preprocess is_mu_text(reagent x)&quot;)</span>
+<span id="L116" class="LineNr">116 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span>
+<span id="L118" class="LineNr">118 </span><span class="Comment">//: Allocate more to routine when initializing a literal text</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario new_text_overflow)</span>
+<span id="L120" class="LineNr">120 </span><span class="Special">% Initial_memory_per_routine = 3;</span>
+<span id="L121" class="LineNr">121 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L122" class="LineNr">122 </span>  <span class="Constant">10</span>:&amp;:num/<span class="Special">raw &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Constant">20</span>:text/<span class="Special">raw &lt;- </span><span class="Normal">new</span> [a]  <span class="Comment"># not enough room in initial page, if you take the array length into account</span>
+<span id="L124" class="LineNr">124 </span>]
+<span id="L125" class="LineNr">125 </span><span class="traceContains">+new: routine allocated memory from 1000 to 1003</span>
+<span id="L126" class="LineNr">126 </span><span class="traceContains">+new: routine allocated memory from 1003 to 1006</span>
+<span id="L127" class="LineNr">127 </span>
+<span id="L128" class="LineNr">128 </span><span class="Comment">//: helpers</span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(code)</span>
+<span id="L130" class="LineNr">130 </span><span class="Normal">int</span> <a href='038new_text.cc.html#L130'>unicode_length</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* in = s<span class="Delimiter">.</span>c_str<span class="Delimiter">();</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">int</span> curr = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// carefully bounds-check on the string</span>
+<span id="L135" class="LineNr">135 </span>    <span class="Comment">// before accessing its raw pointer</span>
+<span id="L136" class="LineNr">136 </span>    ++result<span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>    curr += tb_utf8_char_length<span class="Delimiter">(</span>in[curr]<span class="Delimiter">);</span>
+<span id="L138" class="LineNr">138 </span>  <span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>
+<span id="L142" class="LineNr">142 </span>string <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Normal">int</span> length = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> address+<span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L149'>read_mu_characters</a><span class="Delimiter">(</span>address+<span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> length<span class="Delimiter">);</span>
+<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>
+<span id="L149" class="LineNr">149 </span>string <a href='038new_text.cc.html#L149'>read_mu_characters</a><span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">int</span> length<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L150" class="LineNr">150 </span>  ostringstream tmp<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> curr = start<span class="Delimiter">;</span>  curr &lt; start+length<span class="Delimiter">;</span>  ++curr<span class="Delimiter">)</span>
+<span id="L152" class="LineNr">152 </span>    tmp &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Identifier">return</span> tmp<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L154" class="LineNr">154 </span><span class="Delimiter">}</span>
+<span id="L155" class="LineNr">155 </span>
+<span id="L156" class="LineNr">156 </span><span class="SalientComment">//:: some miscellaneous helpers now that we have text</span>
+<span id="L157" class="LineNr">157 </span>
+<span id="L158" class="LineNr">158 </span><span class="Comment">//: assert: perform sanity checks at runtime</span>
+<span id="L159" class="LineNr">159 </span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(scenario assert_literal)</span>
+<span id="L161" class="LineNr">161 </span><span class="Special">% Hide_errors = true;  // '%' lines insert arbitrary C code into tests before calling 'run' with the lines below. Must be immediately after :(scenario) line.</span>
+<span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L163" class="LineNr">163 </span>  assert <span class="Constant">0</span><span class="Delimiter">,</span> [<span class="Normal">this</span> is an assert in Mu]
+<span id="L164" class="LineNr">164 </span>]
+<span id="L165" class="LineNr">165 </span><span class="traceContains">+error: this is an assert in Mu</span>
+<span id="L166" class="LineNr">166 </span>
+<span id="L167" class="LineNr">167 </span><span class="Delimiter">:(scenario assert)</span>
+<span id="L168" class="LineNr">168 </span><span class="Special">% Hide_errors = true;  // '%' lines insert arbitrary C code into tests before calling 'run' with the lines below. Must be immediately after :(scenario) line.</span>
+<span id="L169" class="LineNr">169 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L170" class="LineNr">170 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [<span class="Normal">this</span> is an assert in Mu]
+<span id="L171" class="LineNr">171 </span>  assert <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>:text
+<span id="L172" class="LineNr">172 </span>]
+<span id="L173" class="LineNr">173 </span><span class="traceContains">+error: this is an assert in Mu</span>
+<span id="L174" class="LineNr">174 </span>
+<span id="L175" class="LineNr">175 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L176" class="LineNr">176 </span>ASSERT<span class="Delimiter">,</span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L178" class="LineNr">178 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;assert&quot;</span><span class="Delimiter">,</span> ASSERT<span class="Delimiter">);</span>
+<span id="L179" class="LineNr">179 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L180" class="LineNr">180 </span><span class="Normal">case</span> ASSERT: <span class="Delimiter">{</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L182" class="LineNr">182 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' takes exactly two ingredients rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L183" class="LineNr">183 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Delimiter">}</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_address<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_scalar<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L186" class="LineNr">186 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' requires a scalar or <a href='043space.cc.html#L101'>address</a> for its first ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L187" class="LineNr">187 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Delimiter">}</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &amp;&amp; !is_mu_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L190" class="LineNr">190 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'assert' requires a text as its second ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L191" class="LineNr">191 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Delimiter">}</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">}</span>
+<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L196" class="LineNr">196 </span><span class="Normal">case</span> ASSERT: <span class="Delimiter">{</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar_ingredient<span class="Delimiter">(</span>ingredients<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L198" class="LineNr">198 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><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">1</span><span class="Delimiter">)))</span>
+<span id="L199" class="LineNr">199 </span>      <a href='003trace.cc.html#L197'>raise</a> &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">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L200" class="LineNr">200 </span>    <span class="Normal">else</span>
+<span id="L201" class="LineNr">201 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L202" class="LineNr">202 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Delimiter">}</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span>
+<span id="L207" class="LineNr">207 </span><span class="Comment">//: 'cheating' by using the host system</span>
+<span id="L208" class="LineNr">208 </span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L210" class="LineNr">210 </span>_READ<span class="Delimiter">,</span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L212" class="LineNr">212 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$read&quot;</span><span class="Delimiter">,</span> _READ<span class="Delimiter">);</span>
+<span id="L213" class="LineNr">213 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L214" class="LineNr">214 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">}</span>
+<span id="L217" class="LineNr">217 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L218" class="LineNr">218 </span><span class="Normal">case</span> _READ: <span class="Delimiter">{</span>
+<span id="L219" class="LineNr">219 </span>  <a href='038new_text.cc.html#L229'>skip_whitespace</a><span class="Delimiter">(</span>cin<span class="Delimiter">);</span>
+<span id="L220" class="LineNr">220 </span>  string result<span class="Delimiter">;</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>cin<span class="Delimiter">))</span>
+<span id="L222" class="LineNr">222 </span>    cin &gt;&gt; result<span class="Delimiter">;</span>
+<span id="L223" class="LineNr">223 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L224" class="LineNr">224 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">));</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L226" class="LineNr">226 </span><span class="Delimiter">}</span>
+<span id="L227" class="LineNr">227 </span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">:(code)</span>
+<span id="L229" class="LineNr">229 </span><span class="Normal">void</span> <a href='038new_text.cc.html#L229'>skip_whitespace</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L231" class="LineNr">231 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L232" class="LineNr">232 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()))</span> in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L233" class="LineNr">233 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Delimiter">}</span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/040brace.cc.html b/html/040brace.cc.html
index a7c0592d..4f47aeb9 100644
--- a/html/040brace.cc.html
+++ b/html/040brace.cc.html
@@ -101,15 +101,15 @@ if ('onhashchange' in window) {
 <span id="L39" class="LineNr"> 39 </span>  <span class="Normal">const</span> <span class="Normal">int</span> OPEN = <span class="Constant">0</span><span class="Delimiter">,</span> CLOSE = <span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Comment">// use signed integer for step index because we'll be doing arithmetic on it</span>
 <span id="L41" class="LineNr"> 41 </span>  list&lt;pair&lt;<span class="Normal">int</span><span class="Comment">/*</span><span class="Comment">OPEN/CLOSE</span><span class="Comment">*/</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">step</span><span class="Comment">*/</span><span class="Normal">int</span>&gt; &gt; braces<span class="Delimiter">;</span>
-<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- <a href='012transform.cc.html#L99'>transform</a> braces for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L43" class="LineNr"> 43 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L44" class="LineNr"> 44 </span>    <span class="Normal">const</span> instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L45" class="LineNr"> 45 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;{&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (open, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (open, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L47" class="LineNr"> 47 </span>      braces<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;<span class="Normal">int</span><span class="Delimiter">,</span><span class="Normal">int</span>&gt;<span class="Delimiter">(</span>OPEN<span class="Delimiter">,</span> index<span class="Delimiter">));</span>
 <span id="L48" class="LineNr"> 48 </span>    <span class="Delimiter">}</span>
 <span id="L49" class="LineNr"> 49 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L50" class="LineNr"> 50 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (close, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L50" class="LineNr"> 50 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push (close, &quot;</span> &lt;&lt; index &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L51" class="LineNr"> 51 </span>      braces<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pair&lt;<span class="Normal">int</span><span class="Delimiter">,</span><span class="Normal">int</span>&gt;<span class="Delimiter">(</span>CLOSE<span class="Delimiter">,</span> index<span class="Delimiter">));</span>
 <span id="L52" class="LineNr"> 52 </span>    <span class="Delimiter">}</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Delimiter">}</span>
@@ -122,7 +122,7 @@ if ('onhashchange' in window) {
 <span id="L60" class="LineNr"> 60 </span>    <span class="Delimiter">}</span>
 <span id="L61" class="LineNr"> 61 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L62" class="LineNr"> 62 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L63" class="LineNr"> 63 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '}'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L63" class="LineNr"> 63 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '}'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L64" class="LineNr"> 64 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L65" class="LineNr"> 65 </span>      <span class="Delimiter">}</span>
 <span id="L66" class="LineNr"> 66 </span>      open_braces<span class="Delimiter">.</span>pop<span class="Delimiter">();</span>
@@ -135,13 +135,13 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span>         &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break&quot;</span>
 <span id="L74" class="LineNr"> 74 </span>         &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break-if&quot;</span>
 <span id="L75" class="LineNr"> 75 </span>         &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;break-unless&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr"> 76 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ...&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L76" class="LineNr"> 76 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; ...&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L77" class="LineNr"> 77 </span>      <span class="Identifier">continue</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">// check for errors</span>
 <span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-if&quot;</span><span class="Delimiter">)</span> != string::npos || inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-unless&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L81" class="LineNr"> 81 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' expects 1 or 2 ingredients, but got none</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L82" class="LineNr"> 82 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' expects 1 or 2 ingredients, but got none</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L83" class="LineNr"> 83 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L84" class="LineNr"> 84 </span>      <span class="Delimiter">}</span>
 <span id="L85" class="LineNr"> 85 </span>    <span class="Delimiter">}</span>
@@ -163,32 +163,32 @@ if ('onhashchange' in window) {
 <span id="L101" class="LineNr">101 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-if&quot;</span><span class="Delimiter">)</span> != string::npos || inst<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;-unless&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L102" class="LineNr">102 </span>      <span class="Comment">// conditional branches check arg 1</span>
 <span id="L103" class="LineNr">103 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span> &amp;&amp; is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L104" class="LineNr">104 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
+<span id="L104" class="LineNr">104 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
 <span id="L105" class="LineNr">105 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L106" class="LineNr">106 </span>      <span class="Delimiter">}</span>
 <span id="L107" class="LineNr">107 </span>    <span class="Delimiter">}</span>
 <span id="L108" class="LineNr">108 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L109" class="LineNr">109 </span>      <span class="Comment">// unconditional branches check arg 0</span>
 <span id="L110" class="LineNr">110 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; is_literal<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &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>name &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
+<span id="L111" class="LineNr">111 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &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>name &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
 <span id="L112" class="LineNr">112 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L113" class="LineNr">113 </span>      <span class="Delimiter">}</span>
 <span id="L114" class="LineNr">114 </span>    <span class="Delimiter">}</span>
 <span id="L115" class="LineNr">115 </span>    <span class="Comment">// if implicit, compute target</span>
 <span id="L116" class="LineNr">116 </span>    reagent target<span class="Delimiter">(</span><span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;offset&quot;</span><span class="Delimiter">));</span>
-<span id="L117" class="LineNr">117 </span>    target<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span>    target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L118" class="LineNr">118 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L119" class="LineNr">119 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; old_name &lt;&lt; <span class="Constant">&quot;' needs a '{' before</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L119" class="LineNr">119 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; old_name &lt;&lt; <span class="Constant">&quot;' needs a '{' before</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L120" class="LineNr">120 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>old_name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;loop&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span>
-<span id="L121" class="LineNr">121 </span>      target<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">()</span>-index<span class="Delimiter">);</span>
+<span id="L121" class="LineNr">121 </span>      target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">()</span>-index<span class="Delimiter">);</span>
 <span id="L122" class="LineNr">122 </span>    <span class="Normal">else</span>  <span class="Comment">// break instruction</span>
-<span id="L123" class="LineNr">123 </span>      target<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='040brace.cc.html#L135'>matching_brace</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">(),</span> braces<span class="Delimiter">,</span> r<span class="Delimiter">)</span> - index - <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span>      target<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='040brace.cc.html#L135'>matching_brace</a><span class="Delimiter">(</span>open_braces<span class="Delimiter">.</span>top<span class="Delimiter">(),</span> braces<span class="Delimiter">,</span> r<span class="Delimiter">)</span> - index - <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L124" class="LineNr">124 </span>    inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>target<span class="Delimiter">);</span>
 <span id="L125" class="LineNr">125 </span>    <span class="Comment">// log computed target</span>
 <span id="L126" class="LineNr">126 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;jump&quot;</span><span class="Delimiter">)</span>
-<span id="L127" class="LineNr">127 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
+<span id="L127" class="LineNr">127 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
 <span id="L128" class="LineNr">128 </span>    <span class="Normal">else</span>
-<span id="L129" class="LineNr">129 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</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>name &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
+<span id="L129" class="LineNr">129 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">' '</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>name &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>target<span class="Delimiter">.</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;:offset</span><span class="Constant">&quot; &lt;&lt; end();</span>
 <span id="L130" class="LineNr">130 </span>  <span class="Delimiter">}</span>
 <span id="L131" class="LineNr">131 </span><span class="Delimiter">}</span>
 <span id="L132" class="LineNr">132 </span>
@@ -196,12 +196,12 @@ if ('onhashchange' in window) {
 <span id="L134" class="LineNr">134 </span><span class="Comment">// enable future signed arithmetic</span>
 <span id="L135" class="LineNr">135 </span><span class="Normal">int</span> <a href='040brace.cc.html#L135'>matching_brace</a><span class="Delimiter">(</span><span class="Normal">int</span> index<span class="Delimiter">,</span> <span class="Normal">const</span> list&lt;pair&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt;&amp; braces<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L136" class="LineNr">136 </span>  <span class="Normal">int</span> stacksize = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>list&lt;pair&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt;::const_iterator p = braces<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != braces<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>list&lt;pair&lt;<span class="Normal">int</span><span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt;::const_iterator p = braces<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != braces<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L138" class="LineNr">138 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second &lt; index<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L139" class="LineNr">139 </span>    stacksize += <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first ? <span class="Constant">1</span> : -<span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L140" class="LineNr">140 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>stacksize == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
 <span id="L141" class="LineNr">141 </span>  <span class="Delimiter">}</span>
-<span id="L142" class="LineNr">142 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '{'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L142" class="LineNr">142 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unbalanced '{'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L143" class="LineNr">143 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  <span class="Comment">// exit current routine</span>
 <span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
 <span id="L145" class="LineNr">145 </span>
@@ -458,7 +458,7 @@ if ('onhashchange' in window) {
 <span id="L396" class="LineNr">396 </span>    curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L397" class="LineNr">397 </span>  <span class="Delimiter">}</span>
 <span id="L398" class="LineNr">398 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L399" class="LineNr">399 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L399" class="LineNr">399 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L400" class="LineNr">400 </span>  <span class="Delimiter">}</span>
 <span id="L401" class="LineNr">401 </span><span class="Delimiter">}</span>
 <span id="L402" class="LineNr">402 </span><span class="Comment">// rewrite 'return-unless a, b, c, ...' to</span>
@@ -474,7 +474,7 @@ if ('onhashchange' in window) {
 <span id="L412" class="LineNr">412 </span>    curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L413" class="LineNr">413 </span>  <span class="Delimiter">}</span>
 <span id="L414" class="LineNr">414 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L415" class="LineNr">415 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L415" class="LineNr">415 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; curr<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' never yields any products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L416" class="LineNr">416 </span>  <span class="Delimiter">}</span>
 <span id="L417" class="LineNr">417 </span><span class="Delimiter">}</span>
 <span id="L418" class="LineNr">418 </span>
@@ -483,21 +483,21 @@ if ('onhashchange' in window) {
 <span id="L421" class="LineNr">421 </span>  <span class="Normal">const</span> vector&lt;reagent&gt;&amp; ingredients = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">;</span>
 <span id="L422" class="LineNr">422 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> condition = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L423" class="LineNr">423 </span>  vector&lt;reagent&gt; return_ingredients<span class="Delimiter">;</span>
-<span id="L424" class="LineNr">424 </span>  copy<span class="Delimiter">(</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>return_ingredients<span class="Delimiter">,</span> return_ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()));</span>
+<span id="L424" class="LineNr">424 </span>  copy<span class="Delimiter">(</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>return_ingredients<span class="Delimiter">,</span> return_ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()));</span>
 <span id="L425" class="LineNr">425 </span>
 <span id="L426" class="LineNr">426 </span>  <span class="Comment">// {</span>
-<span id="L427" class="LineNr">427 </span>  <a href='010vm.cc.html#L32'>instruction</a> open_label<span class="Delimiter">;</span>  open_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span>  open_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
+<span id="L427" class="LineNr">427 </span>  <a href='010vm.cc.html#L33'>instruction</a> open_label<span class="Delimiter">;</span>  open_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span>  open_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;{&quot;</span><span class="Delimiter">;</span>
 <span id="L428" class="LineNr">428 </span>  out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>open_label<span class="Delimiter">);</span>
 <span id="L429" class="LineNr">429 </span>
 <span id="L430" class="LineNr">430 </span>  <span class="Comment">// &lt;break command&gt; &lt;condition&gt;</span>
-<span id="L431" class="LineNr">431 </span>  <a href='010vm.cc.html#L32'>instruction</a> break_inst<span class="Delimiter">;</span>
+<span id="L431" class="LineNr">431 </span>  <a href='010vm.cc.html#L33'>instruction</a> break_inst<span class="Delimiter">;</span>
 <span id="L432" class="LineNr">432 </span>  break_inst<span class="Delimiter">.</span>operation = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> break_command<span class="Delimiter">);</span>
 <span id="L433" class="LineNr">433 </span>  break_inst<span class="Delimiter">.</span>name = break_command<span class="Delimiter">;</span>
 <span id="L434" class="LineNr">434 </span>  break_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>condition<span class="Delimiter">);</span>
 <span id="L435" class="LineNr">435 </span>  out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>break_inst<span class="Delimiter">);</span>
 <span id="L436" class="LineNr">436 </span>
 <span id="L437" class="LineNr">437 </span>  <span class="Comment">// return &lt;return ingredients&gt;</span>
-<span id="L438" class="LineNr">438 </span>  <a href='010vm.cc.html#L32'>instruction</a> return_inst<span class="Delimiter">;</span>
+<span id="L438" class="LineNr">438 </span>  <a href='010vm.cc.html#L33'>instruction</a> return_inst<span class="Delimiter">;</span>
 <span id="L439" class="LineNr">439 </span>  return_inst<span class="Delimiter">.</span>operation = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;return&quot;</span><span class="Delimiter">);</span>
 <span id="L440" class="LineNr">440 </span>  return_inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;return&quot;</span><span class="Delimiter">;</span>
 <span id="L441" class="LineNr">441 </span>  return_inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>return_ingredients<span class="Delimiter">);</span>
@@ -505,7 +505,7 @@ if ('onhashchange' in window) {
 <span id="L443" class="LineNr">443 </span>  out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>return_inst<span class="Delimiter">);</span>
 <span id="L444" class="LineNr">444 </span>
 <span id="L445" class="LineNr">445 </span>  <span class="Comment">// }</span>
-<span id="L446" class="LineNr">446 </span>  <a href='010vm.cc.html#L32'>instruction</a> close_label<span class="Delimiter">;</span>  close_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span>  close_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
+<span id="L446" class="LineNr">446 </span>  <a href='010vm.cc.html#L33'>instruction</a> close_label<span class="Delimiter">;</span>  close_label<span class="Delimiter">.</span>is_label=<span class="Constant">true</span><span class="Delimiter">;</span>  close_label<span class="Delimiter">.</span>label = <span class="Constant">&quot;}&quot;</span><span class="Delimiter">;</span>
 <span id="L447" class="LineNr">447 </span>  out<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>close_label<span class="Delimiter">);</span>
 <span id="L448" class="LineNr">448 </span><span class="Delimiter">}</span>
 <span id="L449" class="LineNr">449 </span>
diff --git a/html/041jump_target.cc.html b/html/041jump_target.cc.html
index 626afa40..9d447f78 100644
--- a/html/041jump_target.cc.html
+++ b/html/041jump_target.cc.html
@@ -72,9 +72,9 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span><span class="Comment">//: Since they have to be unique in a recipe, not all labels can be jump</span>
 <span id="L10" class="LineNr"> 10 </span><span class="Comment">//: targets.</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Normal">bool</span> <a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L12" class="LineNr"> 12 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>label == <span class="Constant">&quot;{&quot;</span> || label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L12" class="LineNr"> 12 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>label == <span class="Constant">&quot;{&quot;</span> || label == <span class="Constant">&quot;}&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L13" class="LineNr"> 13 </span>  <span class="Comment">// End is_jump_target Special-cases</span>
-<span id="L14" class="LineNr"> 14 </span>  <span class="Identifier">return</span> <a href='011load.cc.html#L179'>is_label_word</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L14" class="LineNr"> 14 </span>  <span class="Identifier">return</span> <a href='011load.cc.html#L181'>is_label_word</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
 <span id="L15" class="LineNr"> 15 </span><span class="Delimiter">}</span>
 <span id="L16" class="LineNr"> 16 </span>
 <span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(scenario jump_to_label)</span>
@@ -102,7 +102,7 @@ if ('onhashchange' in window) {
 <span id="L39" class="LineNr"> 39 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>offset<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
 <span id="L40" class="LineNr"> 40 </span>      <span class="Delimiter">}</span>
 <span id="L41" class="LineNr"> 41 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L42" class="LineNr"> 42 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;duplicate label '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L42" class="LineNr"> 42 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;duplicate label '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L43" class="LineNr"> 43 </span>        <span class="Comment">// have all jumps skip some random but noticeable and deterministic amount of code</span>
 <span id="L44" class="LineNr"> 44 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>offset<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">,</span> <span class="Constant">9999</span><span class="Delimiter">);</span>
 <span id="L45" class="LineNr"> 45 </span>      <span class="Delimiter">}</span>
@@ -112,14 +112,14 @@ if ('onhashchange' in window) {
 <span id="L49" class="LineNr"> 49 </span>    instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L50" class="LineNr"> 50 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;jump&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L52" class="LineNr"> 52 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' expects an ingredient but got 0</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L52" class="LineNr"> 52 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' expects an ingredient but got 0</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L53" class="LineNr"> 53 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L54" class="LineNr"> 54 </span>      <span class="Delimiter">}</span>
 <span id="L55" class="LineNr"> 55 </span>      <a href='041jump_target.cc.html#L76'>replace_offset</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> offset<span class="Delimiter">,</span> i<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L56" class="LineNr"> 56 </span>    <span class="Delimiter">}</span>
 <span id="L57" class="LineNr"> 57 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;jump-if&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;jump-unless&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L58" class="LineNr"> 58 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L59" class="LineNr"> 59 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' expects 2 ingredients but got &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' expects 2 ingredients but got &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L60" class="LineNr"> 60 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L61" class="LineNr"> 61 </span>      <span class="Delimiter">}</span>
 <span id="L62" class="LineNr"> 62 </span>      <a href='041jump_target.cc.html#L76'>replace_offset</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> offset<span class="Delimiter">,</span> i<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
@@ -138,23 +138,23 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span>
 <span id="L76" class="LineNr"> 76 </span><span class="Normal">void</span> <a href='041jump_target.cc.html#L76'>replace_offset</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; offset<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> current_offset<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L77" class="LineNr"> 77 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump target must be offset or label but is '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
+<span id="L78" class="LineNr"> 78 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump target must be offset or label but is '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L79" class="LineNr"> 79 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
 <span id="L80" class="LineNr"> 80 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">}</span>
 <span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L83" class="LineNr"> 83 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// non-labels will be handled like other number operands</span>
 <span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_jump_target<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't jump to label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L86" class="LineNr"> 86 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
+<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't jump to label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L86" class="LineNr"> 86 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
 <span id="L87" class="LineNr"> 87 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L88" class="LineNr"> 88 </span>  <span class="Delimiter">}</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>offset<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L90" class="LineNr"> 90 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L91" class="LineNr"> 91 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
+<span id="L90" class="LineNr"> 90 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// no jump by default</span>
 <span id="L92" class="LineNr"> 92 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Delimiter">}</span>
-<span id="L94" class="LineNr"> 94 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>offset<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">)</span> - current_offset<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>offset<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">)</span> - current_offset<span class="Delimiter">);</span>
 <span id="L95" class="LineNr"> 95 </span><span class="Delimiter">}</span>
 <span id="L96" class="LineNr"> 96 </span>
 <span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario break_to_label)</span>
@@ -217,9 +217,9 @@ if ('onhashchange' in window) {
 <span id="L154" class="LineNr">154 </span><span class="Delimiter">:(scenario jump_fails_without_target_2)</span>
 <span id="L155" class="LineNr">155 </span><span class="Special">% Hide_errors = true;</span>
 <span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L157" class="LineNr">157 </span>  jump-<span class="Normal">if</span> <span class="Constant">1</span>/<span class="Constant">true</span>
+<span id="L157" class="LineNr">157 </span>  jump-<span class="Normal">if</span><span class="Constant"> true</span>
 <span id="L158" class="LineNr">158 </span>]
-<span id="L159" class="LineNr">159 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'jump-if 1/true' expects 2 ingredients but got 1</span>
+<span id="L159" class="LineNr">159 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'jump-if true' expects 2 ingredients but got 1</span>
 <span id="L160" class="LineNr">160 </span>
 <span id="L161" class="LineNr">161 </span><span class="Delimiter">:(scenario recipe_fails_on_duplicate_jump_target)</span>
 <span id="L162" class="LineNr">162 </span><span class="Special">% Hide_errors = true;</span>
diff --git a/html/042name.cc.html b/html/042name.cc.html
index d3d2e60c..406b9b99 100644
--- a/html/042name.cc.html
+++ b/html/042name.cc.html
@@ -70,8 +70,8 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr">  6 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L7" class="LineNr">  7 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
 <span id="L8" class="LineNr">  8 </span>]
-<span id="L9" class="LineNr">  9 </span><span class="traceContains">+name: assign x 1</span>
-<span id="L10" class="LineNr"> 10 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L9" class="LineNr">  9 </span><span class="traceContains">+name: assign x 2</span>
+<span id="L10" class="LineNr"> 10 </span><span class="traceContains">+mem: storing 0 in location 2</span>
 <span id="L11" class="LineNr"> 11 </span>
 <span id="L12" class="LineNr"> 12 </span><span class="Delimiter">:(scenarios transform)</span>
 <span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(scenario transform_names_fails_on_use_before_define)</span>
@@ -82,7 +82,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: tried to read ingredient 'y' in 'x:num &lt;- copy y:num' but it hasn't been written to yet</span>
 <span id="L19" class="LineNr"> 19 </span><span class="Comment"># todo: detect conditional defines</span>
 <span id="L20" class="LineNr"> 20 </span>
-<span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(after &quot;Transform.push_back(compute_container_sizes)&quot;)</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(after &quot;End Type Modifying Transforms&quot;)</span>
 <span id="L22" class="LineNr"> 22 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='042name.cc.html#L37'>transform_names</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
 <span id="L23" class="LineNr"> 23 </span>
 <span id="L24" class="LineNr"> 24 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
@@ -100,298 +100,311 @@ if ('onhashchange' in window) {
 <span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(code)</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Normal">void</span> <a href='042name.cc.html#L37'>transform_names</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L38" class="LineNr"> 38 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L39" class="LineNr"> 39 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- <a href='012transform.cc.html#L99'>transform</a> names for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Normal">bool</span> names_used = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">bool</span> numeric_locations_used = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- <a href='012transform.cc.html#L99'>transform</a> names for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Normal">bool</span> names_used =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">bool</span> numeric_locations_used =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L42" class="LineNr"> 42 </span>  map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; names = Name[r]<span class="Delimiter">;</span>
-<span id="L43" class="LineNr"> 43 </span>  <span class="Comment">// store the indices 'used' so far in the map</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Comment">// record the indices 'used' so far in the map</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Normal">int</span>&amp; curr_idx = names[<span class="Constant">&quot;&quot;</span>]<span class="Delimiter">;</span>
-<span id="L45" class="LineNr"> 45 </span>  ++curr_idx<span class="Delimiter">;</span>  <span class="Comment">// avoid using index 0, benign skip in some other cases</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr"> 47 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L48" class="LineNr"> 48 </span>    <span class="Comment">// End transform_names(inst) Special-cases</span>
-<span id="L49" class="LineNr"> 49 </span>    <span class="Comment">// map names to addresses</span>
-<span id="L50" class="LineNr"> 50 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L51" class="LineNr"> 51 </span>      reagent&amp; ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L52" class="LineNr"> 52 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L97'>is_disqualified</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L53" class="LineNr"> 53 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L146'>is_numeric_location</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">))</span> numeric_locations_used = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L54" class="LineNr"> 54 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L153'>is_named_location</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">))</span> names_used = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L55" class="LineNr"> 55 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>ingredient<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L56" class="LineNr"> 56 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!already_transformed<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> names<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr"> 57 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;tried to read ingredient '&quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' but it hasn't been written to yet</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L58" class="LineNr"> 58 </span>        <span class="Comment">// use-before-set Error</span>
-<span id="L59" class="LineNr"> 59 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L60" class="LineNr"> 60 </span>      <span class="Delimiter">}</span>
-<span id="L61" class="LineNr"> 61 </span>      <span class="Normal">int</span> v = lookup_name<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L62" class="LineNr"> 62 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>v &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L63" class="LineNr"> 63 </span>        ingredient<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>v<span class="Delimiter">);</span>
-<span id="L64" class="LineNr"> 64 </span>        <span class="Comment">// Done Placing Ingredient(ingredient, inst, caller)</span>
-<span id="L65" class="LineNr"> 65 </span>      <span class="Delimiter">}</span>
-<span id="L66" class="LineNr"> 66 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L67" class="LineNr"> 67 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find a place to store '&quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L68" class="LineNr"> 68 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr"> 69 </span>      <span class="Delimiter">}</span>
-<span id="L70" class="LineNr"> 70 </span>    <span class="Delimiter">}</span>
-<span id="L71" class="LineNr"> 71 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L72" class="LineNr"> 72 </span>      reagent&amp; product = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">);</span>
-<span id="L73" class="LineNr"> 73 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L97'>is_disqualified</a><span class="Delimiter">(</span>product<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L74" class="LineNr"> 74 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L146'>is_numeric_location</a><span class="Delimiter">(</span>product<span class="Delimiter">))</span> numeric_locations_used = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L75" class="LineNr"> 75 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L153'>is_named_location</a><span class="Delimiter">(</span>product<span class="Delimiter">))</span> names_used = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L76" class="LineNr"> 76 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>product<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L77" class="LineNr"> 77 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>product<span class="Delimiter">.</span>name<span class="Delimiter">)</span> == names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;assign &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; curr_idx &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>        names[product<span class="Delimiter">.</span>name] = curr_idx<span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>        curr_idx += size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L81" class="LineNr"> 81 </span>      <span class="Delimiter">}</span>
-<span id="L82" class="LineNr"> 82 </span>      <span class="Normal">int</span> v = lookup_name<span class="Delimiter">(</span>product<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L83" class="LineNr"> 83 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>v &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L84" class="LineNr"> 84 </span>        product<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>v<span class="Delimiter">);</span>
-<span id="L85" class="LineNr"> 85 </span>        <span class="Comment">// Done Placing Product(product, inst, caller)</span>
-<span id="L86" class="LineNr"> 86 </span>      <span class="Delimiter">}</span>
-<span id="L87" class="LineNr"> 87 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L88" class="LineNr"> 88 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find a place to store '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L89" class="LineNr"> 89 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L90" class="LineNr"> 90 </span>      <span class="Delimiter">}</span>
-<span id="L91" class="LineNr"> 91 </span>    <span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span>  <span class="Delimiter">}</span>
-<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>names_used &amp;&amp; numeric_locations_used<span class="Delimiter">)</span>
-<span id="L94" class="LineNr"> 94 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;mixing variable names and numeric addresses</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">}</span>
-<span id="L96" class="LineNr"> 96 </span>
-<span id="L97" class="LineNr"> 97 </span><span class="Normal">bool</span> <a href='042name.cc.html#L97'>is_disqualified</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">mutable</span><span class="Comment">*/</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L99" class="LineNr"> 99 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L100" class="LineNr">100 </span>    <span class="Comment">// missing-type Error 1</span>
-<span id="L101" class="LineNr">101 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L104" class="LineNr">104 </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="Constant">true</span><span class="Delimiter">;</span>
-<span id="L105" class="LineNr">105 </span>  <span class="Comment">// End is_disqualified Special-cases</span>
-<span id="L106" class="LineNr">106 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L107" class="LineNr">107 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
-<span id="L109" class="LineNr">109 </span>
-<span id="L110" class="LineNr">110 </span><span class="Normal">bool</span> already_transformed<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Identifier">return</span> contains_key<span class="Delimiter">(</span>names<span class="Delimiter">,</span> r<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
-<span id="L113" class="LineNr">113 </span>
-<span id="L114" class="LineNr">114 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Identifier">return</span> Name[default_recipe][r<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span><span class="Delimiter">}</span>
-<span id="L117" class="LineNr">117 </span>
-<span id="L118" class="LineNr">118 </span><a href='010vm.cc.html#L124'>type_ordinal</a> <a href='042name.cc.html#L118'>skip_addresses</a><span class="Delimiter">(</span>type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>type &amp;&amp; <a href='042name.cc.html#L131'>is_compound_type_starting_with</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span>
-<span id="L120" class="LineNr">120 </span>    type = type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
-<span id="L122" class="LineNr">122 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>  <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Comment">// Update base_type in skip_addresses</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L126" class="LineNr">126 </span>    <span class="Identifier">return</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L127" class="LineNr">127 </span>  assert<span class="Delimiter">(</span>base_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L128" class="LineNr">128 </span>  <span class="Identifier">return</span> base_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L129" class="LineNr">129 </span><span class="Delimiter">}</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Normal">bool</span> <a href='042name.cc.html#L131'>is_compound_type_starting_with</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; expected_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L132" class="LineNr">132 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<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="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> expected_name<span class="Delimiter">);</span>
-<span id="L136" class="LineNr">136 </span><span class="Delimiter">}</span>
-<span id="L137" class="LineNr">137 </span>
-<span id="L138" class="LineNr">138 </span><span class="Normal">int</span> <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L124'>type_ordinal</a> t<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L139" class="LineNr">139 </span>  <span class="Normal">const</span> type_info&amp; container = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">);</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L141" class="LineNr">141 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>container<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == name<span class="Delimiter">)</span> <span class="Identifier">return</span> i<span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unknown element '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' in container '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L143" class="LineNr">143 </span>  <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L144" class="LineNr">144 </span><span class="Delimiter">}</span>
-<span id="L145" class="LineNr">145 </span>
-<span id="L146" class="LineNr">146 </span><span class="Normal">bool</span> <a href='042name.cc.html#L146'>is_numeric_location</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </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="Constant">false</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// used for chaining lexical scopes</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Identifier">return</span> is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L151" class="LineNr">151 </span><span class="Delimiter">}</span>
-<span id="L152" class="LineNr">152 </span>
-<span id="L153" class="LineNr">153 </span><span class="Normal">bool</span> <a href='042name.cc.html#L153'>is_named_location</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L154" class="LineNr">154 </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="Constant">false</span><span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L161'>is_special_name</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Identifier">return</span> !is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L158" class="LineNr">158 </span><span class="Delimiter">}</span>
-<span id="L159" class="LineNr">159 </span>
-<span id="L160" class="LineNr">160 </span><span class="Comment">// all names here should either be disqualified or also in bind_special_scenario_names</span>
-<span id="L161" class="LineNr">161 </span><span class="Normal">bool</span> <a href='042name.cc.html#L161'>is_special_name</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;_&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Comment">// End is_special_name Special-cases</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L166" class="LineNr">166 </span><span class="Delimiter">}</span>
-<span id="L167" class="LineNr">167 </span>
-<span id="L168" class="LineNr">168 </span><span class="Delimiter">:(scenario transform_names_supports_containers)</span>
-<span id="L169" class="LineNr">169 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L170" class="LineNr">170 </span>  <span class="Normal">x</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L172" class="LineNr">172 </span>]
-<span id="L173" class="LineNr">173 </span><span class="traceContains">+name: assign x 1</span>
-<span id="L174" class="LineNr">174 </span><span class="Comment"># skip location 2 because x occupies two locations</span>
-<span id="L175" class="LineNr">175 </span><span class="traceContains">+name: assign y 3</span>
-<span id="L176" class="LineNr">176 </span>
-<span id="L177" class="LineNr">177 </span><span class="Delimiter">:(scenario transform_names_supports_static_arrays)</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="Normal">x</span>:@:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
-<span id="L180" class="LineNr">180 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L181" class="LineNr">181 </span>]
-<span id="L182" class="LineNr">182 </span><span class="traceContains">+name: assign x 1</span>
-<span id="L183" class="LineNr">183 </span><span class="Comment"># skip locations 2, 3, 4 because x occupies four locations</span>
-<span id="L184" class="LineNr">184 </span><span class="traceContains">+name: assign y 5</span>
-<span id="L185" class="LineNr">185 </span>
-<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(scenario transform_names_passes_dummy)</span>
-<span id="L187" class="LineNr">187 </span><span class="Comment"># _ is just a dummy result that never gets consumed</span>
-<span id="L188" class="LineNr">188 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L189" class="LineNr">189 </span>  _<span class="Delimiter">,</span> x:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L190" class="LineNr">190 </span>]
-<span id="L191" class="LineNr">191 </span><span class="traceContains">+name: assign x 1</span>
-<span id="L192" class="LineNr">192 </span><span class="traceAbsent">-name: assign _ 1</span>
-<span id="L193" class="LineNr">193 </span>
-<span id="L194" class="LineNr">194 </span><span class="Comment">//: an escape hatch to suppress name conversion that we'll use later</span>
-<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(scenarios run)</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">:(scenario transform_names_passes_raw)</span>
-<span id="L197" class="LineNr">197 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L198" class="LineNr">198 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L199" class="LineNr">199 </span>  <span class="Normal">x</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">0</span>
-<span id="L200" class="LineNr">200 </span>]
-<span id="L201" class="LineNr">201 </span><span class="traceAbsent">-name: assign x 1</span>
-<span id="L202" class="LineNr">202 </span><span class="traceContains">+error: can't write to location 0 in 'x:num/raw &lt;- copy 0'</span>
-<span id="L203" class="LineNr">203 </span>
-<span id="L204" class="LineNr">204 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(scenario transform_names_fails_when_mixing_names_and_numeric_locations)</span>
-<span id="L206" class="LineNr">206 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
-<span id="L209" class="LineNr">209 </span>]
-<span id="L210" class="LineNr">210 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
-<span id="L211" class="LineNr">211 </span>
-<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(scenario transform_names_fails_when_mixing_names_and_numeric_locations_2)</span>
-<span id="L213" class="LineNr">213 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L214" class="LineNr">214 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L215" class="LineNr">215 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy x:num
-<span id="L217" class="LineNr">217 </span>]
-<span id="L218" class="LineNr">218 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
-<span id="L219" class="LineNr">219 </span>
-<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(scenario transform_names_does_not_fail_when_mixing_names_and_raw_locations)</span>
-<span id="L221" class="LineNr">221 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L222" class="LineNr">222 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num/<span class="Special">raw</span>
-<span id="L223" class="LineNr">223 </span>]
-<span id="L224" class="LineNr">224 </span><span class="traceAbsent">-error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
-<span id="L225" class="LineNr">225 </span>$error: <span class="Constant">0</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Comment">// reserve indices 0 and 1 for the chaining slot in a later layer.</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Comment">// transform_names may get called multiple times in later layers, so</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Comment">// curr_idx may already be set.</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr_idx &lt; <span class="Constant">2</span><span class="Delimiter">)</span> curr_idx = <span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L50" class="LineNr"> 50 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L51" class="LineNr"> 51 </span>    <span class="Comment">// End transform_names(inst) Special-cases</span>
+<span id="L52" class="LineNr"> 52 </span>    <span class="Comment">// map names to addresses</span>
+<span id="L53" class="LineNr"> 53 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L54" class="LineNr"> 54 </span>      reagent&amp; ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L55" class="LineNr"> 55 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L100'>is_disqualified</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L56" class="LineNr"> 56 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L157'>is_numeric_location</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">))</span> numeric_locations_used =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L57" class="LineNr"> 57 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L164'>is_named_location</a><span class="Delimiter">(</span>ingredient<span class="Delimiter">))</span> names_used =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L58" class="LineNr"> 58 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>ingredient<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L59" class="LineNr"> 59 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!already_transformed<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> names<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L60" class="LineNr"> 60 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;tried to read ingredient '&quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' but it hasn't been written to yet</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L61" class="LineNr"> 61 </span>        <span class="Comment">// use-before-set Error</span>
+<span id="L62" class="LineNr"> 62 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>      <span class="Delimiter">}</span>
+<span id="L64" class="LineNr"> 64 </span>      <span class="Normal">int</span> v = lookup_name<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>v &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr"> 66 </span>        ingredient<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>v<span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>        <span class="Comment">// Done Placing Ingredient(ingredient, inst, caller)</span>
+<span id="L68" class="LineNr"> 68 </span>      <span class="Delimiter">}</span>
+<span id="L69" class="LineNr"> 69 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L70" class="LineNr"> 70 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find a place to store '&quot;</span> &lt;&lt; ingredient<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L71" class="LineNr"> 71 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L72" class="LineNr"> 72 </span>      <span class="Delimiter">}</span>
+<span id="L73" class="LineNr"> 73 </span>    <span class="Delimiter">}</span>
+<span id="L74" class="LineNr"> 74 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L75" class="LineNr"> 75 </span>      reagent&amp; product = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">);</span>
+<span id="L76" class="LineNr"> 76 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L100'>is_disqualified</a><span class="Delimiter">(</span>product<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L77" class="LineNr"> 77 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L157'>is_numeric_location</a><span class="Delimiter">(</span>product<span class="Delimiter">))</span> numeric_locations_used =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L78" class="LineNr"> 78 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L164'>is_named_location</a><span class="Delimiter">(</span>product<span class="Delimiter">))</span> names_used =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr"> 79 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>product<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>product<span class="Delimiter">.</span>name<span class="Delimiter">)</span> == names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L81" class="LineNr"> 81 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;assign &quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; &quot;</span> &lt;&lt; curr_idx &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L82" class="LineNr"> 82 </span>        names[product<span class="Delimiter">.</span>name] = curr_idx<span class="Delimiter">;</span>
+<span id="L83" class="LineNr"> 83 </span>        curr_idx += size_of<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
+<span id="L84" class="LineNr"> 84 </span>      <span class="Delimiter">}</span>
+<span id="L85" class="LineNr"> 85 </span>      <span class="Normal">int</span> v = lookup_name<span class="Delimiter">(</span>product<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>v &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>        product<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>v<span class="Delimiter">);</span>
+<span id="L88" class="LineNr"> 88 </span>        <span class="Comment">// Done Placing Product(product, inst, caller)</span>
+<span id="L89" class="LineNr"> 89 </span>      <span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L91" class="LineNr"> 91 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't find a place to store '&quot;</span> &lt;&lt; product<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span>      <span class="Delimiter">}</span>
+<span id="L94" class="LineNr"> 94 </span>    <span class="Delimiter">}</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Delimiter">}</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>names_used &amp;&amp; numeric_locations_used<span class="Delimiter">)</span>
+<span id="L97" class="LineNr"> 97 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;mixing variable names and numeric addresses</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span>
+<span id="L100" class="LineNr">100 </span><span class="Normal">bool</span> <a href='042name.cc.html#L100'>is_disqualified</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">mutable</span><span class="Comment">*/</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L102" class="LineNr">102 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>    <span class="Comment">// missing-type Error 1</span>
+<span id="L104" class="LineNr">104 </span>    <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Delimiter">}</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </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="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Comment">// End is_disqualified Special-cases</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span><span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>
+<span id="L113" class="LineNr">113 </span><span class="Normal">bool</span> already_transformed<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>names<span class="Delimiter">,</span> r<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">}</span>
+<span id="L116" class="LineNr">116 </span>
+<span id="L117" class="LineNr">117 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Identifier">return</span> Name[default_recipe][r<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">}</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><a href='010vm.cc.html#L125'>type_ordinal</a> <a href='042name.cc.html#L121'>skip_addresses</a><span class="Delimiter">(</span>type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>type &amp;&amp; <a href='042name.cc.html#L134'>is_compound_type_starting_with</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span>
+<span id="L123" class="LineNr">123 </span>    type = type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Normal">const</span> type_tree* base_type = type<span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Comment">// Update base_type in skip_addresses</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L129" class="LineNr">129 </span>    <span class="Identifier">return</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L130" class="LineNr">130 </span>  assert<span class="Delimiter">(</span>base_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Identifier">return</span> base_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span>
+<span id="L134" class="LineNr">134 </span><span class="Normal">bool</span> <a href='042name.cc.html#L134'>is_compound_type_starting_with</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; expected_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<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="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<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 class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> expected_name<span class="Delimiter">);</span>
+<span id="L139" class="LineNr">139 </span><span class="Delimiter">}</span>
+<span id="L140" class="LineNr">140 </span>
+<span id="L141" class="LineNr">141 </span><span class="Normal">int</span> <a href='042name.cc.html#L141'>find_element_offset</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L125'>type_ordinal</a> t<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Normal">const</span> type_info&amp; container = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">);</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>container<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L144" class="LineNr">144 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>container<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == name<span class="Delimiter">)</span> <span class="Identifier">return</span> i<span class="Delimiter">;</span>
+<span id="L145" class="LineNr">145 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unknown element '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' in container '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> t<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span><span class="Normal">int</span> <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span><span class="Normal">int</span> base_address<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">int</span> offset = <a href='042name.cc.html#L141'>find_element_offset</a><span class="Delimiter">(</span>get_base_type<span class="Delimiter">(</span>type<span class="Delimiter">)-&gt;</span>value<span class="Delimiter">,</span> name<span class="Delimiter">,</span> recipe_name<span class="Delimiter">);</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> offset<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">int</span> result = base_address<span class="Delimiter">;</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; offset<span class="Delimiter">;</span> ++i<span class="Delimiter">)</span>
+<span id="L153" class="LineNr">153 </span>    result += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span>
+<span id="L157" class="LineNr">157 </span><span class="Normal">bool</span> <a href='042name.cc.html#L157'>is_numeric_location</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L158" class="LineNr">158 </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="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// used for chaining lexical scopes</span>
+<span id="L161" class="LineNr">161 </span>  <span class="Identifier">return</span> is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L162" class="LineNr">162 </span><span class="Delimiter">}</span>
+<span id="L163" class="LineNr">163 </span>
+<span id="L164" class="LineNr">164 </span><span class="Normal">bool</span> <a href='042name.cc.html#L164'>is_named_location</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L165" class="LineNr">165 </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="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L172'>is_special_name</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Identifier">return</span> !is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
+<span id="L170" class="LineNr">170 </span>
+<span id="L171" class="LineNr">171 </span><span class="Comment">// all names here should either be disqualified or also in bind_special_scenario_names</span>
+<span id="L172" class="LineNr">172 </span><span class="Normal">bool</span> <a href='042name.cc.html#L172'>is_special_name</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;_&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Comment">// End is_special_name Special-cases</span>
+<span id="L176" class="LineNr">176 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
+<span id="L178" class="LineNr">178 </span>
+<span id="L179" class="LineNr">179 </span><span class="Normal">bool</span> <a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Identifier">return</span> has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;raw&quot;</span><span class="Delimiter">);</span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(scenario transform_names_supports_containers)</span>
+<span id="L184" class="LineNr">184 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L185" class="LineNr">185 </span>  <span class="Normal">x</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L187" class="LineNr">187 </span>]
+<span id="L188" class="LineNr">188 </span><span class="traceContains">+name: assign x 2</span>
+<span id="L189" class="LineNr">189 </span><span class="Comment"># skip location 2 because x occupies two locations</span>
+<span id="L190" class="LineNr">190 </span><span class="traceContains">+name: assign y 4</span>
+<span id="L191" class="LineNr">191 </span>
+<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(scenario transform_names_supports_static_arrays)</span>
+<span id="L193" class="LineNr">193 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L194" class="LineNr">194 </span>  <span class="Normal">x</span>:@:num:<span class="Constant">3</span><span class="Special"> &lt;- </span>create-array
+<span id="L195" class="LineNr">195 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L196" class="LineNr">196 </span>]
+<span id="L197" class="LineNr">197 </span><span class="traceContains">+name: assign x 2</span>
+<span id="L198" class="LineNr">198 </span><span class="Comment"># skip locations 2, 3, 4 because x occupies four locations</span>
+<span id="L199" class="LineNr">199 </span><span class="traceContains">+name: assign y 6</span>
+<span id="L200" class="LineNr">200 </span>
+<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(scenario transform_names_passes_dummy)</span>
+<span id="L202" class="LineNr">202 </span><span class="Comment"># _ is just a dummy result that never gets consumed</span>
+<span id="L203" class="LineNr">203 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L204" class="LineNr">204 </span>  _<span class="Delimiter">,</span> x:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L205" class="LineNr">205 </span>]
+<span id="L206" class="LineNr">206 </span><span class="traceContains">+name: assign x 2</span>
+<span id="L207" class="LineNr">207 </span><span class="traceAbsent">-name: assign _ 2</span>
+<span id="L208" class="LineNr">208 </span>
+<span id="L209" class="LineNr">209 </span><span class="Comment">//: an escape hatch to suppress name conversion that we'll use later</span>
+<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(scenario transform_names_passes_raw)</span>
+<span id="L212" class="LineNr">212 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L213" class="LineNr">213 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">x</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">0</span>
+<span id="L215" class="LineNr">215 </span>]
+<span id="L216" class="LineNr">216 </span><span class="traceAbsent">-name: assign x 2</span>
+<span id="L217" class="LineNr">217 </span><span class="traceContains">+error: can't write to location 0 in 'x:num/raw &lt;- copy 0'</span>
+<span id="L218" class="LineNr">218 </span>
+<span id="L219" class="LineNr">219 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(scenario transform_names_fails_when_mixing_names_and_numeric_locations)</span>
+<span id="L221" class="LineNr">221 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L222" class="LineNr">222 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L223" class="LineNr">223 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
+<span id="L224" class="LineNr">224 </span>]
+<span id="L225" class="LineNr">225 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
 <span id="L226" class="LineNr">226 </span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">:(scenario transform_names_does_not_fail_when_mixing_names_and_literals)</span>
-<span id="L228" class="LineNr">228 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L229" class="LineNr">229 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L230" class="LineNr">230 </span>]
-<span id="L231" class="LineNr">231 </span><span class="traceAbsent">-error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
-<span id="L232" class="LineNr">232 </span>$error: <span class="Constant">0</span>
-<span id="L233" class="LineNr">233 </span>
-<span id="L234" class="LineNr">234 </span><span class="SalientComment">//:: Support element names for containers in 'get' and 'get-location' and 'put'.</span>
-<span id="L235" class="LineNr">235 </span><span class="Comment">//: (get-location is implemented later)</span>
-<span id="L236" class="LineNr">236 </span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End update GET offset_value in Check&quot;)</span>
-<span id="L238" class="LineNr">238 </span><span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L239" class="LineNr">239 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!offset<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L240" class="LineNr">240 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;uninitialized offset '&quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L241" class="LineNr">241 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Delimiter">}</span>
-<span id="L243" class="LineNr">243 </span>  offset_value = offset<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L244" class="LineNr">244 </span><span class="Delimiter">}</span>
-<span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">:(scenario transform_names_transforms_container_elements)</span>
-<span id="L247" class="LineNr">247 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L248" class="LineNr">248 </span>  <span class="Normal">p</span>:&amp;:point<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L249" class="LineNr">249 </span>  <span class="Normal">a</span>:num<span class="Special"> &lt;- </span>get *p:&amp;:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Normal">b</span>:num<span class="Special"> &lt;- </span>get *p:&amp;:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L251" class="LineNr">251 </span>]
-<span id="L252" class="LineNr">252 </span><span class="traceContains">+name: element y of type point is at offset 1</span>
-<span id="L253" class="LineNr">253 </span><span class="traceContains">+name: element x of type point is at offset 0</span>
-<span id="L254" class="LineNr">254 </span>
-<span id="L255" class="LineNr">255 </span><span class="Delimiter">:(before &quot;End transform_names(inst) Special-cases&quot;)</span>
-<span id="L256" class="LineNr">256 </span><span class="Comment">// replace element names of containers with offsets</span>
-<span id="L257" class="LineNr">257 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;get&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;get-location&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;put&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L258" class="LineNr">258 </span>  <span class="Comment">//: avoid raising any errors here; later layers will support overloading new</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Comment">//: instructions with the same names (static dispatch), which could lead to</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Comment">//: spurious errors</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
-<span id="L262" class="LineNr">262 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span>
-<span id="L264" class="LineNr">264 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L266" class="LineNr">266 </span>    <span class="Comment">// since first non-address in base type must be a container, we don't have to canonize</span>
-<span id="L267" class="LineNr">267 </span>    <a href='010vm.cc.html#L124'>type_ordinal</a> base_type = <a href='042name.cc.html#L118'>skip_addresses</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L268" class="LineNr">268 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// otherwise we'll raise an error elsewhere</span>
-<span id="L269" class="LineNr">269 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>base_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
-<span id="L270" class="LineNr">270 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;element &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; of type &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is at offset &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L271" class="LineNr">271 </span>    <span class="Delimiter">}</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Delimiter">}</span>
-<span id="L273" class="LineNr">273 </span><span class="Delimiter">}</span>
-<span id="L274" class="LineNr">274 </span>
-<span id="L275" class="LineNr">275 </span><span class="Delimiter">:(scenario missing_type_in_get)</span>
-<span id="L276" class="LineNr">276 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L277" class="LineNr">277 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L278" class="LineNr">278 </span>  get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L279" class="LineNr">279 </span>]
-<span id="L280" class="LineNr">280 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'a' in 'get a, x:offset'</span>
-<span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Comment">//: this test is actually illegal so can't call run</span>
-<span id="L283" class="LineNr">283 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L284" class="LineNr">284 </span><span class="Delimiter">:(scenario transform_names_handles_containers)</span>
-<span id="L285" class="LineNr">285 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L286" class="LineNr">286 </span>  <span class="Normal">a</span>:point<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/unsafe
-<span id="L287" class="LineNr">287 </span>  <span class="Normal">b</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/unsafe
-<span id="L288" class="LineNr">288 </span>]
-<span id="L289" class="LineNr">289 </span><span class="traceContains">+name: assign a 1</span>
-<span id="L290" class="LineNr">290 </span><span class="traceContains">+name: assign b 3</span>
-<span id="L291" class="LineNr">291 </span>
-<span id="L292" class="LineNr">292 </span><span class="SalientComment">//:: Support variant names for exclusive containers in 'maybe-convert'.</span>
-<span id="L293" class="LineNr">293 </span>
-<span id="L294" class="LineNr">294 </span><span class="Delimiter">:(scenarios run)</span>
-<span id="L295" class="LineNr">295 </span><span class="Delimiter">:(scenario transform_names_handles_exclusive_containers)</span>
-<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L297" class="LineNr">297 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Constant">20</span>:point<span class="Delimiter">,</span> <span class="Constant">22</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">p:variant</span>
+<span id="L227" class="LineNr">227 </span><span class="Delimiter">:(scenario transform_names_fails_when_mixing_names_and_numeric_locations_2)</span>
+<span id="L228" class="LineNr">228 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L229" class="LineNr">229 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L230" class="LineNr">230 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy x:num
+<span id="L232" class="LineNr">232 </span>]
+<span id="L233" class="LineNr">233 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
+<span id="L234" class="LineNr">234 </span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(scenario transform_names_does_not_fail_when_mixing_names_and_raw_locations)</span>
+<span id="L236" class="LineNr">236 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L237" class="LineNr">237 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num/<span class="Special">raw</span>
+<span id="L238" class="LineNr">238 </span>]
+<span id="L239" class="LineNr">239 </span><span class="traceAbsent">-error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
+<span id="L240" class="LineNr">240 </span>$error: <span class="Constant">0</span>
+<span id="L241" class="LineNr">241 </span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(scenario transform_names_does_not_fail_when_mixing_names_and_literals)</span>
+<span id="L243" class="LineNr">243 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L244" class="LineNr">244 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L245" class="LineNr">245 </span>]
+<span id="L246" class="LineNr">246 </span><span class="traceAbsent">-error: <a href='000organization.cc.html#L113'>main</a>: mixing variable names and numeric addresses</span>
+<span id="L247" class="LineNr">247 </span>$error: <span class="Constant">0</span>
+<span id="L248" class="LineNr">248 </span>
+<span id="L249" class="LineNr">249 </span><span class="SalientComment">//:: Support element names for containers in 'get' and 'get-location' and 'put'.</span>
+<span id="L250" class="LineNr">250 </span><span class="Comment">//: (get-location is implemented later)</span>
+<span id="L251" class="LineNr">251 </span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">:(before &quot;End update GET offset_value in Check&quot;)</span>
+<span id="L253" class="LineNr">253 </span><span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L254" class="LineNr">254 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!offset<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L255" class="LineNr">255 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;uninitialized offset '&quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>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>  offset_value = offset<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span><span class="Delimiter">}</span>
+<span id="L260" class="LineNr">260 </span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(scenario transform_names_transforms_container_elements)</span>
+<span id="L262" class="LineNr">262 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L263" class="LineNr">263 </span>  <span class="Normal">p</span>:&amp;:point<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Normal">a</span>:num<span class="Special"> &lt;- </span>get *p:&amp;:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Normal">b</span>:num<span class="Special"> &lt;- </span>get *p:&amp;:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L266" class="LineNr">266 </span>]
+<span id="L267" class="LineNr">267 </span><span class="traceContains">+name: element y of type point is at offset 1</span>
+<span id="L268" class="LineNr">268 </span><span class="traceContains">+name: element x of type point is at offset 0</span>
+<span id="L269" class="LineNr">269 </span>
+<span id="L270" class="LineNr">270 </span><span class="Delimiter">:(before &quot;End transform_names(inst) Special-cases&quot;)</span>
+<span id="L271" class="LineNr">271 </span><span class="Comment">// replace element names of containers with offsets</span>
+<span id="L272" class="LineNr">272 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;get&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;get-location&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;put&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Comment">//: avoid raising any errors here; later layers will support overloading new</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Comment">//: instructions with the same names (static dispatch), which could lead to</span>
+<span id="L275" class="LineNr">275 </span>  <span class="Comment">//: spurious errors</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span>
+<span id="L277" class="LineNr">277 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span>
+<span id="L279" class="LineNr">279 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L280" class="LineNr">280 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L281" class="LineNr">281 </span>    <span class="Comment">// since first non-address in base type must be a container, we don't have to canonize</span>
+<span id="L282" class="LineNr">282 </span>    <a href='010vm.cc.html#L125'>type_ordinal</a> base_type = <a href='042name.cc.html#L121'>skip_addresses</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L283" class="LineNr">283 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// otherwise we'll raise an error elsewhere</span>
+<span id="L284" class="LineNr">284 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='042name.cc.html#L141'>find_element_offset</a><span class="Delimiter">(</span>base_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
+<span id="L285" class="LineNr">285 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;element &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; of type &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is at offset &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L286" class="LineNr">286 </span>    <span class="Delimiter">}</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Delimiter">}</span>
+<span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
+<span id="L289" class="LineNr">289 </span>
+<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(scenario missing_type_in_get)</span>
+<span id="L291" class="LineNr">291 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L292" class="LineNr">292 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L293" class="LineNr">293 </span>  get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L294" class="LineNr">294 </span>]
+<span id="L295" class="LineNr">295 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'a' in 'get a, x:offset'</span>
+<span id="L296" class="LineNr">296 </span>
+<span id="L297" class="LineNr">297 </span><span class="Delimiter">:(scenario transform_names_handles_containers)</span>
+<span id="L298" class="LineNr">298 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">a</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Normal">b</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
 <span id="L301" class="LineNr">301 </span>]
-<span id="L302" class="LineNr">302 </span><span class="traceContains">+name: variant p of type number-or-point has tag 1</span>
-<span id="L303" class="LineNr">303 </span><span class="traceContains">+mem: storing 1 in location 22</span>
-<span id="L304" class="LineNr">304 </span><span class="traceContains">+mem: storing 35 in location 20</span>
-<span id="L305" class="LineNr">305 </span><span class="traceContains">+mem: storing 36 in location 21</span>
+<span id="L302" class="LineNr">302 </span><span class="traceContains">+name: assign a 2</span>
+<span id="L303" class="LineNr">303 </span><span class="traceContains">+name: assign b 4</span>
+<span id="L304" class="LineNr">304 </span>
+<span id="L305" class="LineNr">305 </span><span class="SalientComment">//:: Support variant names for exclusive containers in 'maybe-convert'.</span>
 <span id="L306" class="LineNr">306 </span>
-<span id="L307" class="LineNr">307 </span><span class="Delimiter">:(before &quot;End transform_names(inst) Special-cases&quot;)</span>
-<span id="L308" class="LineNr">308 </span><span class="Comment">// convert variant names of exclusive containers</span>
-<span id="L309" class="LineNr">309 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;maybe-convert&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L310" class="LineNr">310 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L311" class="LineNr">311 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;exactly 2 ingredients expected in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L312" class="LineNr">312 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L313" class="LineNr">313 </span>  <span class="Delimiter">}</span>
-<span id="L314" class="LineNr">314 </span>  assert<span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)));</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L316" class="LineNr">316 </span>    <span class="Comment">// since first non-address in base type must be an exclusive container, we don't have to canonize</span>
-<span id="L317" class="LineNr">317 </span>    <a href='010vm.cc.html#L124'>type_ordinal</a> base_type = <a href='042name.cc.html#L118'>skip_addresses</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L318" class="LineNr">318 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// otherwise we'll raise an error elsewhere</span>
-<span id="L319" class="LineNr">319 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>base_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
-<span id="L320" class="LineNr">320 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;variant &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; of type &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; has tag &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L321" class="LineNr">321 </span>    <span class="Delimiter">}</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Delimiter">}</span>
-<span id="L323" class="LineNr">323 </span><span class="Delimiter">}</span>
-<span id="L324" class="LineNr">324 </span>
-<span id="L325" class="LineNr">325 </span><span class="Delimiter">:(scenario missing_type_in_maybe_convert)</span>
-<span id="L326" class="LineNr">326 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L327" class="LineNr">327 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L328" class="LineNr">328 </span>  maybe-convert a<span class="Delimiter">,</span> <span class="Constant">x:variant</span>
-<span id="L329" class="LineNr">329 </span>]
-<span id="L330" class="LineNr">330 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'a' in 'maybe-convert a, x:variant'</span>
+<span id="L307" class="LineNr">307 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L308" class="LineNr">308 </span><span class="Delimiter">:(scenario transform_names_handles_exclusive_containers)</span>
+<span id="L309" class="LineNr">309 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L310" class="LineNr">310 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L312" class="LineNr">312 </span>  <span class="Constant">14</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L313" class="LineNr">313 </span>  <span class="Constant">20</span>:point<span class="Delimiter">,</span> <span class="Constant">22</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">12</span>:number-<span class="Normal">or</span>-point/unsafe<span class="Delimiter">,</span> <span class="Constant">p:variant</span>
+<span id="L314" class="LineNr">314 </span>]
+<span id="L315" class="LineNr">315 </span><span class="traceContains">+name: variant p of type number-or-point has tag 1</span>
+<span id="L316" class="LineNr">316 </span><span class="traceContains">+mem: storing 1 in location 22</span>
+<span id="L317" class="LineNr">317 </span><span class="traceContains">+mem: storing 35 in location 20</span>
+<span id="L318" class="LineNr">318 </span><span class="traceContains">+mem: storing 36 in location 21</span>
+<span id="L319" class="LineNr">319 </span>
+<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;End transform_names(inst) Special-cases&quot;)</span>
+<span id="L321" class="LineNr">321 </span><span class="Comment">// convert variant names of exclusive containers</span>
+<span id="L322" class="LineNr">322 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;maybe-convert&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L324" class="LineNr">324 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;exactly 2 ingredients expected in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span>  assert<span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)));</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L329" class="LineNr">329 </span>    <span class="Comment">// since first non-address in base type must be an exclusive container, we don't have to canonize</span>
+<span id="L330" class="LineNr">330 </span>    <a href='010vm.cc.html#L125'>type_ordinal</a> base_type = <a href='042name.cc.html#L121'>skip_addresses</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L331" class="LineNr">331 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>  <span class="Comment">// otherwise we'll raise an error elsewhere</span>
+<span id="L332" class="LineNr">332 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='042name.cc.html#L141'>find_element_offset</a><span class="Delimiter">(</span>base_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
+<span id="L333" class="LineNr">333 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;variant &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; of type &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; has tag &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>value<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L334" class="LineNr">334 </span>    <span class="Delimiter">}</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Delimiter">}</span>
+<span id="L336" class="LineNr">336 </span><span class="Delimiter">}</span>
+<span id="L337" class="LineNr">337 </span>
+<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(scenario missing_type_in_maybe_convert)</span>
+<span id="L339" class="LineNr">339 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L340" class="LineNr">340 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L341" class="LineNr">341 </span>  maybe-convert a<span class="Delimiter">,</span> <span class="Constant">x:variant</span>
+<span id="L342" class="LineNr">342 </span>]
+<span id="L343" class="LineNr">343 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'a' in 'maybe-convert a, x:variant'</span>
 </pre>
 </body>
 </html>
diff --git a/html/043space.cc.html b/html/043space.cc.html
index 97a1bd92..e9dc15a9 100644
--- a/html/043space.cc.html
+++ b/html/043space.cc.html
@@ -15,19 +15,20 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.Constant { color: #00a0a0; }
-.Special { color: #c00000; }
-.muRecipe { color: #ff8700; }
 .SalientComment { color: #00ffff; }
-.Comment { color: #9090ff; }
-.Comment a { color:#0000ee; text-decoration:underline; }
-.Delimiter { color: #800080; }
 .LineNr { color: #444444; }
-.Identifier { color: #c0a020; }
+.Delimiter { color: #800080; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
 .traceContains { color: #008000; }
 .traceAbsent { color: #c00000; }
 .cSpecial { color: #008000; }
+.muRecipe { color: #ff8700; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.Identifier { color: #c0a020; }
+.PreProc { color: #800080; }
 -->
 </style>
 
@@ -71,270 +72,291 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span><span class="Comment">//:</span>
 <span id="L8" class="LineNr">  8 </span><span class="Comment">//: Warning: messing with 'default-space' can corrupt memory. Don't share</span>
 <span id="L9" class="LineNr">  9 </span><span class="Comment">//: default-space between recipes. Later we'll see how to chain spaces safely.</span>
-<span id="L10" class="LineNr"> 10 </span>
-<span id="L11" class="LineNr"> 11 </span><span class="Comment">//: Under the hood, a space is an array of locations in memory.</span>
-<span id="L12" class="LineNr"> 12 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L13" class="LineNr"> 13 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:array:location&quot;</span><span class="Delimiter">));</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment">//:</span>
+<span id="L11" class="LineNr"> 11 </span><span class="Comment">//: Tests in this layer can write to a location as part of one type, and read</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment">//: it as part of another. This is unsafe and insecure, and we'll stop doing</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Comment">//: this once we switch to variable names.</span>
 <span id="L14" class="LineNr"> 14 </span>
-<span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(scenario set_default_space)</span>
-<span id="L16" class="LineNr"> 16 </span><span class="Comment"># if default-space is 10, and if an array of 5 locals lies from location 12 to 16 (inclusive),</span>
-<span id="L17" class="LineNr"> 17 </span><span class="Comment"># then local 0 is really location 12, local 1 is really location 13, and so on.</span>
-<span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L19" class="LineNr"> 19 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new'</span>
-<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L21" class="LineNr"> 21 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L22" class="LineNr"> 22 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L23" class="LineNr"> 23 </span>]
-<span id="L24" class="LineNr"> 24 </span><span class="traceContains">+mem: storing 23 in location 12</span>
-<span id="L25" class="LineNr"> 25 </span>
-<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space)</span>
-<span id="L27" class="LineNr"> 27 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L28" class="LineNr"> 28 </span>  <span class="Comment"># pretend pointer from outside</span>
-<span id="L29" class="LineNr"> 29 </span>  <span class="Constant">2000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L30" class="LineNr"> 30 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new'</span>
-<span id="L31" class="LineNr"> 31 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L32" class="LineNr"> 32 </span>  <span class="Comment"># actual start of this recipe</span>
-<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">1000</span>/unsafe
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">2000</span>/unsafe  <span class="Comment"># even local variables always contain raw addresses</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="Constant">8</span>:num/<span class="Special">raw &lt;- </span>copy *<span class="Constant">1</span>:&amp;:num
-<span id="L36" class="LineNr"> 36 </span>]
-<span id="L37" class="LineNr"> 37 </span><span class="traceContains">+mem: storing 34 in location 8</span>
-<span id="L38" class="LineNr"> 38 </span>
-<span id="L39" class="LineNr"> 39 </span><span class="Comment">//: precondition: disable name conversion for 'default-space'</span>
-<span id="L40" class="LineNr"> 40 </span>
-<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(scenario convert_names_passes_default_space)</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L43" class="LineNr"> 43 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">default</span>-space:num<span class="Delimiter">,</span> x:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L45" class="LineNr"> 45 </span>]
-<span id="L46" class="LineNr"> 46 </span><span class="traceContains">+name: assign x 1</span>
-<span id="L47" class="LineNr"> 47 </span><span class="traceAbsent">-name: assign default-space 1</span>
-<span id="L48" class="LineNr"> 48 </span>
-<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L97'>is_disqualified</a> Special-cases&quot;)</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span>
-<span id="L51" class="LineNr"> 51 </span>  x<span class="Delimiter">.</span>initialized = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L53" class="LineNr"> 53 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L54" class="LineNr"> 54 </span>
-<span id="L55" class="LineNr"> 55 </span><span class="Comment">//: core implementation</span>
-<span id="L56" class="LineNr"> 56 </span>
-<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">:(before &quot;End call Fields&quot;)</span>
-<span id="L58" class="LineNr"> 58 </span><span class="Normal">int</span> default_space<span class="Delimiter">;</span>
-<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(before &quot;End call Constructor&quot;)</span>
-<span id="L60" class="LineNr"> 60 </span>default_space = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L61" class="LineNr"> 61 </span>
-<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(before &quot;Begin canonize(x) Lookups&quot;)</span>
-<span id="L63" class="LineNr"> 63 </span><a href='043space.cc.html#L65'>absolutize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L64" class="LineNr"> 64 </span><span class="Delimiter">:(code)</span>
-<span id="L65" class="LineNr"> 65 </span><span class="Normal">void</span> <a href='043space.cc.html#L65'>absolutize</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> || is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span>
-<span id="L69" class="LineNr"> 69 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;: reagent not initialized: '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L70" class="LineNr"> 70 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">,</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">)));</span>
-<span id="L71" class="LineNr"> 71 </span>  x<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L72" class="LineNr"> 72 </span>  assert<span class="Delimiter">(</span><a href='022arithmetic.cc.html#L108'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">));</span>
-<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">}</span>
-<span id="L74" class="LineNr"> 74 </span>
-<span id="L75" class="LineNr"> 75 </span><span class="Comment">//: hook replaced in a later layer</span>
-<span id="L76" class="LineNr"> 76 </span><span class="Normal">int</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Identifier">return</span> <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space ? <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space : <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L78" class="LineNr"> 78 </span><span class="Delimiter">}</span>
-<span id="L79" class="LineNr"> 79 </span>
-<span id="L80" class="LineNr"> 80 </span><span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">(</span><span class="Normal">int</span> offset<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L81" class="LineNr"> 81 </span>  assert<span class="Delimiter">(</span>offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> offset<span class="Delimiter">;</span>  <span class="Comment">// raw</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt;= size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>    <span class="Comment">// todo: test</span>
-<span id="L86" class="LineNr"> 86 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: location &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; is out of bounds &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; base &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L88" class="LineNr"> 88 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Identifier">return</span> base + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + offset<span class="Delimiter">;</span>
-<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
-<span id="L93" class="LineNr"> 93 </span>
-<span id="L94" class="LineNr"> 94 </span><span class="Comment">//: reads and writes to the 'default-space' variable have special behavior</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Comment">//: Under the hood, a space is an array of locations in memory.</span>
+<span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
+<span id="L17" class="LineNr"> 17 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:array:location&quot;</span><span class="Delimiter">));</span>
+<span id="L18" class="LineNr"> 18 </span>
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(scenario set_default_space)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L21" class="LineNr"> 21 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:@:location
+<span id="L28" class="LineNr"> 28 </span><span class="PreProc">  # if default-space is </span><span class="Constant">1000</span><span class="PreProc">, then:</span>
+<span id="L29" class="LineNr"> 29 </span>  <span class="Comment">#   1000: alloc id</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Comment">#   1001: array size</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Comment">#   1002: location 0 (space for the chaining slot; described later; often unused)</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Comment">#   1003: location 1 (space for the chaining slot; described later; often unused)</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Comment">#   1004: local 2 (assuming it is a scalar)</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">93</span>
+<span id="L35" class="LineNr"> 35 </span>]
+<span id="L36" class="LineNr"> 36 </span><span class="traceContains">+mem: storing 93 in location 1004</span>
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space)</span>
+<span id="L39" class="LineNr"> 39 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L40" class="LineNr"> 40 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Comment"># prepare payload outside the local scope</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Constant">2000</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:@:location
+<span id="L49" class="LineNr"> 49 </span>  <span class="Comment"># a local address</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2000</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">20</span>:num/<span class="Special">raw &lt;- </span>copy *<span class="Constant">2</span>:&amp;:num
+<span id="L52" class="LineNr"> 52 </span>]
+<span id="L53" class="LineNr"> 53 </span><span class="traceContains">+mem: storing 2000 in location 1005</span>
+<span id="L54" class="LineNr"> 54 </span><span class="traceContains">+mem: storing 34 in location 20</span>
+<span id="L55" class="LineNr"> 55 </span>
+<span id="L56" class="LineNr"> 56 </span><span class="Comment">//: precondition: disable name conversion for 'default-space'</span>
+<span id="L57" class="LineNr"> 57 </span>
+<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(scenario convert_names_passes_default_space)</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L61" class="LineNr"> 61 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L62" class="LineNr"> 62 </span>  <span class="Normal">default</span>-space:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L64" class="LineNr"> 64 </span>]
+<span id="L65" class="LineNr"> 65 </span><span class="traceContains">+name: assign x 2</span>
+<span id="L66" class="LineNr"> 66 </span><span class="traceAbsent">-name: assign default-space 1</span>
+<span id="L67" class="LineNr"> 67 </span><span class="traceAbsent">-name: assign default-space 2</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L69" class="LineNr"> 69 </span>
+<span id="L70" class="LineNr"> 70 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L100'>is_disqualified</a> Special-cases&quot;)</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span>
+<span id="L72" class="LineNr"> 72 </span>  x<span class="Delimiter">.</span>initialized =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L75" class="LineNr"> 75 </span>
+<span id="L76" class="LineNr"> 76 </span><span class="Comment">//: core implementation</span>
+<span id="L77" class="LineNr"> 77 </span>
+<span id="L78" class="LineNr"> 78 </span><span class="Delimiter">:(before &quot;End call Fields&quot;)</span>
+<span id="L79" class="LineNr"> 79 </span><span class="Normal">int</span> default_space<span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(before &quot;End call Constructor&quot;)</span>
+<span id="L81" class="LineNr"> 81 </span>default_space = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>
+<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;Begin canonize(x) Lookups&quot;)</span>
+<span id="L84" class="LineNr"> 84 </span><a href='043space.cc.html#L86'>absolutize</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(code)</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Normal">void</span> <a href='043space.cc.html#L86'>absolutize</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> || is_dummy<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>initialized<span class="Delimiter">)</span>
+<span id="L90" class="LineNr"> 90 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;: reagent not initialized: '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>value<span class="Delimiter">,</span> space_base<span class="Delimiter">(</span>x<span class="Delimiter">)));</span>
+<span id="L92" class="LineNr"> 92 </span>  x<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
+<span id="L93" class="LineNr"> 93 </span>  assert<span class="Delimiter">(</span><a href='042name.cc.html#L179'>is_raw</a><span class="Delimiter">(</span>x<span class="Delimiter">));</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">}</span>
 <span id="L95" class="LineNr"> 95 </span>
-<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
-<span id="L97" class="LineNr"> 97 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L98" class="LineNr"> 98 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>data<span class="Delimiter">)</span> || !is_mu_space<span class="Delimiter">(</span>x<span class="Delimiter">))</span>
-<span id="L99" class="LineNr"> 99 </span>    <a href='003trace.cc.html#L174'>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;'default-space' should be of type <a href='043space.cc.html#L80'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L100" class="LineNr">100 </span>  <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span><span class="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span><span class="Delimiter">:(code)</span>
-<span id="L104" class="LineNr">104 </span><span class="Normal">bool</span> <a href='043space.cc.html#L104'>is_mu_space</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L105" class="LineNr">105 </span>  canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L106" class="LineNr">106 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_compound_type_starting_with<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L107" class="LineNr">107 </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="L108" class="LineNr">108 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_compound_type_starting_with<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L109" class="LineNr">109 </span>  drop_from_type<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
-<span id="L110" class="LineNr">110 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;location&quot;</span><span class="Delimiter">;</span>
-<span id="L111" class="LineNr">111 </span><span class="Delimiter">}</span>
-<span id="L112" class="LineNr">112 </span>
-<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario get_default_space)</span>
-<span id="L114" class="LineNr">114 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L115" class="LineNr">115 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L116" class="LineNr">116 </span>  <span class="Constant">1</span>:space/<span class="Special">raw &lt;- </span>copy <span class="Normal">default</span>-space:space
-<span id="L117" class="LineNr">117 </span>]
-<span id="L118" class="LineNr">118 </span><span class="traceContains">+mem: storing 10 in location 1</span>
-<span id="L119" class="LineNr">119 </span>
-<span id="L120" class="LineNr">120 </span><span class="Delimiter">:(after &quot;Begin Preprocess read_memory(x)&quot;)</span>
-<span id="L121" class="LineNr">121 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L122" class="LineNr">122 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space<span class="Delimiter">);</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Comment">//: hook replaced in a later layer</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Normal">int</span> space_base<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Identifier">return</span> <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space ? <span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space + <span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> : <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">}</span>
+<span id="L100" class="LineNr">100 </span>
+<span id="L101" class="LineNr">101 </span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">(</span><span class="Normal">int</span> offset<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L102" class="LineNr">102 </span>  assert<span class="Delimiter">(</span>offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> offset<span class="Delimiter">;</span>  <span class="Comment">// raw</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base<span class="Delimiter">);</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt;= size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L106" class="LineNr">106 </span>    <span class="Comment">// todo: test</span>
+<span id="L107" class="LineNr">107 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: location &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; is out of bounds &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; base &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L108" class="LineNr">108 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L110" class="LineNr">110 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>  <span class="Identifier">return</span> base + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span> + offset<span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>
+<span id="L115" class="LineNr">115 </span><span class="Comment">//: reads and writes to the 'default-space' variable have special behavior</span>
+<span id="L116" class="LineNr">116 </span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
+<span id="L118" class="LineNr">118 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_space<span class="Delimiter">(</span>x<span class="Delimiter">))</span>
+<span id="L120" class="LineNr">120 </span>    <a href='003trace.cc.html#L197'>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;'default-space' should be of type <a href='043space.cc.html#L101'>address</a>:array:location, but is &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>data<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span>
+<span id="L122" class="LineNr">122 </span>    <a href='003trace.cc.html#L197'>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;'default-space' getting data from non-address</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L123" class="LineNr">123 </span>  <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space = data<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
-<span id="L126" class="LineNr">126 </span>
-<span id="L127" class="LineNr">127 </span><span class="SalientComment">//:: fix 'get'</span>
-<span id="L128" class="LineNr">128 </span>
-<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space_in_get)</span>
-<span id="L130" class="LineNr">130 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L131" class="LineNr">131 </span>  <span class="Comment"># pretend pointer to container from outside</span>
-<span id="L132" class="LineNr">132 </span>  <span class="Constant">2000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L133" class="LineNr">133 </span>  <span class="Constant">2001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L134" class="LineNr">134 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new'</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Comment"># actual start of this recipe</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">1000</span>/unsafe
-<span id="L138" class="LineNr">138 </span>  <span class="Constant">1</span>:&amp;:point<span class="Special"> &lt;- </span>copy <span class="Constant">2000</span>/unsafe
-<span id="L139" class="LineNr">139 </span>  <span class="Constant">9</span>:num/<span class="Special">raw &lt;- </span>get *<span class="Constant">1</span>:&amp;:point<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L140" class="LineNr">140 </span>]
-<span id="L141" class="LineNr">141 </span><span class="traceContains">+mem: storing 35 in location 9</span>
-<span id="L142" class="LineNr">142 </span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(before &quot;Read element&quot; following &quot;case GET:&quot;)</span>
-<span id="L144" class="LineNr">144 </span>element<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L145" class="LineNr">145 </span>
-<span id="L146" class="LineNr">146 </span><span class="SalientComment">//:: fix 'index'</span>
-<span id="L147" class="LineNr">147 </span>
-<span id="L148" class="LineNr">148 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space_in_index)</span>
-<span id="L149" class="LineNr">149 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L150" class="LineNr">150 </span>  <span class="Comment"># pretend pointer to array from outside</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Constant">2000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span>  <span class="Comment"># length</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Constant">2001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L153" class="LineNr">153 </span>  <span class="Constant">2002</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new'</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Comment"># actual start of this recipe</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">1000</span>/unsafe
-<span id="L158" class="LineNr">158 </span>  <span class="Constant">1</span>:&amp;:@:num<span class="Special"> &lt;- </span>copy <span class="Constant">2000</span>/unsafe
-<span id="L159" class="LineNr">159 </span>  <span class="Constant">9</span>:num/<span class="Special">raw &lt;- </span>index *<span class="Constant">1</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L160" class="LineNr">160 </span>]
-<span id="L161" class="LineNr">161 </span><span class="traceContains">+mem: storing 35 in location 9</span>
-<span id="L162" class="LineNr">162 </span>
-<span id="L163" class="LineNr">163 </span><span class="Delimiter">:(before &quot;Read element&quot; following &quot;case INDEX:&quot;)</span>
-<span id="L164" class="LineNr">164 </span>element<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="SalientComment">//:: 'local-scope' is a convenience operation to automatically deduce</span>
-<span id="L167" class="LineNr">167 </span><span class="SalientComment">//:: the amount of space to allocate in a default space with names</span>
-<span id="L168" class="LineNr">168 </span>
-<span id="L169" class="LineNr">169 </span><span class="Delimiter">:(scenario local_scope)</span>
-<span id="L170" class="LineNr">170 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L171" class="LineNr">171 </span>  local-scope
-<span id="L172" class="LineNr">172 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L174" class="LineNr">174 </span>]
-<span id="L175" class="LineNr">175 </span><span class="Comment"># allocate space for x and y, as well as the chaining slot at 0</span>
-<span id="L176" class="LineNr">176 </span><span class="traceContains">+mem: array length is 3</span>
-<span id="L177" class="LineNr">177 </span>
-<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L97'>is_disqualified</a> Special-cases&quot;)</span>
-<span id="L179" class="LineNr">179 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span>
-<span id="L180" class="LineNr">180 </span>  x<span class="Delimiter">.</span>initialized = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L181" class="LineNr">181 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L182" class="LineNr">182 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L183" class="LineNr">183 </span>
-<span id="L184" class="LineNr">184 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
-<span id="L185" class="LineNr">185 </span><span class="Comment">// rewrite 'local-scope' to</span>
-<span id="L186" class="LineNr">186 </span><span class="Comment">//   ```</span>
-<span id="L187" class="LineNr">187 </span><span class="Comment">//   default-space:space &lt;- new location:type, number-of-locals:literal</span>
-<span id="L188" class="LineNr">188 </span><span class="Comment">//   ```</span>
-<span id="L189" class="LineNr">189 </span><span class="Comment">// where number-of-locals is Name[recipe][&quot;&quot;]</span>
-<span id="L190" class="LineNr">190 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;local-scope&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L191" class="LineNr">191 </span>  <a href='043space.cc.html#L194'>rewrite_default_space_instruction</a><span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">}</span>
-<span id="L193" class="LineNr">193 </span><span class="Delimiter">:(code)</span>
-<span id="L194" class="LineNr">194 </span><span class="Normal">void</span> <a href='043space.cc.html#L194'>rewrite_default_space_instruction</a><span class="Delimiter">(</span>instruction&amp; curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L196" class="LineNr">196 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' can't take any ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L197" class="LineNr">197 </span>  curr<span class="Delimiter">.</span>name = <span class="Constant">&quot;new&quot;</span><span class="Delimiter">;</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Constant">curr.ingredients.push_back(reagent(&quot;location:type</span><span class="Constant">&quot;));</span>
-<span id="L199" class="LineNr">199 </span>  <span class="Constant">curr.ingredients.push_back(reagent(&quot;number-of-locals:literal</span><span class="Constant">&quot;));</span>
-<span id="L200" class="LineNr">200 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L201" class="LineNr">201 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;local-scope can't take any results</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L202" class="LineNr">202 </span>  curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;default-space:space&quot;</span><span class="Delimiter">));</span>
-<span id="L203" class="LineNr">203 </span><span class="Delimiter">}</span>
-<span id="L204" class="LineNr">204 </span><span class="Delimiter">:(after &quot;Begin Preprocess read_memory(x)&quot;)</span>
-<span id="L205" class="LineNr">205 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>Name[get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span>][<span class="Constant">&quot;&quot;</span>]<span class="Delimiter">);</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>back<span class="Delimiter">()</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
-<span id="L209" class="LineNr">209 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;no space allocated for default-space in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;; are you using names?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L210" class="LineNr">210 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">}</span>
-<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
-<span id="L213" class="LineNr">213 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L214" class="LineNr">214 </span>  <a href='003trace.cc.html#L174'>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;can't write to special name 'number-of-locals'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L216" class="LineNr">216 </span><span class="Delimiter">}</span>
-<span id="L217" class="LineNr">217 </span>
-<span id="L218" class="LineNr">218 </span><span class="SalientComment">//:: all recipes must set default-space one way or another</span>
+<span id="L126" class="LineNr">126 </span><span class="Delimiter">:(code)</span>
+<span id="L127" class="LineNr">127 </span><span class="Normal">bool</span> <a href='043space.cc.html#L127'>is_mu_space</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L128" class="LineNr">128 </span>  canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_compound_type_starting_with<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;address&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L130" class="LineNr">130 </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="L131" class="LineNr">131 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_compound_type_starting_with<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span>  drop_from_type<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;array&quot;</span><span class="Delimiter">);</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;location&quot;</span><span class="Delimiter">;</span>
+<span id="L134" class="LineNr">134 </span><span class="Delimiter">}</span>
+<span id="L135" class="LineNr">135 </span>
+<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(scenario get_default_space)</span>
+<span id="L137" class="LineNr">137 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L138" class="LineNr">138 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L141" class="LineNr">141 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L143" class="LineNr">143 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:space
+<span id="L145" class="LineNr">145 </span>  <span class="Constant">2</span>:space/<span class="Special">raw &lt;- </span>copy <span class="Normal">default</span>-space:space
+<span id="L146" class="LineNr">146 </span>]
+<span id="L147" class="LineNr">147 </span><span class="traceContains">+mem: storing 1000 in location 3</span>
+<span id="L148" class="LineNr">148 </span>
+<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(after &quot;Begin Preprocess read_memory(x)&quot;)</span>
+<span id="L150" class="LineNr">150 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
+<span id="L152" class="LineNr">152 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space<span class="Delimiter">);</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span>
+<span id="L157" class="LineNr">157 </span><span class="SalientComment">//:: fix 'get'</span>
+<span id="L158" class="LineNr">158 </span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space_in_get)</span>
+<span id="L160" class="LineNr">160 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L161" class="LineNr">161 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Comment"># prepare payload outside the local scope</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Constant">2000</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2001</span>:num/x<span class="Delimiter">,</span> <span class="Constant">2002</span>:num/y<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:space
+<span id="L170" class="LineNr">170 </span>  <span class="Comment"># a local address</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2000</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Constant">3000</span>:num/<span class="Special">raw &lt;- </span>get *<span class="Constant">2</span>:&amp;:point<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L173" class="LineNr">173 </span>]
+<span id="L174" class="LineNr">174 </span><span class="traceContains">+mem: storing 35 in location 3000</span>
+<span id="L175" class="LineNr">175 </span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(before &quot;Read element&quot; following &quot;case GET:&quot;)</span>
+<span id="L177" class="LineNr">177 </span>element<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
+<span id="L178" class="LineNr">178 </span>
+<span id="L179" class="LineNr">179 </span><span class="SalientComment">//:: fix 'index'</span>
+<span id="L180" class="LineNr">180 </span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">:(scenario lookup_sidesteps_default_space_in_index)</span>
+<span id="L182" class="LineNr">182 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L183" class="LineNr">183 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Comment"># prepare an array address</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Constant">20</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2000</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Comment"># prepare an array payload</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">2000</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2001</span>:num/length<span class="Delimiter">,</span> <span class="Constant">2002</span>:num/index:<span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2003</span>:num/index:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:&amp;:@:location
+<span id="L194" class="LineNr">194 </span>  <span class="Constant">1</span>:&amp;:@:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>:&amp;:@:num/<span class="Special">raw</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Constant">3000</span>:num/<span class="Special">raw &lt;- </span>index *<span class="Constant">1</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L196" class="LineNr">196 </span>]
+<span id="L197" class="LineNr">197 </span><span class="traceContains">+mem: storing 35 in location 3000</span>
+<span id="L198" class="LineNr">198 </span>
+<span id="L199" class="LineNr">199 </span><span class="Delimiter">:(before &quot;Read element&quot; following &quot;case INDEX:&quot;)</span>
+<span id="L200" class="LineNr">200 </span>element<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
+<span id="L201" class="LineNr">201 </span>
+<span id="L202" class="LineNr">202 </span><span class="SalientComment">//:: 'local-scope' is a convenience operation to automatically deduce</span>
+<span id="L203" class="LineNr">203 </span><span class="SalientComment">//:: the amount of space to allocate in a default space with names</span>
+<span id="L204" class="LineNr">204 </span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(scenario local_scope)</span>
+<span id="L206" class="LineNr">206 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L207" class="LineNr">207 </span>  local-scope
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L210" class="LineNr">210 </span>]
+<span id="L211" class="LineNr">211 </span><span class="Comment"># allocate space for x and y, as well as the chaining slot at indices 0 and 1</span>
+<span id="L212" class="LineNr">212 </span><span class="traceContains">+mem: array length is 4</span>
+<span id="L213" class="LineNr">213 </span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L100'>is_disqualified</a> Special-cases&quot;)</span>
+<span id="L215" class="LineNr">215 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span>
+<span id="L216" class="LineNr">216 </span>  x<span class="Delimiter">.</span>initialized =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L218" class="LineNr">218 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L219" class="LineNr">219 </span>
-<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L221" class="LineNr">221 </span><span class="Normal">bool</span> Hide_missing_default_space_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L222" class="LineNr">222 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
-<span id="L223" class="LineNr">223 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='043space.cc.html#L225'>check_default_space</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(code)</span>
-<span id="L225" class="LineNr">225 </span><span class="Normal">void</span> <a href='043space.cc.html#L225'>check_default_space</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Hide_missing_default_space_errors<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip previous core tests; this is only for Mu code</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Comment">// End check_default_space Special-cases</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Comment">// assume recipes with only numeric addresses know what they're doing (usually tests)</span>
-<span id="L230" class="LineNr">230 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_non_special_name<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L231" class="LineNr">231 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check that <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; sets default-space&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L233" class="LineNr">233 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_by_setting_default_space<span class="Delimiter">(</span>caller<span class="Delimiter">))</span>
-<span id="L234" class="LineNr">234 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; does not seem to start with 'local-scope' or 'default-space'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span><span class="Normal">bool</span> <a href='043space.cc.html#L236'>starts_by_setting_default_space</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L237" class="LineNr">237 </span>  <span class="Identifier">return</span> !r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
-<span id="L238" class="LineNr">238 </span>      &amp;&amp; !r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
-<span id="L239" class="LineNr">239 </span>      &amp;&amp; r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">;</span>
-<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
-<span id="L241" class="LineNr">241 </span>
-<span id="L242" class="LineNr">242 </span><span class="Delimiter">:(after &quot;Load Mu Prelude&quot;)</span>
-<span id="L243" class="LineNr">243 </span>Hide_missing_default_space_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L244" class="LineNr">244 </span><span class="Delimiter">:(after &quot;Test Runs&quot;)</span>
-<span id="L245" class="LineNr">245 </span>Hide_missing_default_space_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">:(after &quot;Running Main&quot;)</span>
-<span id="L247" class="LineNr">247 </span>Hide_missing_default_space_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>
-<span id="L249" class="LineNr">249 </span><span class="Delimiter">:(code)</span>
-<span id="L250" class="LineNr">250 </span><span class="Normal">bool</span> <a href='043space.cc.html#L250'>contains_non_special_name</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L251" class="LineNr">251 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;::iterator p = Name[r]<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Name[r]<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L252" class="LineNr">252 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L253" class="LineNr">253 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;stash_&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// generated by rewrite_stashes_to_text (cross-layer)</span>
-<span id="L254" class="LineNr">254 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_special_name<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
-<span id="L255" class="LineNr">255 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Delimiter">}</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L258" class="LineNr">258 </span><span class="Delimiter">}</span>
-<span id="L259" class="LineNr">259 </span>
-<span id="L260" class="LineNr">260 </span><span class="Comment">// reagent comparison -- only between reagents in a single recipe</span>
-<span id="L261" class="LineNr">261 </span><span class="Normal">bool</span> <span class="Normal">operator</span>==<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">.</span>name != b<span class="Delimiter">.</span>name<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>property<span class="Delimiter">(</span>a<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)</span> != property<span class="Delimiter">(</span>b<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L265" class="LineNr">265 </span><span class="Delimiter">}</span>
-<span id="L266" class="LineNr">266 </span>
-<span id="L267" class="LineNr">267 </span><span class="Normal">bool</span> <span class="Normal">operator</span>&lt;<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Normal">int</span> aspace = <span class="Constant">0</span><span class="Delimiter">,</span> bspace = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L269" class="LineNr">269 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>a<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> aspace = to_integer<span class="Delimiter">(</span>property<span class="Delimiter">(</span>a<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L270" class="LineNr">270 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>b<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> bspace = to_integer<span class="Delimiter">(</span>property<span class="Delimiter">(</span>b<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L271" class="LineNr">271 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>aspace != bspace<span class="Delimiter">)</span> <span class="Identifier">return</span> aspace &lt; bspace<span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span>  <span class="Identifier">return</span> a<span class="Delimiter">.</span>name &lt; b<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L273" class="LineNr">273 </span><span class="Delimiter">}</span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
+<span id="L221" class="LineNr">221 </span><span class="Comment">// rewrite 'local-scope' to</span>
+<span id="L222" class="LineNr">222 </span><span class="Comment">//   ```</span>
+<span id="L223" class="LineNr">223 </span><span class="Comment">//   default-space:space &lt;- new location:type, number-of-locals:literal</span>
+<span id="L224" class="LineNr">224 </span><span class="Comment">//   ```</span>
+<span id="L225" class="LineNr">225 </span><span class="Comment">// where number-of-locals is Name[recipe][&quot;&quot;]</span>
+<span id="L226" class="LineNr">226 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;local-scope&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L227" class="LineNr">227 </span>  <a href='043space.cc.html#L230'>rewrite_default_space_instruction</a><span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">}</span>
+<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(code)</span>
+<span id="L230" class="LineNr">230 </span><span class="Normal">void</span> <a href='043space.cc.html#L230'>rewrite_default_space_instruction</a><span class="Delimiter">(</span>instruction&amp; curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
+<span id="L232" class="LineNr">232 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' can't take any ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L233" class="LineNr">233 </span>  curr<span class="Delimiter">.</span>name = <span class="Constant">&quot;new&quot;</span><span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Constant">curr.ingredients.push_back(reagent(&quot;location:type</span><span class="Constant">&quot;));</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Constant">curr.ingredients.push_back(reagent(&quot;number-of-locals:literal</span><span class="Constant">&quot;));</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
+<span id="L237" class="LineNr">237 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;local-scope can't take any results</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L238" class="LineNr">238 </span>  curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;default-space:space&quot;</span><span class="Delimiter">));</span>
+<span id="L239" class="LineNr">239 </span><span class="Delimiter">}</span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(after &quot;Begin Preprocess read_memory(x)&quot;)</span>
+<span id="L241" class="LineNr">241 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L242" class="LineNr">242 </span>  vector&lt;<span class="Normal">double</span>&gt; result<span class="Delimiter">;</span>
+<span id="L243" class="LineNr">243 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>Name[get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">())</span>][<span class="Constant">&quot;&quot;</span>]<span class="Delimiter">);</span>
+<span id="L244" class="LineNr">244 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>back<span class="Delimiter">()</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L245" class="LineNr">245 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;no space allocated for default-space in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;; are you using names?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span><span class="Delimiter">}</span>
+<span id="L248" class="LineNr">248 </span><span class="Delimiter">:(after &quot;Begin Preprocess write_memory(x, data)&quot;)</span>
+<span id="L249" class="LineNr">249 </span><span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name == <span class="Constant">&quot;number-of-locals&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L250" class="LineNr">250 </span>  <a href='003trace.cc.html#L197'>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;can't write to special name 'number-of-locals'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span>
+<span id="L253" class="LineNr">253 </span>
+<span id="L254" class="LineNr">254 </span><span class="SalientComment">//:: all recipes must set default-space one way or another</span>
+<span id="L255" class="LineNr">255 </span>
+<span id="L256" class="LineNr">256 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L257" class="LineNr">257 </span><span class="Normal">bool</span> Hide_missing_default_space_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L258" class="LineNr">258 </span><span class="Delimiter">:(before &quot;End Checks&quot;)</span>
+<span id="L259" class="LineNr">259 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='043space.cc.html#L261'>check_default_space</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L260" class="LineNr">260 </span><span class="Delimiter">:(code)</span>
+<span id="L261" class="LineNr">261 </span><span class="Normal">void</span> <a href='043space.cc.html#L261'>check_default_space</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L262" class="LineNr">262 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Hide_missing_default_space_errors<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip previous core tests; this is only for Mu code</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Comment">// End check_default_space Special-cases</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Comment">// assume recipes with only numeric addresses know what they're doing (usually tests)</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_non_special_name<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L267" class="LineNr">267 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check that <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; sets default-space&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_by_setting_default_space<span class="Delimiter">(</span>caller<span class="Delimiter">))</span>
+<span id="L270" class="LineNr">270 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; does not seem to start with 'local-scope' or 'default-space'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L271" class="LineNr">271 </span><span class="Delimiter">}</span>
+<span id="L272" class="LineNr">272 </span><span class="Normal">bool</span> <a href='043space.cc.html#L272'>starts_by_setting_default_space</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Identifier">return</span> !r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
+<span id="L274" class="LineNr">274 </span>      &amp;&amp; !r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">()</span>
+<span id="L275" class="LineNr">275 </span>      &amp;&amp; r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name == <span class="Constant">&quot;default-space&quot;</span><span class="Delimiter">;</span>
+<span id="L276" class="LineNr">276 </span><span class="Delimiter">}</span>
+<span id="L277" class="LineNr">277 </span>
+<span id="L278" class="LineNr">278 </span><span class="Delimiter">:(after &quot;Load Mu Prelude&quot;)</span>
+<span id="L279" class="LineNr">279 </span>Hide_missing_default_space_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L280" class="LineNr">280 </span><span class="Delimiter">:(after &quot;Test Runs&quot;)</span>
+<span id="L281" class="LineNr">281 </span>Hide_missing_default_space_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L282" class="LineNr">282 </span><span class="Delimiter">:(after &quot;Running Main&quot;)</span>
+<span id="L283" class="LineNr">283 </span>Hide_missing_default_space_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L284" class="LineNr">284 </span>
+<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(code)</span>
+<span id="L286" class="LineNr">286 </span><span class="Normal">bool</span> <a href='043space.cc.html#L286'>contains_non_special_name</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;::iterator p = Name[r]<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Name[r]<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L289" class="LineNr">289 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;stash_&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// generated by rewrite_stashes_to_text (cross-layer)</span>
+<span id="L290" class="LineNr">290 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_special_name<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
+<span id="L291" class="LineNr">291 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L292" class="LineNr">292 </span>  <span class="Delimiter">}</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L294" class="LineNr">294 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/044space_surround.cc.html b/html/044space_surround.cc.html
index 5f6ec84d..2cf1f551 100644
--- a/html/044space_surround.cc.html
+++ b/html/044space_surround.cc.html
@@ -67,59 +67,69 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr"> 5 </span><span class="Comment">//: (Surrounding spaces are like lexical scopes in other languages.)</span>
 <span id="L6" class="LineNr"> 6 </span>
 <span id="L7" class="LineNr"> 7 </span><span class="Delimiter">:(scenario surrounding_space)</span>
-<span id="L8" class="LineNr"> 8 </span><span class="Comment"># location 1 in space 1 refers to the space surrounding the default space, here 20.</span>
-<span id="L9" class="LineNr"> 9 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L10" class="LineNr">10 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new'</span>
-<span id="L11" class="LineNr">11 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L12" class="LineNr">12 </span>  <span class="Comment"># pretend address:array:location; in practice we'll use 'new&quot;</span>
-<span id="L13" class="LineNr">13 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
-<span id="L14" class="LineNr">14 </span>  <span class="Comment"># actual start of this recipe</span>
-<span id="L15" class="LineNr">15 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/unsafe
-<span id="L16" class="LineNr">16 </span>  <span class="Comment">#: later layers will explain the /names: property</span>
-<span id="L17" class="LineNr">17 </span>  <span class="Constant">0</span>:space/names:dummy<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>/unsafe
-<span id="L18" class="LineNr">18 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">32</span>
-<span id="L19" class="LineNr">19 </span>  <span class="Constant">1</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">33</span>
-<span id="L20" class="LineNr">20 </span>]
-<span id="L21" class="LineNr">21 </span><span class="muRecipe">def</span> dummy [  <span class="Comment"># just for the /names: property above</span>
-<span id="L22" class="LineNr">22 </span>]
-<span id="L23" class="LineNr">23 </span><span class="Comment"># chain space: 10 + (length) 1</span>
-<span id="L24" class="LineNr">24 </span><span class="traceContains">+mem: storing 20 in location 11</span>
-<span id="L25" class="LineNr">25 </span><span class="Comment"># store to default space: 10 + (skip length) 1 + (index) 1</span>
-<span id="L26" class="LineNr">26 </span><span class="traceContains">+mem: storing 32 in location 12</span>
-<span id="L27" class="LineNr">27 </span><span class="Comment"># store to chained space: (contents of location 12) 20 + (length) 1 + (index) 1</span>
-<span id="L28" class="LineNr">28 </span><span class="traceContains">+mem: storing 33 in location 22</span>
-<span id="L29" class="LineNr">29 </span>
-<span id="L30" class="LineNr">30 </span><span class="Comment">//: If you think of a space as a collection of variables with a common</span>
-<span id="L31" class="LineNr">31 </span><span class="Comment">//: lifetime, surrounding allows managing shorter lifetimes inside a longer</span>
-<span id="L32" class="LineNr">32 </span><span class="Comment">//: one.</span>
-<span id="L33" class="LineNr">33 </span>
-<span id="L34" class="LineNr">34 </span><span class="Delimiter">:(replace{} &quot;int space_base(const reagent&amp; x)&quot;)</span>
-<span id="L35" class="LineNr">35 </span><span class="Normal">int</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L36" class="LineNr">36 </span>  <span class="Normal">int</span> base = <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space ? <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space : <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L37" class="LineNr">37 </span>  <span class="Identifier">return</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index<span class="Delimiter">(</span>x<span class="Delimiter">),</span> base<span class="Delimiter">);</span>
-<span id="L38" class="LineNr">38 </span><span class="Delimiter">}</span>
-<span id="L39" class="LineNr">39 </span>
-<span id="L40" class="LineNr">40 </span><span class="Normal">int</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">int</span> space_index<span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L41" class="LineNr">41 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>space_index == <span class="Constant">0</span><span class="Delimiter">)</span>
-<span id="L42" class="LineNr">42 </span>    <span class="Identifier">return</span> base<span class="Delimiter">;</span>
-<span id="L43" class="LineNr">43 </span>  <span class="Identifier">return</span> <a href='043space.cc.html#L76'>space_base</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
-<span id="L44" class="LineNr">44 </span><span class="Delimiter">}</span>
-<span id="L45" class="LineNr">45 </span>
-<span id="L46" class="LineNr">46 </span><span class="Normal">int</span> space_index<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr">47 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L48" class="LineNr">48 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first == <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr">49 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second || x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span>
-<span id="L50" class="LineNr">50 </span>        <a href='003trace.cc.html#L174'>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;/space metadata should take exactly one value in '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L51" class="LineNr">51 </span>      <span class="Identifier">return</span> to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L52" class="LineNr">52 </span>    <span class="Delimiter">}</span>
-<span id="L53" class="LineNr">53 </span>  <span class="Delimiter">}</span>
-<span id="L54" class="LineNr">54 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L55" class="LineNr">55 </span><span class="Delimiter">}</span>
-<span id="L56" class="LineNr">56 </span>
-<span id="L57" class="LineNr">57 </span><span class="Delimiter">:(scenario permit_space_as_variable_name)</span>
-<span id="L58" class="LineNr">58 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L59" class="LineNr">59 </span>  <span class="Normal">space</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L60" class="LineNr">60 </span>]
+<span id="L8" class="LineNr"> 8 </span><span class="Comment"># location 2 in space 1 (remember that locations 0 and 1 are reserved in all</span>
+<span id="L9" class="LineNr"> 9 </span><span class="Comment"># spaces) refers to the space surrounding the default space, here 20.</span>
+<span id="L10" class="LineNr">10 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L11" class="LineNr">11 </span>  <span class="Comment"># prepare default-space address</span>
+<span id="L12" class="LineNr">12 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">1000</span>
+<span id="L13" class="LineNr">13 </span>  <span class="Comment"># prepare default-space payload</span>
+<span id="L14" class="LineNr">14 </span>  <span class="Constant">1000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L15" class="LineNr">15 </span>  <span class="Constant">1001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L16" class="LineNr">16 </span>  <span class="Comment"># prepare address of chained space</span>
+<span id="L17" class="LineNr">17 </span>  <span class="Constant">20</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">2000</span>
+<span id="L18" class="LineNr">18 </span>  <span class="Comment"># prepare payload of chained space</span>
+<span id="L19" class="LineNr">19 </span>  <span class="Constant">2000</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># alloc id of payload</span>
+<span id="L20" class="LineNr">20 </span>  <span class="Constant">2001</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>  <span class="Comment"># length</span>
+<span id="L21" class="LineNr">21 </span>  <span class="Comment"># actual start of this recipe</span>
+<span id="L22" class="LineNr">22 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:space
+<span id="L23" class="LineNr">23 </span>  <span class="Comment">#: later layers will explain the /names: property</span>
+<span id="L24" class="LineNr">24 </span>  <span class="Constant">0</span>:space/names:dummy<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>:space/<span class="Special">raw</span>
+<span id="L25" class="LineNr">25 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">94</span>
+<span id="L26" class="LineNr">26 </span>  <span class="Constant">2</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">95</span>
+<span id="L27" class="LineNr">27 </span>]
+<span id="L28" class="LineNr">28 </span><span class="muRecipe">def</span> dummy [  <span class="Comment"># just for the /names: property above</span>
+<span id="L29" class="LineNr">29 </span>]
+<span id="L30" class="LineNr">30 </span><span class="Comment"># chain space: 1000 + (alloc id) 1 + (length) 1</span>
+<span id="L31" class="LineNr">31 </span><span class="traceContains">+mem: storing 0 in location 1002</span>
+<span id="L32" class="LineNr">32 </span><span class="traceContains">+mem: storing 2000 in location 1003</span>
+<span id="L33" class="LineNr">33 </span><span class="Comment"># store to default space: 1000 + (alloc id) 1 + (length) 1 + (index) 2</span>
+<span id="L34" class="LineNr">34 </span><span class="traceContains">+mem: storing 94 in location 1004</span>
+<span id="L35" class="LineNr">35 </span><span class="Comment"># store to chained space: (contents of location 1003) 2000 + (alloc id) 1 + (length) 1 + (index) 2</span>
+<span id="L36" class="LineNr">36 </span><span class="traceContains">+mem: storing 95 in location 2004</span>
+<span id="L37" class="LineNr">37 </span>
+<span id="L38" class="LineNr">38 </span><span class="Comment">//: If you think of a space as a collection of variables with a common</span>
+<span id="L39" class="LineNr">39 </span><span class="Comment">//: lifetime, surrounding allows managing shorter lifetimes inside a longer</span>
+<span id="L40" class="LineNr">40 </span><span class="Comment">//: one.</span>
+<span id="L41" class="LineNr">41 </span>
+<span id="L42" class="LineNr">42 </span><span class="Delimiter">:(replace{} &quot;int space_base(const reagent&amp; x)&quot;)</span>
+<span id="L43" class="LineNr">43 </span><span class="Normal">int</span> space_base<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L44" class="LineNr">44 </span>  <span class="Normal">int</span> base = <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space ? <span class="Delimiter">(</span><a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>default_space+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> : <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L45" class="LineNr">45 </span>  <span class="Identifier">return</span> space_base<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <a href='044space_surround.cc.html#L56'>space_index</a><span class="Delimiter">(</span>x<span class="Delimiter">),</span> base<span class="Delimiter">);</span>
+<span id="L46" class="LineNr">46 </span><span class="Delimiter">}</span>
+<span id="L47" class="LineNr">47 </span>
+<span id="L48" class="LineNr">48 </span><span class="Normal">int</span> space_base<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">int</span> <a href='044space_surround.cc.html#L56'>space_index</a><span class="Delimiter">,</span> <span class="Normal">int</span> base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L49" class="LineNr">49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='044space_surround.cc.html#L56'>space_index</a> == <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L50" class="LineNr">50 </span>    <span class="Identifier">return</span> base<span class="Delimiter">;</span>
+<span id="L51" class="LineNr">51 </span>  <span class="Normal">double</span> chained_space_address = base+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">skip alloc id of chaining slot</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr">52 </span>  <span class="Normal">double</span> chained_space_base = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> chained_space_address<span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip alloc id of chained space</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr">53 </span>  <span class="Identifier">return</span> space_base<span class="Delimiter">(</span>x<span class="Delimiter">,</span> space_index-<span class="Constant">1</span><span class="Delimiter">,</span> chained_space_base<span class="Delimiter">);</span>
+<span id="L54" class="LineNr">54 </span><span class="Delimiter">}</span>
+<span id="L55" class="LineNr">55 </span>
+<span id="L56" class="LineNr">56 </span><span class="Normal">int</span> <a href='044space_surround.cc.html#L56'>space_index</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L57" class="LineNr">57 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L58" class="LineNr">58 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first == <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L59" class="LineNr">59 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second || x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span>
+<span id="L60" class="LineNr">60 </span>        <a href='003trace.cc.html#L197'>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;/space metadata should take exactly one value in '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L61" class="LineNr">61 </span>      <span class="Identifier">return</span> to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>properties<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L62" class="LineNr">62 </span>    <span class="Delimiter">}</span>
+<span id="L63" class="LineNr">63 </span>  <span class="Delimiter">}</span>
+<span id="L64" class="LineNr">64 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L65" class="LineNr">65 </span><span class="Delimiter">}</span>
+<span id="L66" class="LineNr">66 </span>
+<span id="L67" class="LineNr">67 </span><span class="Delimiter">:(scenario permit_space_as_variable_name)</span>
+<span id="L68" class="LineNr">68 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L69" class="LineNr">69 </span>  <span class="Normal">space</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L70" class="LineNr">70 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/045closure_name.cc.html b/html/045closure_name.cc.html
index 6cacabf7..01acd40d 100644
--- a/html/045closure_name.cc.html
+++ b/html/045closure_name.cc.html
@@ -71,14 +71,14 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">:(scenario closure)</span>
 <span id="L10" class="LineNr"> 10 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L11" class="LineNr"> 11 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">location:type</span><span class="Delimiter">,</span> <span class="Constant">30</span>
-<span id="L12" class="LineNr"> 12 </span>  <span class="Constant">1</span>:space/names:<span class="Normal">new</span>-counter<span class="Special"> &lt;- </span><span class="Normal">new</span>-counter
-<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>increment-counter <span class="Constant">1</span>:space/names:<span class="Normal">new</span>-counter
-<span id="L14" class="LineNr"> 14 </span>  <span class="Constant">3</span>:num/<span class="Special">raw &lt;- </span>increment-counter <span class="Constant">1</span>:space/names:<span class="Normal">new</span>-counter
+<span id="L12" class="LineNr"> 12 </span>  <span class="Constant">2</span>:space/names:<span class="Normal">new</span>-counter<span class="Special"> &lt;- </span><span class="Normal">new</span>-counter
+<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">10</span>:num/<span class="Special">raw &lt;- </span>increment-counter <span class="Constant">2</span>:space/names:<span class="Normal">new</span>-counter
+<span id="L14" class="LineNr"> 14 </span>  <span class="Constant">11</span>:num/<span class="Special">raw &lt;- </span>increment-counter <span class="Constant">2</span>:space/names:<span class="Normal">new</span>-counter
 <span id="L15" class="LineNr"> 15 </span>]
 <span id="L16" class="LineNr"> 16 </span><span class="muRecipe">def</span> <span class="Normal">new</span>-counter [
 <span id="L17" class="LineNr"> 17 </span>  <span class="Normal">default</span>-space:space<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">location:type</span><span class="Delimiter">,</span> <span class="Constant">30</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L19" class="LineNr"> 19 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>  <span class="Comment"># variable that will be incremented</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>  <span class="Comment"># variable that will be incremented</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Identifier">return</span> <span class="Normal">default</span>-space:space
 <span id="L21" class="LineNr"> 21 </span>]
 <span id="L22" class="LineNr"> 22 </span><span class="muRecipe">def</span> increment-counter [
@@ -89,147 +89,162 @@ if ('onhashchange' in window) {
 <span id="L27" class="LineNr"> 27 </span>  <span class="Identifier">return</span> y:num/space:<span class="Constant">1</span>
 <span id="L28" class="LineNr"> 28 </span>]
 <span id="L29" class="LineNr"> 29 </span><span class="traceContains">+name: lexically surrounding space for <a href='010vm.cc.html#L19'>recipe</a> increment-counter comes from new-counter</span>
-<span id="L30" class="LineNr"> 30 </span><span class="traceContains">+mem: storing 5 in location 3</span>
+<span id="L30" class="LineNr"> 30 </span><span class="traceContains">+mem: storing 15 in location 11</span>
 <span id="L31" class="LineNr"> 31 </span>
 <span id="L32" class="LineNr"> 32 </span><span class="Comment">//: To make this work, compute the recipe that provides names for the</span>
 <span id="L33" class="LineNr"> 33 </span><span class="Comment">//: surrounding space of each recipe.</span>
 <span id="L34" class="LineNr"> 34 </span>
 <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L36" class="LineNr"> 36 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe_ordinal&gt; Surrounding_space<span class="Delimiter">;</span>
-<span id="L37" class="LineNr"> 37 </span>
-<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(before &quot;Transform.push_back(transform_names)&quot;)</span>
-<span id="L39" class="LineNr"> 39 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='045closure_name.cc.html#L42'>collect_surrounding_spaces</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L40" class="LineNr"> 40 </span>
-<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(code)</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Normal">void</span> <a href='045closure_name.cc.html#L42'>collect_surrounding_spaces</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L43" class="LineNr"> 43 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- collect surrounding spaces for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L45" class="LineNr"> 45 </span>    <span class="Normal">const</span> instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L46" class="LineNr"> 46 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L47" class="LineNr"> 47 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L48" class="LineNr"> 48 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L49" class="LineNr"> 49 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">).</span>name != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_space<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L51" class="LineNr"> 51 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 should always have type <a href='043space.cc.html#L80'>address</a>:array:location, but is '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L52" class="LineNr"> 52 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L53" class="LineNr"> 53 </span>      <span class="Delimiter">}</span>
-<span id="L54" class="LineNr"> 54 </span>      string_tree* s = property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">);</span>
-<span id="L55" class="LineNr"> 55 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L56" class="LineNr"> 56 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 requires a /names property in <a href='010vm.cc.html#L19'>recipe</a> '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L57" class="LineNr"> 57 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>      <span class="Delimiter">}</span>
-<span id="L59" class="LineNr"> 59 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!s<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 should have a single value in /names, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L60" class="LineNr"> 60 </span>      <span class="Normal">const</span> string&amp; surrounding_recipe_name = s<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
-<span id="L61" class="LineNr"> 61 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>surrounding_recipe_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L62" class="LineNr"> 62 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 doesn't initialize its /names property in recipe '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L63" class="LineNr"> 63 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L64" class="LineNr"> 64 </span>      <span class="Delimiter">}</span>
-<span id="L65" class="LineNr"> 65 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)</span>
-<span id="L66" class="LineNr"> 66 </span>          &amp;&amp; get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)</span> != get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L67" class="LineNr"> 67 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' can have only one 'surrounding' <a href='010vm.cc.html#L19'>recipe</a> but has '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)).</span>name &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L68" class="LineNr"> 68 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr"> 69 </span>      <span class="Delimiter">}</span>
-<span id="L70" class="LineNr"> 70 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;lexically surrounding space for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; comes from &quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L71" class="LineNr"> 71 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L72" class="LineNr"> 72 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't find recipe providing surrounding space for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'; looking for '&quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L73" class="LineNr"> 73 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L74" class="LineNr"> 74 </span>      <span class="Delimiter">}</span>
-<span id="L75" class="LineNr"> 75 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">));</span>
-<span id="L76" class="LineNr"> 76 </span>    <span class="Delimiter">}</span>
-<span id="L77" class="LineNr"> 77 </span>  <span class="Delimiter">}</span>
-<span id="L78" class="LineNr"> 78 </span><span class="Delimiter">}</span>
-<span id="L79" class="LineNr"> 79 </span>
-<span id="L80" class="LineNr"> 80 </span><span class="Comment">//: Once surrounding spaces are available, transform_names uses them to handle</span>
-<span id="L81" class="LineNr"> 81 </span><span class="Comment">//: /space properties.</span>
-<span id="L82" class="LineNr"> 82 </span>
-<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(replace{} &quot;int lookup_name(const reagent&amp; r, const <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe)&quot;)</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L86" class="LineNr"> 86 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Name[default_recipe]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;name not found: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L87" class="LineNr"> 87 </span>    <span class="Identifier">return</span> Name[default_recipe][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span>  <span class="Delimiter">}</span>
-<span id="L89" class="LineNr"> 89 </span>  string_tree* p = property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">);</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!p || !p<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;/space property should have exactly one (non-negative integer) value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">int</span> n = to_integer<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L92" class="LineNr"> 92 </span>  assert<span class="Delimiter">(</span>n &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L93" class="LineNr"> 93 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> surrounding_recipe = <a href='045closure_name.cc.html#L119'>lookup_surrounding_recipe</a><span class="Delimiter">(</span>default_recipe<span class="Delimiter">,</span> n<span class="Delimiter">);</span>
-<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>surrounding_recipe == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L95" class="LineNr"> 95 </span>  set&lt;recipe_ordinal&gt; done<span class="Delimiter">;</span>
-<span id="L96" class="LineNr"> 96 </span>  vector&lt;recipe_ordinal&gt; path<span class="Delimiter">;</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Identifier">return</span> lookup_name<span class="Delimiter">(</span>x<span class="Delimiter">,</span> surrounding_recipe<span class="Delimiter">,</span> done<span class="Delimiter">,</span> path<span class="Delimiter">);</span>
-<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
-<span id="L99" class="LineNr"> 99 </span>
-<span id="L100" class="LineNr">100 </span><span class="Comment">// If the recipe we need to lookup this name in doesn't have names done yet,</span>
-<span id="L101" class="LineNr">101 </span><span class="Comment">// recursively call transform_names on it.</span>
-<span id="L102" class="LineNr">102 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> set&lt;recipe_ordinal&gt;&amp; done<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
-<span id="L104" class="LineNr">104 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>done<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L105" class="LineNr">105 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L106" class="LineNr">106 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L107" class="LineNr">107 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L108" class="LineNr">108 </span>    <span class="Delimiter">}</span>
-<span id="L109" class="LineNr">109 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; r &lt;&lt; <span class="Constant">&quot;..ad infinitum</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L110" class="LineNr">110 </span>    <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Delimiter">}</span>
-<span id="L112" class="LineNr">112 </span>  done<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L113" class="LineNr">113 </span>  path<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L114" class="LineNr">114 </span>  <a href='042name.cc.html#L37'>transform_names</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>  <span class="Comment">// Not passing 'done' through. Might this somehow cause an infinite loop?</span>
-<span id="L115" class="LineNr">115 </span>  assert<span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L116" class="LineNr">116 </span>  <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span><span class="Delimiter">}</span>
-<span id="L118" class="LineNr">118 </span>
-<span id="L119" class="LineNr">119 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='045closure_name.cc.html#L119'>lookup_surrounding_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L120" class="LineNr">120 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>n == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> r<span class="Delimiter">;</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L122" class="LineNr">122 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;don't know surrounding recipe of '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L123" class="LineNr">123 </span>    <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Delimiter">}</span>
-<span id="L125" class="LineNr">125 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">));</span>
-<span id="L126" class="LineNr">126 </span>  <span class="Identifier">return</span> <a href='045closure_name.cc.html#L119'>lookup_surrounding_recipe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">),</span> n-<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L127" class="LineNr">127 </span><span class="Delimiter">}</span>
-<span id="L128" class="LineNr">128 </span>
-<span id="L129" class="LineNr">129 </span><span class="Comment">//: weaken use-before-set detection just a tad</span>
-<span id="L130" class="LineNr">130 </span><span class="Delimiter">:(replace{} &quot;bool already_transformed(const reagent&amp; r, const map&lt;string, int&gt;&amp; names)&quot;)</span>
-<span id="L131" class="LineNr">131 </span><span class="Normal">bool</span> already_transformed<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L132" class="LineNr">132 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L133" class="LineNr">133 </span>    string_tree* p = property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">);</span>
-<span id="L134" class="LineNr">134 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!p || !p<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;/space property should have exactly one (non-negative integer) value in '&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L136" class="LineNr">136 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>    <span class="Delimiter">}</span>
-<span id="L138" class="LineNr">138 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>value != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Identifier">return</span> contains_key<span class="Delimiter">(</span>names<span class="Delimiter">,</span> r<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
-<span id="L142" class="LineNr">142 </span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(scenario missing_surrounding_space)</span>
-<span id="L144" class="LineNr">144 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L145" class="LineNr">145 </span><span class="muRecipe">def</span> f [
-<span id="L146" class="LineNr">146 </span>  local-scope
-<span id="L147" class="LineNr">147 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L148" class="LineNr">148 </span>]
-<span id="L149" class="LineNr">149 </span><span class="traceContains">+error: don't know surrounding recipe of 'f'</span>
-<span id="L150" class="LineNr">150 </span><span class="traceContains">+error: f: can't find a place to store 'x'</span>
-<span id="L151" class="LineNr">151 </span>
-<span id="L152" class="LineNr">152 </span><span class="Comment">//: extra test for try_reclaim_locals() from previous layers</span>
-<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario local_scope_ignores_nonlocal_spaces)</span>
-<span id="L154" class="LineNr">154 </span><span class="muRecipe">def</span> <span class="Normal">new</span>-scope [
-<span id="L155" class="LineNr">155 </span>  local-scope
-<span id="L156" class="LineNr">156 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L157" class="LineNr">157 </span>  *x:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Identifier">return</span> <span class="Normal">default</span>-space:space
-<span id="L159" class="LineNr">159 </span>]
-<span id="L160" class="LineNr">160 </span><span class="muRecipe">def</span> use-scope [
-<span id="L161" class="LineNr">161 </span>  local-scope
-<span id="L162" class="LineNr">162 </span>  <span class="Normal">outer</span>:space/names:<span class="Normal">new</span>-scope<span class="Special"> &lt;- </span>next-ingredient
-<span id="L163" class="LineNr">163 </span>  <span class="Constant">0</span>:space/names:<span class="Normal">new</span>-scope<span class="Special"> &lt;- </span>copy outer:space
-<span id="L164" class="LineNr">164 </span>  <span class="Identifier">return</span> *x:&amp;:num/space:<span class="Constant">1</span>
-<span id="L165" class="LineNr">165 </span>]
-<span id="L166" class="LineNr">166 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L167" class="LineNr">167 </span>  <span class="Constant">1</span>:space/<span class="Special">raw &lt;- </span><span class="Normal">new</span>-scope
-<span id="L168" class="LineNr">168 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>use-scope <span class="Constant">1</span>:space/<span class="Special">raw</span>
-<span id="L169" class="LineNr">169 </span>]
-<span id="L170" class="LineNr">170 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L36" class="LineNr"> 36 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe_ordinal&gt; Surrounding_space<span class="Delimiter">;</span>  <span class="Comment">// internal to transform; no need to snapshot</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L38" class="LineNr"> 38 </span>Surrounding_space<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L39" class="LineNr"> 39 </span>
+<span id="L40" class="LineNr"> 40 </span><span class="Delimiter">:(before &quot;Begin Type Modifying Transforms&quot;)</span>
+<span id="L41" class="LineNr"> 41 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='045closure_name.cc.html#L44'>collect_surrounding_spaces</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L42" class="LineNr"> 42 </span>
+<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(code)</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Normal">void</span> <a href='045closure_name.cc.html#L44'>collect_surrounding_spaces</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- collect surrounding spaces for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L47" class="LineNr"> 47 </span>    <span class="Normal">const</span> instruction&amp; inst = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L48" class="LineNr"> 48 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L50" class="LineNr"> 50 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">).</span>name != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr"> 52 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_space<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L53" class="LineNr"> 53 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 should always have type <a href='043space.cc.html#L101'>address</a>:array:location, but is '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L54" class="LineNr"> 54 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L55" class="LineNr"> 55 </span>      <span class="Delimiter">}</span>
+<span id="L56" class="LineNr"> 56 </span>      string_tree* s = property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L58" class="LineNr"> 58 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 requires a /names property in <a href='010vm.cc.html#L19'>recipe</a> '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span>      <span class="Delimiter">}</span>
+<span id="L61" class="LineNr"> 61 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!s<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 should have a single value in /names, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L62" class="LineNr"> 62 </span>      <span class="Normal">const</span> string&amp; surrounding_recipe_name = s<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>surrounding_recipe_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L64" class="LineNr"> 64 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;slot 0 doesn't initialize its /names property in recipe '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L65" class="LineNr"> 65 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L66" class="LineNr"> 66 </span>      <span class="Delimiter">}</span>
+<span id="L67" class="LineNr"> 67 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)</span>
+<span id="L68" class="LineNr"> 68 </span>          &amp;&amp; get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)</span> != get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L69" class="LineNr"> 69 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' can have only one 'surrounding' <a href='010vm.cc.html#L19'>recipe</a> but has '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">)).</span>name &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L71" class="LineNr"> 71 </span>      <span class="Delimiter">}</span>
+<span id="L72" class="LineNr"> 72 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;name&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;lexically surrounding space for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; comes from &quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L73" class="LineNr"> 73 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L74" class="LineNr"> 74 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't find recipe providing surrounding space for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'; looking for '&quot;</span> &lt;&lt; surrounding_recipe_name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L75" class="LineNr"> 75 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L76" class="LineNr"> 76 </span>      <span class="Delimiter">}</span>
+<span id="L77" class="LineNr"> 77 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> surrounding_recipe_name<span class="Delimiter">));</span>
+<span id="L78" class="LineNr"> 78 </span>    <span class="Delimiter">}</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Delimiter">}</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">}</span>
+<span id="L81" class="LineNr"> 81 </span>
+<span id="L82" class="LineNr"> 82 </span><span class="Comment">//: Once surrounding spaces are available, transform_names uses them to handle</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Comment">//: /space properties.</span>
+<span id="L84" class="LineNr"> 84 </span>
+<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(replace{} &quot;int lookup_name(const reagent&amp; r, const <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe)&quot;)</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> default_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L88" class="LineNr"> 88 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Name[default_recipe]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;name not found: &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">return</span> Name[default_recipe][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span>  string_tree* p = property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!p || !p<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;/space property should have exactly one (non-negative integer) value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">int</span> n = to_integer<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  assert<span class="Delimiter">(</span>n &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> surrounding_recipe = <a href='045closure_name.cc.html#L121'>lookup_surrounding_recipe</a><span class="Delimiter">(</span>default_recipe<span class="Delimiter">,</span> n<span class="Delimiter">);</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>surrounding_recipe == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>  set&lt;recipe_ordinal&gt; done<span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span>  vector&lt;recipe_ordinal&gt; path<span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Identifier">return</span> lookup_name<span class="Delimiter">(</span>x<span class="Delimiter">,</span> surrounding_recipe<span class="Delimiter">,</span> done<span class="Delimiter">,</span> path<span class="Delimiter">);</span>
+<span id="L100" class="LineNr">100 </span><span class="Delimiter">}</span>
+<span id="L101" class="LineNr">101 </span>
+<span id="L102" class="LineNr">102 </span><span class="Comment">// If the recipe we need to lookup this name in doesn't have names done yet,</span>
+<span id="L103" class="LineNr">103 </span><span class="Comment">// recursively call transform_names on it.</span>
+<span id="L104" class="LineNr">104 </span><span class="Normal">int</span> lookup_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> set&lt;recipe_ordinal&gt;&amp; done<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; path<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>done<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L107" class="LineNr">107 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't compute address of '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L108" class="LineNr">108 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L110" class="LineNr">110 </span>    <span class="Delimiter">}</span>
+<span id="L111" class="LineNr">111 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; path<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>path<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; requires computing names of &quot;</span> &lt;&lt; r &lt;&lt; <span class="Constant">&quot;..ad infinitum</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L112" class="LineNr">112 </span>    <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>  done<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>  path<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>  <a href='042name.cc.html#L37'>transform_names</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>  <span class="Comment">// Not passing 'done' through. Might this somehow cause an infinite loop?</span>
+<span id="L117" class="LineNr">117 </span>  assert<span class="Delimiter">(</span>!Name[r]<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Identifier">return</span> Name[r][x<span class="Delimiter">.</span>name]<span class="Delimiter">;</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">}</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='045closure_name.cc.html#L121'>lookup_surrounding_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>n == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> r<span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L124" class="LineNr">124 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;don't know surrounding recipe of '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L125" class="LineNr">125 </span>    <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
+<span id="L127" class="LineNr">127 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">));</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Identifier">return</span> <a href='045closure_name.cc.html#L121'>lookup_surrounding_recipe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">),</span> n-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">}</span>
+<span id="L130" class="LineNr">130 </span>
+<span id="L131" class="LineNr">131 </span><span class="Comment">//: weaken use-before-set detection just a tad</span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(replace{} &quot;bool already_transformed(const reagent&amp; r, const map&lt;string, int&gt;&amp; names)&quot;)</span>
+<span id="L133" class="LineNr">133 </span><span class="Normal">bool</span> already_transformed<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt;&amp; names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>    string_tree* p = property<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">);</span>
+<span id="L136" class="LineNr">136 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!p || !p<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;/space property should have exactly one (non-negative integer) value in '&quot;</span> &lt;&lt; r<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L138" class="LineNr">138 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>    <span class="Delimiter">}</span>
+<span id="L140" class="LineNr">140 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>value != <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L141" class="LineNr">141 </span>  <span class="Delimiter">}</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>names<span class="Delimiter">,</span> r<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">}</span>
+<span id="L144" class="LineNr">144 </span>
+<span id="L145" class="LineNr">145 </span><span class="Delimiter">:(scenario missing_surrounding_space)</span>
+<span id="L146" class="LineNr">146 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L147" class="LineNr">147 </span><span class="muRecipe">def</span> f [
+<span id="L148" class="LineNr">148 </span>  local-scope
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L150" class="LineNr">150 </span>]
+<span id="L151" class="LineNr">151 </span><span class="traceContains">+error: don't know surrounding recipe of 'f'</span>
+<span id="L152" class="LineNr">152 </span><span class="traceContains">+error: f: can't find a place to store 'x'</span>
+<span id="L153" class="LineNr">153 </span>
+<span id="L154" class="LineNr">154 </span><span class="Comment">//: extra test for try_reclaim_locals() from previous layers</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(scenario local_scope_ignores_nonlocal_spaces)</span>
+<span id="L156" class="LineNr">156 </span><span class="muRecipe">def</span> <span class="Normal">new</span>-scope [
+<span id="L157" class="LineNr">157 </span>  local-scope
+<span id="L158" class="LineNr">158 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
+<span id="L159" class="LineNr">159 </span>  *x:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Identifier">return</span> <span class="Normal">default</span>-space:space
+<span id="L161" class="LineNr">161 </span>]
+<span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> use-scope [
+<span id="L163" class="LineNr">163 </span>  local-scope
+<span id="L164" class="LineNr">164 </span>  <span class="Normal">outer</span>:space/names:<span class="Normal">new</span>-scope<span class="Special"> &lt;- </span>next-ingredient
+<span id="L165" class="LineNr">165 </span>  <span class="Constant">0</span>:space/names:<span class="Normal">new</span>-scope<span class="Special"> &lt;- </span>copy outer:space
+<span id="L166" class="LineNr">166 </span>  <span class="Identifier">return</span> *x:&amp;:num/space:<span class="Constant">1</span>
+<span id="L167" class="LineNr">167 </span>]
+<span id="L168" class="LineNr">168 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L169" class="LineNr">169 </span>  <span class="Constant">1</span>:space/<span class="Special">raw &lt;- </span><span class="Normal">new</span>-scope
+<span id="L170" class="LineNr">170 </span>  <span class="Constant">3</span>:num/<span class="Special">raw &lt;- </span>use-scope <span class="Constant">1</span>:space/<span class="Special">raw</span>
+<span id="L171" class="LineNr">171 </span>]
+<span id="L172" class="LineNr">172 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L173" class="LineNr">173 </span>
+<span id="L174" class="LineNr">174 </span><span class="Delimiter">:(scenario recursive_transform_names)</span>
+<span id="L175" class="LineNr">175 </span><span class="muRecipe">def</span> foo [
+<span id="L176" class="LineNr">176 </span>  local-scope
+<span id="L177" class="LineNr">177 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Identifier">return</span> <span class="Normal">default</span>-space:space/names:foo
+<span id="L179" class="LineNr">179 </span>]
+<span id="L180" class="LineNr">180 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L181" class="LineNr">181 </span>  local-scope
+<span id="L182" class="LineNr">182 </span>  <span class="Constant">0</span>:space/names:foo<span class="Special"> &lt;- </span>foo
+<span id="L183" class="LineNr">183 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L184" class="LineNr">184 </span>]
+<span id="L185" class="LineNr">185 </span>$error: <span class="Constant">0</span>
 </pre>
 </body>
 </html>
diff --git a/html/046check_type_by_name.cc.html b/html/046check_type_by_name.cc.html
index 9bd08a5d..731cb086 100644
--- a/html/046check_type_by_name.cc.html
+++ b/html/046check_type_by_name.cc.html
@@ -77,159 +77,200 @@ if ('onhashchange' in window) {
 <span id="L14" class="LineNr"> 14 </span>]
 <span id="L15" class="LineNr"> 15 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: 'x' used with multiple types</span>
 <span id="L16" class="LineNr"> 16 </span>
-<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(after &quot;Transform.push_back(expand_type_abbreviations)&quot;)</span>
-<span id="L18" class="LineNr"> 18 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='046check_type_by_name.cc.html#L21'>check_or_set_types_by_name</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
-<span id="L19" class="LineNr"> 19 </span>
-<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(code)</span>
-<span id="L21" class="LineNr"> 21 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L21'>check_or_set_types_by_name</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- deduce types for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L23" class="LineNr"> 23 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L24" class="LineNr"> 24 </span>  set&lt;reagent&gt; known<span class="Delimiter">;</span>
-<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L26" class="LineNr"> 26 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L27" class="LineNr"> 27 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L28" class="LineNr"> 28 </span>      <a href='046check_type_by_name.cc.html#L38'>deduce_missing_type</a><span class="Delimiter">(</span>known<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
-<span id="L29" class="LineNr"> 29 </span>      <a href='046check_type_by_name.cc.html#L59'>check_type</a><span class="Delimiter">(</span>known<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
-<span id="L30" class="LineNr"> 30 </span>    <span class="Delimiter">}</span>
-<span id="L31" class="LineNr"> 31 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L32" class="LineNr"> 32 </span>      <a href='046check_type_by_name.cc.html#L38'>deduce_missing_type</a><span class="Delimiter">(</span>known<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
-<span id="L33" class="LineNr"> 33 </span>      <a href='046check_type_by_name.cc.html#L59'>check_type</a><span class="Delimiter">(</span>known<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
-<span id="L34" class="LineNr"> 34 </span>    <span class="Delimiter">}</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="Delimiter">}</span>
-<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">}</span>
-<span id="L37" class="LineNr"> 37 </span>
-<span id="L38" class="LineNr"> 38 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L38'>deduce_missing_type</a><span class="Delimiter">(</span>set&lt;reagent&gt;&amp; known<span class="Delimiter">,</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L39" class="LineNr"> 39 </span>  <span class="Comment">// Deduce Missing Type(x, caller)</span>
-<span id="L40" class="LineNr"> 40 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L42" class="LineNr"> 42 </span>    x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;label&quot;</span><span class="Delimiter">);</span>
-<span id="L43" class="LineNr"> 43 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: we need surrounding-space info for type-checking variables in other spaces</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Delimiter">:(after &quot;Transform.push_back(collect_surrounding_spaces)&quot;)</span>
+<span id="L19" class="LineNr"> 19 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='046check_type_by_name.cc.html#L35'>check_or_set_types_by_name</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L20" class="LineNr"> 20 </span>
+<span id="L21" class="LineNr"> 21 </span><span class="Comment">// Keep the name-&gt;type mapping for all recipes around for the entire</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Comment">// transformation phase.</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L24" class="LineNr"> 24 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> set&lt;reagent<span class="Delimiter">,</span> name_lt&gt; &gt; Types_by_space<span class="Delimiter">;</span>  <span class="Comment">// internal to transform; no need to snapshot</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L26" class="LineNr"> 26 </span>Types_by_space<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(before &quot;End transform_all&quot;)</span>
+<span id="L28" class="LineNr"> 28 </span>Types_by_space<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Normal">struct</span> <a href='046check_type_by_name.cc.html#L30'>name_lt</a> <span class="Delimiter">{</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span><span class="Delimiter">()(</span><span class="Normal">const</span> reagent&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; b<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span> <span class="Identifier">return</span> a<span class="Delimiter">.</span>name &lt; b<span class="Delimiter">.</span>name<span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">};</span>
+<span id="L33" class="LineNr"> 33 </span>
+<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(code)</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L35'>check_or_set_types_by_name</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L36" class="LineNr"> 36 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- deduce types for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L39" class="LineNr"> 39 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L40" class="LineNr"> 40 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
+<span id="L41" class="LineNr"> 41 </span>      <a href='046check_type_by_name.cc.html#L47'>check_or_set_type</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
+<span id="L42" class="LineNr"> 42 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
+<span id="L43" class="LineNr"> 43 </span>      <a href='046check_type_by_name.cc.html#L47'>check_or_set_type</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">),</span> caller<span class="Delimiter">);</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Delimiter">}</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>known<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)</span> == known<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">const</span> reagent&amp; exemplar = *known<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L47" class="LineNr"> 47 </span>  x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*exemplar<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L48" class="LineNr"> 48 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; &lt;= &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// spaces are special; their type includes their /names property</span>
-<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L104'>is_mu_space</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &amp;&amp; !has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L51" class="LineNr"> 51 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L52" class="LineNr"> 52 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing /names property for space variable '&quot;</span> &lt;&lt; exemplar<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L53" class="LineNr"> 53 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L54" class="LineNr"> 54 </span>    <span class="Delimiter">}</span>
-<span id="L55" class="LineNr"> 55 </span>    x<span class="Delimiter">.</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;names&quot;</span><span class="Delimiter">,</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>*property<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))));</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="Delimiter">}</span>
-<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
-<span id="L58" class="LineNr"> 58 </span>
-<span id="L59" class="LineNr"> 59 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L59'>check_type</a><span class="Delimiter">(</span>set&lt;reagent&gt;&amp; known<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L60" class="LineNr"> 60 </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="L61" class="LineNr"> 61 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// if you use raw locations you're probably doing something unsafe</span>
-<span id="L62" class="LineNr"> 62 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// might get filled in by other logic later</span>
-<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L64" class="LineNr"> 64 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;label&quot;</span><span class="Delimiter">)</span>
-<span id="L65" class="LineNr"> 65 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;non-label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' must begin with a letter</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L66" class="LineNr"> 66 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L67" class="LineNr"> 67 </span>  <span class="Delimiter">}</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>known<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)</span> == known<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L70" class="LineNr"> 70 </span>    known<span class="Delimiter">.</span>insert<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 class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>known<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)-&gt;</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L73" class="LineNr"> 73 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' used with multiple types</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L74" class="LineNr"> 74 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L75" class="LineNr"> 75 </span>  <span class="Delimiter">}</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L77" class="LineNr"> 77 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr"> 78 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: can't be just an array. What is it an array of?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>    <span class="Delimiter">}</span>
-<span id="L81" class="LineNr"> 81 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; can't determine the size of array variable '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'. Either allocate it separately and make the type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' an address, or specify the length of the array in the type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<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>  <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="Delimiter">:(scenario transform_fills_in_missing_types)</span>
-<span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L92" class="LineNr"> 92 </span>]
-<span id="L93" class="LineNr"> 93 </span><span class="Comment"># x is in location 1, y in location 2</span>
-<span id="L94" class="LineNr"> 94 </span><span class="traceContains">+mem: storing 2 in location 2</span>
-<span id="L95" class="LineNr"> 95 </span>
-<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(scenario transform_fills_in_missing_types_in_product)</span>
-<span id="L97" class="LineNr"> 97 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L98" class="LineNr"> 98 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L99" class="LineNr"> 99 </span>  x<span class="Special"> &lt;- </span>copy <span class="Constant">2</span>
-<span id="L100" class="LineNr">100 </span>]
-<span id="L101" class="LineNr">101 </span><span class="Comment"># x is in location 1</span>
-<span id="L102" class="LineNr">102 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L103" class="LineNr">103 </span>
-<span id="L104" class="LineNr">104 </span><span class="Delimiter">:(scenario transform_fills_in_missing_types_in_product_and_ingredient)</span>
-<span id="L105" class="LineNr">105 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L106" class="LineNr">106 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L107" class="LineNr">107 </span>  x<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L108" class="LineNr">108 </span>]
-<span id="L109" class="LineNr">109 </span><span class="Comment"># x is in location 1</span>
-<span id="L110" class="LineNr">110 </span><span class="traceContains">+mem: storing 2 in location 1</span>
-<span id="L111" class="LineNr">111 </span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(scenario transform_fills_in_missing_label_type)</span>
-<span id="L113" class="LineNr">113 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L114" class="LineNr">114 </span>  jump +target
-<span id="L115" class="LineNr">115 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L116" class="LineNr">116 </span>  +target
+<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L47'>check_or_set_type</a><span class="Delimiter">(</span>reagent&amp; curr<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// no type-checking for raw locations</span>
+<span id="L50" class="LineNr"> 50 </span>  set&lt;reagent<span class="Delimiter">,</span> name_lt&gt;&amp; known_types = Types_by_space[owning_recipe<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>ordinal<span class="Delimiter">)</span>]<span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span>  <a href='046check_type_by_name.cc.html#L55'>deduce_missing_type</a><span class="Delimiter">(</span>known_types<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
+<span id="L52" class="LineNr"> 52 </span>  <a href='046check_type_by_name.cc.html#L76'>check_type</a><span class="Delimiter">(</span>known_types<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
+<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">}</span>
+<span id="L54" class="LineNr"> 54 </span>
+<span id="L55" class="LineNr"> 55 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L55'>deduce_missing_type</a><span class="Delimiter">(</span>set&lt;reagent<span class="Delimiter">,</span> name_lt&gt;&amp; known_types<span class="Delimiter">,</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Comment">// Deduce Missing Type(x, caller)</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L59" class="LineNr"> 59 </span>    x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;label&quot;</span><span class="Delimiter">);</span>
+<span id="L60" class="LineNr"> 60 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>known_types<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)</span> == known_types<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Normal">const</span> reagent&amp; exemplar = *known_types<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L64" class="LineNr"> 64 </span>  x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*exemplar<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; &lt;= &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="Comment">// spaces are special; their type includes their /names property</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='043space.cc.html#L127'>is_mu_space</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &amp;&amp; !has_property<span class="Delimiter">(</span>x<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L68" class="LineNr"> 68 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_property<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing /names property for space variable '&quot;</span> &lt;&lt; exemplar<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L71" class="LineNr"> 71 </span>    <span class="Delimiter">}</span>
+<span id="L72" class="LineNr"> 72 </span>    x<span class="Delimiter">.</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;names&quot;</span><span class="Delimiter">,</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>*property<span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> <span class="Constant">&quot;names&quot;</span><span class="Delimiter">))));</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Delimiter">}</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
+<span id="L75" class="LineNr"> 75 </span>
+<span id="L76" class="LineNr"> 76 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L76'>check_type</a><span class="Delimiter">(</span>set&lt;reagent<span class="Delimiter">,</span> name_lt&gt;&amp; known_types<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L77" class="LineNr"> 77 </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="L78" class="LineNr"> 78 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// might get filled in by other logic later</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L80" class="LineNr"> 80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;label&quot;</span><span class="Delimiter">)</span>
+<span id="L81" class="LineNr"> 81 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;non-label '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' must begin with a letter</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L82" class="LineNr"> 82 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">}</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>known_types<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)</span> == known_types<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L86" class="LineNr"> 86 </span>    known_types<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">}</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>known_types<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)-&gt;</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L89" class="LineNr"> 89 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' used with multiple types</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L90" class="LineNr"> 90 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>known_types<span class="Delimiter">.</span>find<span class="Delimiter">(</span>x<span class="Delimiter">)-&gt;</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Delimiter">}</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L94" class="LineNr"> 94 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: can't be just an array. What is it an array of?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L96" class="LineNr"> 96 </span>      <span class="Identifier">return</span><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">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; can't determine the size of array variable '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'. Either allocate it separately and make the type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' an address, or specify the length of the array in the type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>      <span class="Identifier">return</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="Delimiter">}</span>
+<span id="L103" class="LineNr">103 </span><span class="Delimiter">}</span>
+<span id="L104" class="LineNr">104 </span>
+<span id="L105" class="LineNr">105 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='046check_type_by_name.cc.html#L105'>owning_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> s = <a href='044space_surround.cc.html#L56'>space_index</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span> s &gt; <span class="Constant">0</span><span class="Delimiter">;</span> --s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L107" class="LineNr">107 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Surrounding_space<span class="Delimiter">,</span> r<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L108" class="LineNr">108 </span>    r = Surrounding_space[r]<span class="Delimiter">;</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Delimiter">}</span>
+<span id="L110" class="LineNr">110 </span>  <span class="Identifier">return</span> r<span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span><span class="Delimiter">}</span>
+<span id="L112" class="LineNr">112 </span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario transform_fills_in_missing_types)</span>
+<span id="L114" class="LineNr">114 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L115" class="LineNr">115 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L117" class="LineNr">117 </span>]
-<span id="L118" class="LineNr">118 </span><span class="traceAbsent">-mem: storing 0 in location 1</span>
-<span id="L119" class="LineNr">119 </span>
-<span id="L120" class="LineNr">120 </span><span class="Delimiter">:(scenario transform_fails_on_missing_types_in_first_mention)</span>
-<span id="L121" class="LineNr">121 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L118" class="LineNr">118 </span><span class="Comment"># x is in location 2, y in location 3</span>
+<span id="L119" class="LineNr">119 </span><span class="traceContains">+mem: storing 12 in location 3</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(scenario transform_fills_in_missing_types_in_product)</span>
 <span id="L122" class="LineNr">122 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L123" class="LineNr">123 </span>  x<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L124" class="LineNr">124 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
+<span id="L124" class="LineNr">124 </span>  x<span class="Special"> &lt;- </span>copy <span class="Constant">12</span>
 <span id="L125" class="LineNr">125 </span>]
-<span id="L126" class="LineNr">126 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'x' in 'x &lt;- copy 1'</span>
-<span id="L127" class="LineNr">127 </span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">:(scenario transform_fails_on_wrong_type_for_label)</span>
-<span id="L129" class="LineNr">129 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L126" class="LineNr">126 </span><span class="Comment"># x is in location 2</span>
+<span id="L127" class="LineNr">127 </span><span class="traceContains">+mem: storing 12 in location 2</span>
+<span id="L128" class="LineNr">128 </span>
+<span id="L129" class="LineNr">129 </span><span class="Delimiter">:(scenario transform_fills_in_missing_types_in_product_and_ingredient)</span>
 <span id="L130" class="LineNr">130 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L131" class="LineNr">131 </span>  +foo:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L132" class="LineNr">132 </span>]
-<span id="L133" class="LineNr">133 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: non-label '+foo' must begin with a letter</span>
-<span id="L134" class="LineNr">134 </span>
-<span id="L135" class="LineNr">135 </span><span class="Delimiter">:(scenario typo_in_address_type_fails)</span>
-<span id="L136" class="LineNr">136 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L137" class="LineNr">137 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L138" class="LineNr">138 </span>  <span class="Normal">y</span>:&amp;:charcter<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">character:type</span>
-<span id="L139" class="LineNr">139 </span>  *y<span class="Special"> &lt;- </span>copy <span class="Constant">67</span>
-<span id="L140" class="LineNr">140 </span>]
-<span id="L141" class="LineNr">141 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: unknown type charcter in 'y:&amp;:charcter &lt;- new character:type'</span>
-<span id="L142" class="LineNr">142 </span>
-<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(scenario array_type_without_size_fails)</span>
-<span id="L144" class="LineNr">144 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L145" class="LineNr">145 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L146" class="LineNr">146 </span>  <span class="Normal">x</span>:@:num<span class="Special"> &lt;- </span>merge <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">13</span>
-<span id="L147" class="LineNr">147 </span>]
-<span id="L148" class="LineNr">148 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a> can't determine the size of array variable 'x'. Either allocate it separately and make the type of 'x' an address, or specify the length of the array in the type of 'x'.</span>
-<span id="L149" class="LineNr">149 </span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L151" class="LineNr">151 </span><span class="Delimiter">:(scenario transform_checks_types_of_identical_reagents_in_multiple_spaces)</span>
-<span id="L152" class="LineNr">152 </span><span class="muRecipe">def</span> foo [  <span class="Comment"># dummy</span>
-<span id="L153" class="LineNr">153 </span>]
-<span id="L154" class="LineNr">154 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L155" class="LineNr">155 </span>  local-scope
-<span id="L156" class="LineNr">156 </span>  <span class="Constant">0</span>:space/names:foo<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># specify surrounding space</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Normal">x</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">1</span>/<span class="Constant">true</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L159" class="LineNr">159 </span>  x/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L160" class="LineNr">160 </span>]
-<span id="L161" class="LineNr">161 </span>$error: <span class="Constant">0</span>
-<span id="L162" class="LineNr">162 </span>
-<span id="L163" class="LineNr">163 </span><span class="Delimiter">:(scenario transform_handles_empty_reagents)</span>
-<span id="L164" class="LineNr">164 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L165" class="LineNr">165 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L166" class="LineNr">166 </span>  add *
-<span id="L167" class="LineNr">167 </span>]
-<span id="L168" class="LineNr">168 </span><span class="traceContains">+error: illegal name '*'</span>
-<span id="L169" class="LineNr">169 </span><span class="Comment"># no crash</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
+<span id="L132" class="LineNr">132 </span>  x<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L133" class="LineNr">133 </span>]
+<span id="L134" class="LineNr">134 </span><span class="Comment"># x is in location 2</span>
+<span id="L135" class="LineNr">135 </span><span class="traceContains">+mem: storing 12 in location 2</span>
+<span id="L136" class="LineNr">136 </span>
+<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(scenario transform_fills_in_missing_label_type)</span>
+<span id="L138" class="LineNr">138 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L139" class="LineNr">139 </span>  jump +target
+<span id="L140" class="LineNr">140 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L141" class="LineNr">141 </span>  +target
+<span id="L142" class="LineNr">142 </span>]
+<span id="L143" class="LineNr">143 </span><span class="traceAbsent">-mem: storing 0 in location 1</span>
+<span id="L144" class="LineNr">144 </span>
+<span id="L145" class="LineNr">145 </span><span class="Delimiter">:(scenario transform_fails_on_missing_types_in_first_mention)</span>
+<span id="L146" class="LineNr">146 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L147" class="LineNr">147 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L148" class="LineNr">148 </span>  x<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">2</span>
+<span id="L150" class="LineNr">150 </span>]
+<span id="L151" class="LineNr">151 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'x' in 'x &lt;- copy 1'</span>
+<span id="L152" class="LineNr">152 </span>
+<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario transform_fails_on_wrong_type_for_label)</span>
+<span id="L154" class="LineNr">154 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L155" class="LineNr">155 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L156" class="LineNr">156 </span>  +foo:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L157" class="LineNr">157 </span>]
+<span id="L158" class="LineNr">158 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: non-label '+foo' must begin with a letter</span>
+<span id="L159" class="LineNr">159 </span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(scenario typo_in_address_type_fails)</span>
+<span id="L161" class="LineNr">161 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L162" class="LineNr">162 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L163" class="LineNr">163 </span>  <span class="Normal">y</span>:&amp;:charcter<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">character:type</span>
+<span id="L164" class="LineNr">164 </span>  *y<span class="Special"> &lt;- </span>copy <span class="Constant">67</span>
+<span id="L165" class="LineNr">165 </span>]
+<span id="L166" class="LineNr">166 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: unknown type charcter in 'y:&amp;:charcter &lt;- new character:type'</span>
+<span id="L167" class="LineNr">167 </span>
+<span id="L168" class="LineNr">168 </span><span class="Delimiter">:(scenario array_type_without_size_fails)</span>
+<span id="L169" class="LineNr">169 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L170" class="LineNr">170 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L171" class="LineNr">171 </span>  <span class="Normal">x</span>:@:num<span class="Special"> &lt;- </span>merge <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">13</span>
+<span id="L172" class="LineNr">172 </span>]
+<span id="L173" class="LineNr">173 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a> can't determine the size of array variable 'x'. Either allocate it separately and make the type of 'x' an address, or specify the length of the array in the type of 'x'.</span>
+<span id="L174" class="LineNr">174 </span>
+<span id="L175" class="LineNr">175 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(scenario transform_checks_types_of_identical_reagents_in_multiple_spaces)</span>
+<span id="L177" class="LineNr">177 </span><span class="muRecipe">def</span> foo [  <span class="Comment"># dummy</span>
+<span id="L178" class="LineNr">178 </span>]
+<span id="L179" class="LineNr">179 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L180" class="LineNr">180 </span>  local-scope
+<span id="L181" class="LineNr">181 </span>  <span class="Constant">0</span>:space/names:foo<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>  <span class="Comment"># specify surrounding space</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Normal">x</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> true</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L184" class="LineNr">184 </span>  x/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L185" class="LineNr">185 </span>]
+<span id="L186" class="LineNr">186 </span>$error: <span class="Constant">0</span>
+<span id="L187" class="LineNr">187 </span>
+<span id="L188" class="LineNr">188 </span><span class="Delimiter">:(scenario transform_handles_empty_reagents)</span>
+<span id="L189" class="LineNr">189 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L191" class="LineNr">191 </span>  add *
+<span id="L192" class="LineNr">192 </span>]
+<span id="L193" class="LineNr">193 </span><span class="traceContains">+error: illegal name '*'</span>
+<span id="L194" class="LineNr">194 </span><span class="Comment"># no crash</span>
+<span id="L195" class="LineNr">195 </span>
+<span id="L196" class="LineNr">196 </span><span class="Delimiter">:(scenario transform_checks_types_in_surrounding_spaces)</span>
+<span id="L197" class="LineNr">197 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L198" class="LineNr">198 </span><span class="Comment"># 'x' is a bool in foo's space</span>
+<span id="L199" class="LineNr">199 </span><span class="muRecipe">def</span> foo [
+<span id="L200" class="LineNr">200 </span>  local-scope
+<span id="L201" class="LineNr">201 </span>  <span class="Normal">x</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L202" class="LineNr">202 </span>  <span class="Identifier">return</span> <span class="Normal">default</span>-space/names:foo
+<span id="L203" class="LineNr">203 </span>]
+<span id="L204" class="LineNr">204 </span><span class="Comment"># try to read 'x' as a num in foo's space</span>
+<span id="L205" class="LineNr">205 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L206" class="LineNr">206 </span>  local-scope
+<span id="L207" class="LineNr">207 </span>  <span class="Constant">0</span>:space/names:foo<span class="Special"> &lt;- </span>foo
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">x</span>:num/space:<span class="Constant">1</span><span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L209" class="LineNr">209 </span>]
+<span id="L210" class="LineNr">210 </span><span class="Normal">error</span>: foo: <span class="Constant">'x'</span> used with multiple types
 </pre>
 </body>
 </html>
diff --git a/html/050scenario.cc.html b/html/050scenario.cc.html
index 6f5cf28c..2d003d89 100644
--- a/html/050scenario.cc.html
+++ b/html/050scenario.cc.html
@@ -103,7 +103,7 @@ if ('onhashchange' in window) {
 <span id="L37" class="LineNr"> 37 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> foo [
 <span id="L38" class="LineNr"> 38 </span>  run [
 <span id="L39" class="LineNr"> 39 </span>    <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
-<span id="L40" class="LineNr"> 40 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [a b c]
+<span id="L40" class="LineNr"> 40 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [a b c]
 <span id="L41" class="LineNr"> 41 </span>  ]
 <span id="L42" class="LineNr"> 42 </span>  memory-should-contain [
 <span id="L43" class="LineNr"> 43 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">13</span>
@@ -156,18 +156,18 @@ if ('onhashchange' in window) {
 <span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(code)</span>
 <span id="L91" class="LineNr"> 91 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> <a href='050scenario.cc.html#L91'>parse_scenario</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L92" class="LineNr"> 92 </span>  <a href='050scenario.cc.html#L57'>scenario</a> result<span class="Delimiter">;</span>
-<span id="L93" class="LineNr"> 93 </span>  result<span class="Delimiter">.</span>name = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Scenario_names<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
-<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;duplicate <a href='050scenario.cc.html#L57'>scenario</a> name: '&quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L93" class="LineNr"> 93 </span>  result<span class="Delimiter">.</span>name = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Scenario_names<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
+<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;duplicate <a href='050scenario.cc.html#L57'>scenario</a> name: '&quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L96" class="LineNr"> 96 </span>  Scenario_names<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
 <span id="L97" class="LineNr"> 97 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L98" class="LineNr"> 98 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L99" class="LineNr"> 99 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='050scenario.cc.html#L57'>scenario</a> at <a href='003trace.cc.html#L203'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L99" class="LineNr"> 99 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='050scenario.cc.html#L57'>scenario</a> at <a href='003trace.cc.html#L226'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L100" class="LineNr">100 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Delimiter">}</span>
-<span id="L102" class="LineNr">102 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L102" class="LineNr">102 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L104" class="LineNr">104 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;Expected '[' after <a href='050scenario.cc.html#L57'>scenario</a> '&quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;Expected '[' after <a href='050scenario.cc.html#L57'>scenario</a> '&quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L105" class="LineNr">105 </span>    exit<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Delimiter">}</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Comment">// scenarios are take special 'code' strings so we need to ignore brackets</span>
@@ -175,13 +175,13 @@ if ('onhashchange' in window) {
 <span id="L109" class="LineNr">109 </span>  result<span class="Delimiter">.</span>to_run = <a href='014literal_string.cc.html#L33'>slurp_quoted</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L110" class="LineNr">110 </span>  <span class="Comment">// delete [] delimiters</span>
 <span id="L111" class="LineNr">111 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>result<span class="Delimiter">.</span>to_run<span class="Delimiter">,</span> <span class="Constant">&quot;[&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L112" class="LineNr">112 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;scenario &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; should start with '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L112" class="LineNr">112 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;scenario &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; should start with '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L113" class="LineNr">113 </span>    result<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L114" class="LineNr">114 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Delimiter">}</span>
 <span id="L116" class="LineNr">116 </span>  result<span class="Delimiter">.</span>to_run<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="L117" class="LineNr">117 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>to_run<span class="Delimiter">.</span>at<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>to_run<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">)</span> != <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L118" class="LineNr">118 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;scenario &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has an unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L118" class="LineNr">118 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;scenario &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has an unbalanced '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L119" class="LineNr">119 </span>    result<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L120" class="LineNr">120 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L121" class="LineNr">121 </span>  <span class="Delimiter">}</span>
@@ -221,7 +221,7 @@ if ('onhashchange' in window) {
 <span id="L155" class="LineNr">155 </span><span class="Delimiter">:(after &quot;Check For .mu Files&quot;)</span>
 <span id="L156" class="LineNr">156 </span>Num_core_mu_scenarios = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Scenarios<span class="Delimiter">);</span>
 <span id="L157" class="LineNr">157 </span><span class="Delimiter">:(before &quot;End Tests&quot;)</span>
-<span id="L158" class="LineNr">158 </span>Hide_missing_default_space_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>Hide_missing_default_space_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L159" class="LineNr">159 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Num_core_mu_scenarios &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L160" class="LineNr">160 </span>  time<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
 <span id="L161" class="LineNr">161 </span>  cerr &lt;&lt; <span class="Constant">&quot;Mu tests: &quot;</span> &lt;&lt; ctime<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
@@ -249,10 +249,10 @@ if ('onhashchange' in window) {
 <span id="L183" class="LineNr">183 </span><span class="Comment">//: For faster debugging, support running tests for just the Mu app(s) we are</span>
 <span id="L184" class="LineNr">184 </span><span class="Comment">//: loading.</span>
 <span id="L185" class="LineNr">185 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L186" class="LineNr">186 </span><span class="Normal">bool</span> Test_only_app = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L186" class="LineNr">186 </span><span class="Normal">bool</span> Test_only_app =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L187" class="LineNr">187 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
 <span id="L188" class="LineNr">188 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L73'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--test-only-app&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>  Test_only_app = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L189" class="LineNr">189 </span>  Test_only_app =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L190" class="LineNr">190 </span><span class="Delimiter">}</span>
 <span id="L191" class="LineNr">191 </span><span class="Delimiter">:(after &quot;End Test Run Initialization&quot;)</span>
 <span id="L192" class="LineNr">192 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Test_only_app &amp;&amp; Num_core_mu_scenarios &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Scenarios<span class="Delimiter">))</span> <span class="Delimiter">{</span>
@@ -263,726 +263,722 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr">197 </span><span class="Delimiter">:(after &quot;Test Runs&quot;)</span>
 <span id="L198" class="LineNr">198 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Scenarios<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L199" class="LineNr">199 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Scenarios<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == argv[argc-<span class="Constant">1</span>]<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L200" class="LineNr">200 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Start_tracing<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L201" class="LineNr">201 </span>      Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
-<span id="L202" class="LineNr">202 </span>      Save_trace = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L203" class="LineNr">203 </span>    <span class="Delimiter">}</span>
-<span id="L204" class="LineNr">204 </span>    run_mu_scenario<span class="Delimiter">(</span>Scenarios<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L205" class="LineNr">205 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Passed<span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L206" class="LineNr">206 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Delimiter">}</span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L211" class="LineNr">211 </span><span class="Comment">// this isn't a constant, just a global of type const*</span>
-<span id="L212" class="LineNr">212 </span><span class="Normal">const</span> scenario* Current_scenario = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L213" class="LineNr">213 </span><span class="Delimiter">:(code)</span>
-<span id="L214" class="LineNr">214 </span><span class="Normal">void</span> run_mu_scenario<span class="Delimiter">(</span><span class="Normal">const</span> scenario&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>  Current_scenario = &amp;s<span class="Delimiter">;</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Normal">bool</span> not_already_inside_test = !Trace_stream<span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span><span class="CommentedCode">//?   cerr &lt;&lt; s.name &lt;&lt; '\n';</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>not_already_inside_test<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L219" class="LineNr">219 </span>    Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
-<span id="L220" class="LineNr">220 </span>    <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Delimiter">}</span>
-<span id="L222" class="LineNr">222 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span><span class="Constant">&quot;recipe scenario_&quot;</span>+s<span class="Delimiter">.</span>name+<span class="Constant">&quot; [ &quot;</span>+s<span class="Delimiter">.</span>to_run+<span class="Constant">&quot; ]&quot;</span><span class="Delimiter">);</span>
-<span id="L223" class="LineNr">223 </span>  mark_autogenerated<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L224" class="LineNr">224 </span>  bind_special_scenario_names<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L225" class="LineNr">225 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">())</span>
-<span id="L227" class="LineNr">227 </span>    run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>front<span class="Delimiter">());</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Comment">// End Mu Test Teardown</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors &amp;&amp; <a href='003trace.cc.html#L198'>trace_contains_errors</a><span class="Delimiter">()</span> &amp;&amp; !Scenario_testing_scenario<span class="Delimiter">)</span>
-<span id="L230" class="LineNr">230 </span>    Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L231" class="LineNr">231 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>not_already_inside_test &amp;&amp; Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L232" class="LineNr">232 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">();</span>
-<span id="L233" class="LineNr">233 </span>    <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
-<span id="L234" class="LineNr">234 </span>    Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L235" class="LineNr">235 </span>  <span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span>  Current_scenario = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">}</span>
-<span id="L238" class="LineNr">238 </span>
-<span id="L239" class="LineNr">239 </span><span class="Comment">//: Permit numeric locations to be accessed in scenarios.</span>
-<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(before &quot;End <a href='043space.cc.html#L225'>check_default_space</a> Special-cases&quot;)</span>
-<span id="L241" class="LineNr">241 </span><span class="Comment">// user code should never create recipes with underscores in their names</span>
-<span id="L242" class="LineNr">242 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip Mu scenarios which will use raw memory locations</span>
-<span id="L243" class="LineNr">243 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;run_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip calls to 'run', which should be in scenarios and will also use raw memory locations</span>
+<span id="L200" class="LineNr">200 </span>    run_mu_scenario<span class="Delimiter">(</span>Scenarios<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L201" class="LineNr">201 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Passed<span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L202" class="LineNr">202 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Delimiter">}</span>
+<span id="L204" class="LineNr">204 </span><span class="Delimiter">}</span>
+<span id="L205" class="LineNr">205 </span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L207" class="LineNr">207 </span><span class="Comment">// this isn't a constant, just a global of type const*</span>
+<span id="L208" class="LineNr">208 </span><span class="Normal">const</span> scenario* Current_scenario = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L209" class="LineNr">209 </span><span class="Delimiter">:(code)</span>
+<span id="L210" class="LineNr">210 </span><span class="Normal">void</span> run_mu_scenario<span class="Delimiter">(</span><span class="Normal">const</span> scenario&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L211" class="LineNr">211 </span>  Current_scenario = &amp;s<span class="Delimiter">;</span>
+<span id="L212" class="LineNr">212 </span>  <span class="Normal">bool</span> not_already_inside_test = !Trace_stream<span class="Delimiter">;</span>
+<span id="L213" class="LineNr">213 </span><span class="CommentedCode">//?   cerr &lt;&lt; s.name &lt;&lt; '\n';</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>not_already_inside_test<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L215" class="LineNr">215 </span>    Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span>    <a href='000organization.cc.html#L134'>reset</a><span class="Delimiter">();</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
+<span id="L218" class="LineNr">218 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span><span class="Constant">&quot;recipe scenario_&quot;</span>+s<span class="Delimiter">.</span>name+<span class="Constant">&quot; [ &quot;</span>+s<span class="Delimiter">.</span>to_run+<span class="Constant">&quot; ]&quot;</span><span class="Delimiter">);</span>
+<span id="L219" class="LineNr">219 </span>  mark_autogenerated<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L220" class="LineNr">220 </span>  bind_special_scenario_names<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L221" class="LineNr">221 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!trace_contains_errors<span class="Delimiter">())</span>
+<span id="L223" class="LineNr">223 </span>    run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>front<span class="Delimiter">());</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Comment">// End Mu Test Teardown</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors &amp;&amp; <a href='003trace.cc.html#L221'>trace_contains_errors</a><span class="Delimiter">()</span> &amp;&amp; !Scenario_testing_scenario<span class="Delimiter">)</span>
+<span id="L226" class="LineNr">226 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>not_already_inside_test &amp;&amp; Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L228" class="LineNr">228 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace<span class="Delimiter">)</span> Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>save</a><span class="Delimiter">();</span>
+<span id="L229" class="LineNr">229 </span>    <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
+<span id="L230" class="LineNr">230 </span>    Trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span>  Current_scenario = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L233" class="LineNr">233 </span><span class="Delimiter">}</span>
+<span id="L234" class="LineNr">234 </span>
+<span id="L235" class="LineNr">235 </span><span class="Comment">//: Permit numeric locations to be accessed in scenarios.</span>
+<span id="L236" class="LineNr">236 </span><span class="Delimiter">:(before &quot;End <a href='043space.cc.html#L261'>check_default_space</a> Special-cases&quot;)</span>
+<span id="L237" class="LineNr">237 </span><span class="Comment">// user code should never create recipes with underscores in their names</span>
+<span id="L238" class="LineNr">238 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip Mu scenarios which will use raw memory locations</span>
+<span id="L239" class="LineNr">239 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;run_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip calls to 'run', which should be in scenarios and will also use raw memory locations</span>
+<span id="L240" class="LineNr">240 </span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">:(before &quot;End maybe(recipe_name) Special-cases&quot;)</span>
+<span id="L242" class="LineNr">242 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span>
+<span id="L243" class="LineNr">243 </span>  <span class="Identifier">return</span> recipe_name<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>strlen<span class="Delimiter">(</span><span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> + <span class="Constant">&quot;: &quot;</span><span class="Delimiter">;</span>
 <span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(before &quot;End maybe(recipe_name) Special-cases&quot;)</span>
-<span id="L246" class="LineNr">246 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>recipe_name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Identifier">return</span> recipe_name<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>strlen<span class="Delimiter">(</span><span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> + <span class="Constant">&quot;: &quot;</span><span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>
-<span id="L249" class="LineNr">249 </span><span class="Comment">//: Some variables for fake resources always get special /raw addresses in scenarios.</span>
-<span id="L250" class="LineNr">250 </span>
-<span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
-<span id="L252" class="LineNr">252 </span><span class="Comment">// Should contain everything passed by is_special_name but failed by is_disqualified.</span>
-<span id="L253" class="LineNr">253 </span><span class="Normal">void</span> bind_special_scenario_names<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L254" class="LineNr">254 </span>  <span class="Comment">// Special Scenario Variable Names(r)</span>
-<span id="L255" class="LineNr">255 </span>  <span class="Comment">// End Special Scenario Variable Names(r)</span>
-<span id="L256" class="LineNr">256 </span><span class="Delimiter">}</span>
-<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(before &quot;Done Placing Ingredient(ingredient, inst, caller)&quot;)</span>
-<span id="L258" class="LineNr">258 </span>maybe_make_raw<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
-<span id="L259" class="LineNr">259 </span><span class="Delimiter">:(before &quot;Done Placing Product(product, inst, caller)&quot;)</span>
-<span id="L260" class="LineNr">260 </span>maybe_make_raw<span class="Delimiter">(</span>product<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
-<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(code)</span>
-<span id="L262" class="LineNr">262 </span><span class="Normal">void</span> maybe_make_raw<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_special_name<span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span>
-<span id="L265" class="LineNr">265 </span>    r<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Comment">// End maybe_make_raw</span>
-<span id="L267" class="LineNr">267 </span><span class="Delimiter">}</span>
-<span id="L268" class="LineNr">268 </span>
-<span id="L269" class="LineNr">269 </span><span class="Comment">//: Test.</span>
-<span id="L270" class="LineNr">270 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L271" class="LineNr">271 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;__maybe_make_raw_test__&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
-<span id="L273" class="LineNr">273 </span><span class="Comment">//: ugly: we only need this for this one test, but need to define it for all time</span>
-<span id="L274" class="LineNr">274 </span>Name[r][<span class="Constant">&quot;__maybe_make_raw_test__&quot;</span>] = Reserved_for_tests-<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L275" class="LineNr">275 </span><span class="Delimiter">:(code)</span>
-<span id="L276" class="LineNr">276 </span><span class="Normal">void</span> test_maybe_make_raw<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L277" class="LineNr">277 </span>  <span class="Comment">// check that scenarios can use local-scope and special variables together</span>
-<span id="L278" class="LineNr">278 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span>
-<span id="L279" class="LineNr">279 </span>      <span class="Constant">&quot;def scenario_foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L280" class="LineNr">280 </span>      <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L281" class="LineNr">281 </span>      <span class="Constant">&quot;  __maybe_make_raw_test__:num &lt;- copy 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L282" class="LineNr">282 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L283" class="LineNr">283 </span>  mark_autogenerated<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L284" class="LineNr">284 </span>  bind_special_scenario_names<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L285" class="LineNr">285 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L286" class="LineNr">286 </span>  run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L287" class="LineNr">287 </span>  <a href='003trace.cc.html#L235'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
-<span id="L288" class="LineNr">288 </span><span class="Delimiter">}</span>
-<span id="L289" class="LineNr">289 </span>
-<span id="L290" class="LineNr">290 </span><span class="Comment">//: Watch out for redefinitions of scenario routines. We should never ever be</span>
-<span id="L291" class="LineNr">291 </span><span class="Comment">//: doing that, regardless of anything else.</span>
-<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(scenario forbid_redefining_scenario_even_if_forced)</span>
-<span id="L293" class="LineNr">293 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L294" class="LineNr">294 </span><span class="Special">% Disable_redefine_checks = true;</span>
-<span id="L295" class="LineNr">295 </span><span class="muRecipe">def</span> scenario-foo [
-<span id="L296" class="LineNr">296 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L297" class="LineNr">297 </span>]
-<span id="L298" class="LineNr">298 </span><span class="muRecipe">def</span> scenario-foo [
-<span id="L299" class="LineNr">299 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L300" class="LineNr">300 </span>]
-<span id="L301" class="LineNr">301 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> scenario-foo</span>
-<span id="L302" class="LineNr">302 </span>
-<span id="L303" class="LineNr">303 </span><span class="Delimiter">:(scenario scenario_containing_parse_error)</span>
-<span id="L304" class="LineNr">304 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L305" class="LineNr">305 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> foo [
-<span id="L306" class="LineNr">306 </span>  memory-should-contain [
-<span id="L307" class="LineNr">307 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
-<span id="L308" class="LineNr">308 </span>  <span class="Comment"># missing ']'</span>
-<span id="L309" class="LineNr">309 </span>]
-<span id="L310" class="LineNr">310 </span><span class="Comment"># no crash</span>
-<span id="L311" class="LineNr">311 </span>
-<span id="L312" class="LineNr">312 </span><span class="Delimiter">:(scenario scenario_containing_transform_error)</span>
-<span id="L313" class="LineNr">313 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L314" class="LineNr">314 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L315" class="LineNr">315 </span>  local-scope
-<span id="L316" class="LineNr">316 </span>  add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L317" class="LineNr">317 </span>]
-<span id="L318" class="LineNr">318 </span><span class="Comment"># no crash</span>
-<span id="L319" class="LineNr">319 </span>
-<span id="L320" class="LineNr">320 </span><span class="Delimiter">:(after &quot;bool should_check_for_redefine(const string&amp; recipe_name)&quot;)</span>
-<span id="L321" class="LineNr">321 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>recipe_name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;scenario-&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L245" class="LineNr">245 </span><span class="Comment">//: Some variables for fake resources always get special /raw addresses in scenarios.</span>
+<span id="L246" class="LineNr">246 </span>
+<span id="L247" class="LineNr">247 </span><span class="Delimiter">:(code)</span>
+<span id="L248" class="LineNr">248 </span><span class="Comment">// Should contain everything passed by is_special_name but failed by is_disqualified.</span>
+<span id="L249" class="LineNr">249 </span><span class="Normal">void</span> bind_special_scenario_names<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L250" class="LineNr">250 </span>  <span class="Comment">// Special Scenario Variable Names(r)</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Comment">// End Special Scenario Variable Names(r)</span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span>
+<span id="L253" class="LineNr">253 </span><span class="Delimiter">:(before &quot;Done Placing Ingredient(ingredient, inst, caller)&quot;)</span>
+<span id="L254" class="LineNr">254 </span>maybe_make_raw<span class="Delimiter">(</span>ingredient<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
+<span id="L255" class="LineNr">255 </span><span class="Delimiter">:(before &quot;Done Placing Product(product, inst, caller)&quot;)</span>
+<span id="L256" class="LineNr">256 </span>maybe_make_raw<span class="Delimiter">(</span>product<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(code)</span>
+<span id="L258" class="LineNr">258 </span><span class="Normal">void</span> maybe_make_raw<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_special_name<span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span>
+<span id="L261" class="LineNr">261 </span>    r<span class="Delimiter">.</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;raw&quot;</span><span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">));</span>
+<span id="L262" class="LineNr">262 </span>  <span class="Comment">// End maybe_make_raw</span>
+<span id="L263" class="LineNr">263 </span><span class="Delimiter">}</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Comment">//: Test.</span>
+<span id="L266" class="LineNr">266 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L267" class="LineNr">267 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;__maybe_make_raw_test__&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L268" class="LineNr">268 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
+<span id="L269" class="LineNr">269 </span><span class="Comment">//: ugly: we only need this for this one test, but need to define it for all time</span>
+<span id="L270" class="LineNr">270 </span>Name[r][<span class="Constant">&quot;__maybe_make_raw_test__&quot;</span>] = Reserved_for_tests-<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(code)</span>
+<span id="L272" class="LineNr">272 </span><span class="Normal">void</span> test_maybe_make_raw<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Comment">// check that scenarios can use local-scope and special variables together</span>
+<span id="L274" class="LineNr">274 </span>  vector&lt;recipe_ordinal&gt; tmp = load<span class="Delimiter">(</span>
+<span id="L275" class="LineNr">275 </span>      <span class="Constant">&quot;def scenario_foo [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L276" class="LineNr">276 </span>      <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L277" class="LineNr">277 </span>      <span class="Constant">&quot;  __maybe_make_raw_test__:num &lt;- copy 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L278" class="LineNr">278 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L279" class="LineNr">279 </span>  mark_autogenerated<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L280" class="LineNr">280 </span>  bind_special_scenario_names<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L281" class="LineNr">281 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L282" class="LineNr">282 </span>  run<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L283" class="LineNr">283 </span>  <a href='003trace.cc.html#L257'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
+<span id="L284" class="LineNr">284 </span><span class="Delimiter">}</span>
+<span id="L285" class="LineNr">285 </span>
+<span id="L286" class="LineNr">286 </span><span class="Comment">//: Watch out for redefinitions of scenario routines. We should never ever be</span>
+<span id="L287" class="LineNr">287 </span><span class="Comment">//: doing that, regardless of anything else.</span>
+<span id="L288" class="LineNr">288 </span><span class="Delimiter">:(scenario forbid_redefining_scenario_even_if_forced)</span>
+<span id="L289" class="LineNr">289 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L290" class="LineNr">290 </span><span class="Special">% Disable_redefine_checks = true;</span>
+<span id="L291" class="LineNr">291 </span><span class="muRecipe">def</span> scenario-foo [
+<span id="L292" class="LineNr">292 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L293" class="LineNr">293 </span>]
+<span id="L294" class="LineNr">294 </span><span class="muRecipe">def</span> scenario-foo [
+<span id="L295" class="LineNr">295 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L296" class="LineNr">296 </span>]
+<span id="L297" class="LineNr">297 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> scenario-foo</span>
+<span id="L298" class="LineNr">298 </span>
+<span id="L299" class="LineNr">299 </span><span class="Delimiter">:(scenario scenario_containing_parse_error)</span>
+<span id="L300" class="LineNr">300 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L301" class="LineNr">301 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> foo [
+<span id="L302" class="LineNr">302 </span>  memory-should-contain [
+<span id="L303" class="LineNr">303 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Comment"># missing ']'</span>
+<span id="L305" class="LineNr">305 </span>]
+<span id="L306" class="LineNr">306 </span><span class="Comment"># no crash</span>
+<span id="L307" class="LineNr">307 </span>
+<span id="L308" class="LineNr">308 </span><span class="Delimiter">:(scenario scenario_containing_transform_error)</span>
+<span id="L309" class="LineNr">309 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L310" class="LineNr">310 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L311" class="LineNr">311 </span>  local-scope
+<span id="L312" class="LineNr">312 </span>  add x<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L313" class="LineNr">313 </span>]
+<span id="L314" class="LineNr">314 </span><span class="Comment"># no crash</span>
+<span id="L315" class="LineNr">315 </span>
+<span id="L316" class="LineNr">316 </span><span class="Delimiter">:(after &quot;bool should_check_for_redefine(const string&amp; recipe_name)&quot;)</span>
+<span id="L317" class="LineNr">317 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>recipe_name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;scenario-&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L318" class="LineNr">318 </span>
+<span id="L319" class="LineNr">319 </span><span class="SalientComment">//:: The special instructions we want to support inside scenarios.</span>
+<span id="L320" class="LineNr">320 </span><span class="Comment">//: These are easy to support in an interpreter, but will require more work</span>
+<span id="L321" class="LineNr">321 </span><span class="Comment">//: when we eventually build a compiler.</span>
 <span id="L322" class="LineNr">322 </span>
-<span id="L323" class="LineNr">323 </span><span class="SalientComment">//:: The special instructions we want to support inside scenarios.</span>
-<span id="L324" class="LineNr">324 </span><span class="Comment">//: These are easy to support in an interpreter, but will require more work</span>
-<span id="L325" class="LineNr">325 </span><span class="Comment">//: when we eventually build a compiler.</span>
-<span id="L326" class="LineNr">326 </span>
-<span id="L327" class="LineNr">327 </span><span class="Comment">//: 'run' is a purely lexical convenience to separate the code actually being</span>
-<span id="L328" class="LineNr">328 </span><span class="Comment">//: tested from any setup</span>
-<span id="L329" class="LineNr">329 </span>
-<span id="L330" class="LineNr">330 </span><span class="Delimiter">:(scenario run)</span>
-<span id="L331" class="LineNr">331 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L332" class="LineNr">332 </span>  run [
-<span id="L333" class="LineNr">333 </span>    <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
-<span id="L334" class="LineNr">334 </span>  ]
-<span id="L335" class="LineNr">335 </span>]
-<span id="L336" class="LineNr">336 </span><span class="traceContains">+mem: storing 13 in location 1</span>
-<span id="L337" class="LineNr">337 </span>
-<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
-<span id="L339" class="LineNr">339 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L340" class="LineNr">340 </span>  <span class="Comment">// Just inline all instructions inside the run block in the containing</span>
-<span id="L341" class="LineNr">341 </span>  <span class="Comment">// recipe. 'run' is basically a comment; pretend it doesn't exist.</span>
-<span id="L342" class="LineNr">342 </span>  istringstream in2<span class="Delimiter">(</span><span class="Constant">&quot;[</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>+curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name+<span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L343" class="LineNr">343 </span>  <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>in2<span class="Delimiter">,</span> result<span class="Delimiter">);</span>
-<span id="L344" class="LineNr">344 </span>  curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L345" class="LineNr">345 </span><span class="Delimiter">}</span>
-<span id="L346" class="LineNr">346 </span>
-<span id="L347" class="LineNr">347 </span><span class="Delimiter">:(scenario run_multiple)</span>
-<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L349" class="LineNr">349 </span>  run [
-<span id="L350" class="LineNr">350 </span>    <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
-<span id="L351" class="LineNr">351 </span>  ]
-<span id="L352" class="LineNr">352 </span>  run [
-<span id="L353" class="LineNr">353 </span>    <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
-<span id="L354" class="LineNr">354 </span>  ]
-<span id="L355" class="LineNr">355 </span>]
-<span id="L356" class="LineNr">356 </span><span class="traceContains">+mem: storing 13 in location 1</span>
-<span id="L357" class="LineNr">357 </span><span class="traceContains">+mem: storing 13 in location 2</span>
-<span id="L358" class="LineNr">358 </span>
-<span id="L359" class="LineNr">359 </span><span class="Comment">//: 'memory-should-contain' raises errors if specific locations aren't as expected</span>
-<span id="L360" class="LineNr">360 </span><span class="Comment">//: Also includes some special support for checking Mu texts.</span>
-<span id="L361" class="LineNr">361 </span>
-<span id="L362" class="LineNr">362 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L363" class="LineNr">363 </span><span class="Normal">bool</span> Scenario_testing_scenario = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L365" class="LineNr">365 </span>Scenario_testing_scenario = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L366" class="LineNr">366 </span>
-<span id="L367" class="LineNr">367 </span><span class="Delimiter">:(scenario memory_check)</span>
-<span id="L368" class="LineNr">368 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L369" class="LineNr">369 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L370" class="LineNr">370 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L371" class="LineNr">371 </span>  memory-should-contain [
-<span id="L372" class="LineNr">372 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">13</span>
-<span id="L373" class="LineNr">373 </span>  ]
-<span id="L374" class="LineNr">374 </span>]
-<span id="L375" class="LineNr">375 </span><span class="traceContains">+run: checking location 1</span>
-<span id="L376" class="LineNr">376 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected location '1' to contain 13 but saw 0</span>
-<span id="L377" class="LineNr">377 </span>
-<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L379" class="LineNr">379 </span>MEMORY_SHOULD_CONTAIN<span class="Delimiter">,</span>
-<span id="L380" class="LineNr">380 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L381" class="LineNr">381 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;memory-should-contain&quot;</span><span class="Delimiter">,</span> MEMORY_SHOULD_CONTAIN<span class="Delimiter">);</span>
-<span id="L382" class="LineNr">382 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L323" class="LineNr">323 </span><span class="Comment">//: 'run' is a purely lexical convenience to separate the code actually being</span>
+<span id="L324" class="LineNr">324 </span><span class="Comment">//: tested from any setup</span>
+<span id="L325" class="LineNr">325 </span>
+<span id="L326" class="LineNr">326 </span><span class="Delimiter">:(scenario run)</span>
+<span id="L327" class="LineNr">327 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L328" class="LineNr">328 </span>  run [
+<span id="L329" class="LineNr">329 </span>    <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
+<span id="L330" class="LineNr">330 </span>  ]
+<span id="L331" class="LineNr">331 </span>]
+<span id="L332" class="LineNr">332 </span><span class="traceContains">+mem: storing 13 in location 1</span>
+<span id="L333" class="LineNr">333 </span>
+<span id="L334" class="LineNr">334 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
+<span id="L335" class="LineNr">335 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Comment">// Just inline all instructions inside the run block in the containing</span>
+<span id="L337" class="LineNr">337 </span>  <span class="Comment">// recipe. 'run' is basically a comment; pretend it doesn't exist.</span>
+<span id="L338" class="LineNr">338 </span>  istringstream in2<span class="Delimiter">(</span><span class="Constant">&quot;[</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>+curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name+<span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L339" class="LineNr">339 </span>  <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>in2<span class="Delimiter">,</span> result<span class="Delimiter">);</span>
+<span id="L340" class="LineNr">340 </span>  curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
+<span id="L342" class="LineNr">342 </span>
+<span id="L343" class="LineNr">343 </span><span class="Delimiter">:(scenario run_multiple)</span>
+<span id="L344" class="LineNr">344 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L345" class="LineNr">345 </span>  run [
+<span id="L346" class="LineNr">346 </span>    <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
+<span id="L347" class="LineNr">347 </span>  ]
+<span id="L348" class="LineNr">348 </span>  run [
+<span id="L349" class="LineNr">349 </span>    <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>
+<span id="L350" class="LineNr">350 </span>  ]
+<span id="L351" class="LineNr">351 </span>]
+<span id="L352" class="LineNr">352 </span><span class="traceContains">+mem: storing 13 in location 1</span>
+<span id="L353" class="LineNr">353 </span><span class="traceContains">+mem: storing 13 in location 2</span>
+<span id="L354" class="LineNr">354 </span>
+<span id="L355" class="LineNr">355 </span><span class="Comment">//: 'memory-should-contain' raises errors if specific locations aren't as expected</span>
+<span id="L356" class="LineNr">356 </span><span class="Comment">//: Also includes some special support for checking Mu texts.</span>
+<span id="L357" class="LineNr">357 </span>
+<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L359" class="LineNr">359 </span><span class="Normal">bool</span> Scenario_testing_scenario =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr">360 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L361" class="LineNr">361 </span>Scenario_testing_scenario =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L362" class="LineNr">362 </span>
+<span id="L363" class="LineNr">363 </span><span class="Delimiter">:(scenario memory_check)</span>
+<span id="L364" class="LineNr">364 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L365" class="LineNr">365 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L366" class="LineNr">366 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L367" class="LineNr">367 </span>  memory-should-contain [
+<span id="L368" class="LineNr">368 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">13</span>
+<span id="L369" class="LineNr">369 </span>  ]
+<span id="L370" class="LineNr">370 </span>]
+<span id="L371" class="LineNr">371 </span><span class="traceContains">+run: checking location 1</span>
+<span id="L372" class="LineNr">372 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected location '1' to contain 13 but saw 0</span>
+<span id="L373" class="LineNr">373 </span>
+<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L375" class="LineNr">375 </span>MEMORY_SHOULD_CONTAIN<span class="Delimiter">,</span>
+<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L377" class="LineNr">377 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;memory-should-contain&quot;</span><span class="Delimiter">,</span> MEMORY_SHOULD_CONTAIN<span class="Delimiter">);</span>
+<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L379" class="LineNr">379 </span><span class="Normal">case</span> MEMORY_SHOULD_CONTAIN: <span class="Delimiter">{</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L381" class="LineNr">381 </span><span class="Delimiter">}</span>
+<span id="L382" class="LineNr">382 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L383" class="LineNr">383 </span><span class="Normal">case</span> MEMORY_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L384" class="LineNr">384 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L385" class="LineNr">385 </span><span class="Delimiter">}</span>
-<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L387" class="LineNr">387 </span><span class="Normal">case</span> MEMORY_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L389" class="LineNr">389 </span>  check_memory<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>name<span class="Delimiter">);</span>
-<span id="L390" class="LineNr">390 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L391" class="LineNr">391 </span><span class="Delimiter">}</span>
-<span id="L392" class="LineNr">392 </span>
-<span id="L393" class="LineNr">393 </span><span class="Delimiter">:(code)</span>
-<span id="L394" class="LineNr">394 </span><span class="Normal">void</span> check_memory<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L395" class="LineNr">395 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L396" class="LineNr">396 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L397" class="LineNr">397 </span>  set&lt;<span class="Normal">int</span>&gt; locations_checked<span class="Delimiter">;</span>
-<span id="L398" class="LineNr">398 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L399" class="LineNr">399 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L400" class="LineNr">400 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L401" class="LineNr">401 </span>    string lhs = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L402" class="LineNr">402 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L403" class="LineNr">403 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L404" class="LineNr">404 </span>      <a href='003trace.cc.html#L174'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L405" class="LineNr">405 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L385" class="LineNr">385 </span>  check_memory<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>name<span class="Delimiter">);</span>
+<span id="L386" class="LineNr">386 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L387" class="LineNr">387 </span><span class="Delimiter">}</span>
+<span id="L388" class="LineNr">388 </span>
+<span id="L389" class="LineNr">389 </span><span class="Delimiter">:(code)</span>
+<span id="L390" class="LineNr">390 </span><span class="Normal">void</span> check_memory<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L391" class="LineNr">391 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L392" class="LineNr">392 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L393" class="LineNr">393 </span>  set&lt;<span class="Normal">int</span>&gt; locations_checked<span class="Delimiter">;</span>
+<span id="L394" class="LineNr">394 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L395" class="LineNr">395 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L396" class="LineNr">396 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L397" class="LineNr">397 </span>    string lhs = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L398" class="LineNr">398 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>lhs<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L399" class="LineNr">399 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L400" class="LineNr">400 </span>      <a href='003trace.cc.html#L197'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L401" class="LineNr">401 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L402" class="LineNr">402 </span>    <span class="Delimiter">}</span>
+<span id="L403" class="LineNr">403 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L404" class="LineNr">404 </span>      <a href='046check_type_by_name.cc.html#L76'>check_type</a><span class="Delimiter">(</span>lhs<span class="Delimiter">,</span> in<span class="Delimiter">);</span>
+<span id="L405" class="LineNr">405 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L406" class="LineNr">406 </span>    <span class="Delimiter">}</span>
-<span id="L407" class="LineNr">407 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>lhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L408" class="LineNr">408 </span>      <a href='046check_type_by_name.cc.html#L59'>check_type</a><span class="Delimiter">(</span>lhs<span class="Delimiter">,</span> in<span class="Delimiter">);</span>
-<span id="L409" class="LineNr">409 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L410" class="LineNr">410 </span>    <span class="Delimiter">}</span>
-<span id="L411" class="LineNr">411 </span>    <span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = to_integer<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
-<span id="L412" class="LineNr">412 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L413" class="LineNr">413 </span>    string _assign<span class="Delimiter">;</span>  in &gt;&gt; _assign<span class="Delimiter">;</span>  assert<span class="Delimiter">(</span>_assign == <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">);</span>
-<span id="L414" class="LineNr">414 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L415" class="LineNr">415 </span>    string rhs = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L416" class="LineNr">416 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L417" class="LineNr">417 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L418" class="LineNr">418 </span>      <a href='003trace.cc.html#L174'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L419" class="LineNr">419 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L420" class="LineNr">420 </span>    <span class="Delimiter">}</span>
-<span id="L421" class="LineNr">421 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>rhs<span class="Delimiter">)</span> &amp;&amp; !is_noninteger<span class="Delimiter">(</span>rhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L422" class="LineNr">422 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L423" class="LineNr">423 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' can't contain non-number &quot;</span> &lt;&lt; rhs &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L424" class="LineNr">424 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L425" class="LineNr">425 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L426" class="LineNr">426 </span>    <span class="Delimiter">}</span>
-<span id="L427" class="LineNr">427 </span>    <span class="Normal">double</span> value = <a href='015literal_noninteger.cc.html#L26'>to_double</a><span class="Delimiter">(</span>rhs<span class="Delimiter">);</span>
-<span id="L428" class="LineNr">428 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>locations_checked<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">))</span>
-<span id="L429" class="LineNr">429 </span>      <a href='003trace.cc.html#L174'>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;duplicate expectation for location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L430" class="LineNr">430 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; <a href='043space.cc.html#L80'>address</a> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L431" class="LineNr">431 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L432" class="LineNr">432 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L433" class="LineNr">433 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L434" class="LineNr">434 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L435" class="LineNr">435 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L436" class="LineNr">436 </span>    <span class="Delimiter">}</span>
-<span id="L437" class="LineNr">437 </span>    locations_checked<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a><span class="Delimiter">);</span>
-<span id="L438" class="LineNr">438 </span>  <span class="Delimiter">}</span>
-<span id="L439" class="LineNr">439 </span><span class="Delimiter">}</span>
-<span id="L440" class="LineNr">440 </span>
-<span id="L441" class="LineNr">441 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L59'>check_type</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; lhs<span class="Delimiter">,</span> istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L442" class="LineNr">442 </span>  reagent x<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
-<span id="L443" class="LineNr">443 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &amp;&amp; is_mu_character<span class="Delimiter">(</span><a href='032array.cc.html#L379'>array_element</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L444" class="LineNr">444 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
-<span id="L445" class="LineNr">445 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L446" class="LineNr">446 </span>    string _assign = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L447" class="LineNr">447 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>_assign<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L448" class="LineNr">448 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L449" class="LineNr">449 </span>      <a href='003trace.cc.html#L174'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L203'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L450" class="LineNr">450 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L451" class="LineNr">451 </span>    <span class="Delimiter">}</span>
-<span id="L452" class="LineNr">452 </span>    assert<span class="Delimiter">(</span>_assign == <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">);</span>
-<span id="L453" class="LineNr">453 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L454" class="LineNr">454 </span>    string literal = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L455" class="LineNr">455 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>literal<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L456" class="LineNr">456 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L457" class="LineNr">457 </span>      <a href='003trace.cc.html#L174'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L203'>end</a> of file (3)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L458" class="LineNr">458 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L459" class="LineNr">459 </span>    <span class="Delimiter">}</span>
-<span id="L460" class="LineNr">460 </span>    <span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = x<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
-<span id="L461" class="LineNr">461 </span>    <span class="Comment">// exclude quoting brackets</span>
-<span id="L462" class="LineNr">462 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*literal<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L463" class="LineNr">463 </span>      <a href='003trace.cc.html#L174'>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;array:character types inside 'memory-should-contain' can only be compared with text literals surrounded by [], not '&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L464" class="LineNr">464 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L465" class="LineNr">465 </span>    <span class="Delimiter">}</span>
-<span id="L466" class="LineNr">466 </span>    literal<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>literal<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>
-<span id="L467" class="LineNr">467 </span>    assert<span class="Delimiter">(</span>*--literal<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> == <span class="Constant">']'</span><span class="Delimiter">);</span>  literal<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>--literal<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
-<span id="L468" class="LineNr">468 </span>    check_mu_text<span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a><span class="Delimiter">,</span> literal<span class="Delimiter">);</span>
-<span id="L469" class="LineNr">469 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L470" class="LineNr">470 </span>  <span class="Delimiter">}</span>
-<span id="L471" class="LineNr">471 </span>  <span class="Comment">// End Scenario Type Special-cases</span>
-<span id="L472" class="LineNr">472 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;don't know how to check memory for '&quot;</span> &lt;&lt; lhs &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">}</span>
-<span id="L474" class="LineNr">474 </span>
-<span id="L475" class="LineNr">475 </span><span class="Normal">void</span> check_mu_text<span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; literal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L476" class="LineNr">476 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking text length at &quot;</span> &lt;&lt; start &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L477" class="LineNr">477 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L395'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
-<span id="L478" class="LineNr">478 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032array.cc.html#L395'>array_length</a> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L479" class="LineNr">479 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L480" class="LineNr">480 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location '&quot;</span> &lt;&lt; start &lt;&lt; <span class="Constant">&quot;' to contain length &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; of text [&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;] but saw &quot;</span> &lt;&lt; <a href='032array.cc.html#L395'>array_length</a> &lt;&lt; <span class="Constant">&quot; (for text [&quot;</span> &lt;&lt; <a href='038new_text.cc.html#L148'>read_mu_characters</a><span class="Delimiter">(</span>start+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <a href='032array.cc.html#L395'>array_length</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;])</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L481" class="LineNr">481 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L482" class="LineNr">482 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L483" class="LineNr">483 </span>  <span class="Delimiter">}</span>
-<span id="L484" class="LineNr">484 </span>  <span class="Normal">int</span> curr = start+<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// now skip length</span>
-<span id="L485" class="LineNr">485 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L486" class="LineNr">486 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; curr+i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L487" class="LineNr">487 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L488" class="LineNr">488 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L489" class="LineNr">489 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L490" class="LineNr">490 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L491" class="LineNr">491 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L492" class="LineNr">492 </span>    <span class="Delimiter">}</span>
-<span id="L493" class="LineNr">493 </span>  <span class="Delimiter">}</span>
-<span id="L494" class="LineNr">494 </span><span class="Delimiter">}</span>
-<span id="L495" class="LineNr">495 </span>
-<span id="L496" class="LineNr">496 </span><span class="Delimiter">:(scenario memory_check_multiple)</span>
-<span id="L497" class="LineNr">497 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L498" class="LineNr">498 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L499" class="LineNr">499 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L500" class="LineNr">500 </span>  memory-should-contain [
-<span id="L501" class="LineNr">501 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
-<span id="L502" class="LineNr">502 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
-<span id="L503" class="LineNr">503 </span>  ]
-<span id="L504" class="LineNr">504 </span>]
-<span id="L505" class="LineNr">505 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: duplicate expectation for location '1'</span>
-<span id="L506" class="LineNr">506 </span>
-<span id="L507" class="LineNr">507 </span><span class="Delimiter">:(scenario memory_check_mu_text_length)</span>
-<span id="L508" class="LineNr">508 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L509" class="LineNr">509 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L510" class="LineNr">510 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L511" class="LineNr">511 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L512" class="LineNr">512 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
-<span id="L513" class="LineNr">513 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
-<span id="L514" class="LineNr">514 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
-<span id="L515" class="LineNr">515 </span>  memory-should-contain [
-<span id="L516" class="LineNr">516 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span>[ab]
-<span id="L517" class="LineNr">517 </span>  ]
-<span id="L518" class="LineNr">518 </span>]
-<span id="L519" class="LineNr">519 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected location '1' to contain length 2 of text [ab] but saw 3 (for text [abc])</span>
-<span id="L520" class="LineNr">520 </span>
-<span id="L521" class="LineNr">521 </span><span class="Delimiter">:(scenario memory_check_mu_text)</span>
-<span id="L522" class="LineNr">522 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L523" class="LineNr">523 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L524" class="LineNr">524 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
-<span id="L525" class="LineNr">525 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
-<span id="L526" class="LineNr">526 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
-<span id="L527" class="LineNr">527 </span>  memory-should-contain [
-<span id="L528" class="LineNr">528 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span>[abc]
-<span id="L529" class="LineNr">529 </span>  ]
-<span id="L530" class="LineNr">530 </span>]
-<span id="L531" class="LineNr">531 </span><span class="traceContains">+run: checking text length at 1</span>
-<span id="L532" class="LineNr">532 </span><span class="traceContains">+run: checking location 2</span>
-<span id="L533" class="LineNr">533 </span><span class="traceContains">+run: checking location 3</span>
-<span id="L534" class="LineNr">534 </span><span class="traceContains">+run: checking location 4</span>
-<span id="L535" class="LineNr">535 </span>
-<span id="L536" class="LineNr">536 </span><span class="Delimiter">:(scenario memory_invalid_string_check)</span>
-<span id="L537" class="LineNr">537 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L538" class="LineNr">538 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L539" class="LineNr">539 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L540" class="LineNr">540 </span>  memory-should-contain [
-<span id="L541" class="LineNr">541 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span>[abc]
-<span id="L542" class="LineNr">542 </span>  ]
-<span id="L543" class="LineNr">543 </span>]
-<span id="L544" class="LineNr">544 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: location '1' can't contain non-number [abc]</span>
-<span id="L545" class="LineNr">545 </span>
-<span id="L546" class="LineNr">546 </span><span class="Delimiter">:(scenario memory_invalid_string_check2)</span>
-<span id="L547" class="LineNr">547 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L548" class="LineNr">548 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L549" class="LineNr">549 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L550" class="LineNr">550 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
-<span id="L551" class="LineNr">551 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
-<span id="L552" class="LineNr">552 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
-<span id="L553" class="LineNr">553 </span>  memory-should-contain [
-<span id="L554" class="LineNr">554 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span><span class="Constant">0</span>
-<span id="L555" class="LineNr">555 </span>  ]
-<span id="L556" class="LineNr">556 </span>]
-<span id="L557" class="LineNr">557 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: array:character types inside 'memory-should-contain' can only be compared with text literals surrounded by [], not '0'</span>
-<span id="L558" class="LineNr">558 </span>
-<span id="L559" class="LineNr">559 </span><span class="Delimiter">:(scenario memory_check_with_comment)</span>
-<span id="L560" class="LineNr">560 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L561" class="LineNr">561 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L562" class="LineNr">562 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L563" class="LineNr">563 </span>  memory-should-contain [
-<span id="L564" class="LineNr">564 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">34</span>  <span class="Comment"># comment</span>
-<span id="L565" class="LineNr">565 </span>  ]
-<span id="L566" class="LineNr">566 </span>]
-<span id="L567" class="LineNr">567 </span><span class="traceAbsent">-error: location 1 can't contain non-number 34  # comment</span>
-<span id="L568" class="LineNr">568 </span><span class="Comment"># but there'll be an error signalled by memory-should-contain</span>
-<span id="L569" class="LineNr">569 </span>
-<span id="L570" class="LineNr">570 </span><span class="Comment">//: 'trace-should-contain' is like the '+' lines in our scenarios so far</span>
-<span id="L571" class="LineNr">571 </span><span class="Comment">// Like runs of contiguous '+' lines, order is important. The trace checks</span>
-<span id="L572" class="LineNr">572 </span><span class="Comment">// that the lines are present *and* in the specified sequence. (There can be</span>
-<span id="L573" class="LineNr">573 </span><span class="Comment">// other lines in between.)</span>
-<span id="L574" class="LineNr">574 </span>
-<span id="L575" class="LineNr">575 </span><span class="Delimiter">:(scenario trace_check_fails)</span>
-<span id="L576" class="LineNr">576 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L577" class="LineNr">577 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L578" class="LineNr">578 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L579" class="LineNr">579 </span>  trace-should-contain [
-<span id="L580" class="LineNr">580 </span>    <span class="Normal">a</span>: b
-<span id="L581" class="LineNr">581 </span>    <span class="Normal">a</span>: d
-<span id="L582" class="LineNr">582 </span>  ]
-<span id="L583" class="LineNr">583 </span>]
-<span id="L584" class="LineNr">584 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: missing [b] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L585" class="LineNr">585 </span>
-<span id="L586" class="LineNr">586 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L587" class="LineNr">587 </span>TRACE_SHOULD_CONTAIN<span class="Delimiter">,</span>
-<span id="L588" class="LineNr">588 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L589" class="LineNr">589 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;trace-should-contain&quot;</span><span class="Delimiter">,</span> TRACE_SHOULD_CONTAIN<span class="Delimiter">);</span>
-<span id="L590" class="LineNr">590 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L407" class="LineNr">407 </span>    <span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = to_integer<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
+<span id="L408" class="LineNr">408 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L409" class="LineNr">409 </span>    string _assign<span class="Delimiter">;</span>  in &gt;&gt; _assign<span class="Delimiter">;</span>  assert<span class="Delimiter">(</span>_assign == <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">);</span>
+<span id="L410" class="LineNr">410 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L411" class="LineNr">411 </span>    string rhs = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L412" class="LineNr">412 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>rhs<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L413" class="LineNr">413 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L414" class="LineNr">414 </span>      <a href='003trace.cc.html#L197'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L415" class="LineNr">415 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L416" class="LineNr">416 </span>    <span class="Delimiter">}</span>
+<span id="L417" class="LineNr">417 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_integer<span class="Delimiter">(</span>rhs<span class="Delimiter">)</span> &amp;&amp; !is_noninteger<span class="Delimiter">(</span>rhs<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L418" class="LineNr">418 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L419" class="LineNr">419 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' can't contain non-number &quot;</span> &lt;&lt; rhs &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L420" class="LineNr">420 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L421" class="LineNr">421 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L422" class="LineNr">422 </span>    <span class="Delimiter">}</span>
+<span id="L423" class="LineNr">423 </span>    <span class="Normal">double</span> value = <a href='015literal_noninteger.cc.html#L26'>to_double</a><span class="Delimiter">(</span>rhs<span class="Delimiter">);</span>
+<span id="L424" class="LineNr">424 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>locations_checked<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">))</span>
+<span id="L425" class="LineNr">425 </span>      <a href='003trace.cc.html#L197'>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;duplicate expectation for location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L426" class="LineNr">426 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; <a href='043space.cc.html#L101'>address</a> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L427" class="LineNr">427 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">)</span> != value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L428" class="LineNr">428 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L429" class="LineNr">429 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location '&quot;</span> &lt;&lt; address &lt;&lt; <span class="Constant">&quot;' to contain &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span>value<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L430" class="LineNr">430 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L431" class="LineNr">431 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span>    <span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span>    locations_checked<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a><span class="Delimiter">);</span>
+<span id="L434" class="LineNr">434 </span>  <span class="Delimiter">}</span>
+<span id="L435" class="LineNr">435 </span><span class="Delimiter">}</span>
+<span id="L436" class="LineNr">436 </span>
+<span id="L437" class="LineNr">437 </span><span class="Normal">void</span> <a href='046check_type_by_name.cc.html#L76'>check_type</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; lhs<span class="Delimiter">,</span> istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L438" class="LineNr">438 </span>  reagent x<span class="Delimiter">(</span>lhs<span class="Delimiter">);</span>
+<span id="L439" class="LineNr">439 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_array<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &amp;&amp; is_mu_character<span class="Delimiter">(</span><a href='032array.cc.html#L303'>array_element</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L440" class="LineNr">440 </span>    x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>to_integer<span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L441" class="LineNr">441 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L442" class="LineNr">442 </span>    string _assign = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L443" class="LineNr">443 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>_assign<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L444" class="LineNr">444 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L445" class="LineNr">445 </span>      <a href='003trace.cc.html#L197'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L226'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L446" class="LineNr">446 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L447" class="LineNr">447 </span>    <span class="Delimiter">}</span>
+<span id="L448" class="LineNr">448 </span>    assert<span class="Delimiter">(</span>_assign == <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">);</span>
+<span id="L449" class="LineNr">449 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L450" class="LineNr">450 </span>    string literal = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L451" class="LineNr">451 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>literal<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L452" class="LineNr">452 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L453" class="LineNr">453 </span>      <a href='003trace.cc.html#L197'>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;incomplete 'memory-should-contain' block at <a href='003trace.cc.html#L226'>end</a> of file (3)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L454" class="LineNr">454 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L455" class="LineNr">455 </span>    <span class="Delimiter">}</span>
+<span id="L456" class="LineNr">456 </span>    <span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = x<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L457" class="LineNr">457 </span>    <span class="Comment">// exclude quoting brackets</span>
+<span id="L458" class="LineNr">458 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*literal<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L459" class="LineNr">459 </span>      <a href='003trace.cc.html#L197'>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;array:character types inside 'memory-should-contain' can only be compared with text literals surrounded by [], not '&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L460" class="LineNr">460 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L461" class="LineNr">461 </span>    <span class="Delimiter">}</span>
+<span id="L462" class="LineNr">462 </span>    literal<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>literal<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>
+<span id="L463" class="LineNr">463 </span>    assert<span class="Delimiter">(</span>*--literal<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> == <span class="Constant">']'</span><span class="Delimiter">);</span>  literal<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>--literal<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
+<span id="L464" class="LineNr">464 </span>    check_mu_text<span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a><span class="Delimiter">,</span> literal<span class="Delimiter">);</span>
+<span id="L465" class="LineNr">465 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L466" class="LineNr">466 </span>  <span class="Delimiter">}</span>
+<span id="L467" class="LineNr">467 </span>  <span class="Comment">// End Scenario Type Special-cases</span>
+<span id="L468" class="LineNr">468 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;don't know how to check memory for '&quot;</span> &lt;&lt; lhs &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L469" class="LineNr">469 </span><span class="Delimiter">}</span>
+<span id="L470" class="LineNr">470 </span>
+<span id="L471" class="LineNr">471 </span><span class="Normal">void</span> check_mu_text<span class="Delimiter">(</span><span class="Normal">int</span> start<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; literal<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L472" class="LineNr">472 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking text length at &quot;</span> &lt;&lt; start &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L473" class="LineNr">473 </span>  <span class="Normal">int</span> <a href='032array.cc.html#L319'>array_length</a> = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> start<span class="Delimiter">));</span>
+<span id="L474" class="LineNr">474 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='032array.cc.html#L319'>array_length</a> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L475" class="LineNr">475 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L476" class="LineNr">476 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location '&quot;</span> &lt;&lt; start &lt;&lt; <span class="Constant">&quot;' to contain length &quot;</span> &lt;&lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; of text [&quot;</span> &lt;&lt; literal &lt;&lt; <span class="Constant">&quot;] but saw &quot;</span> &lt;&lt; <a href='032array.cc.html#L319'>array_length</a> &lt;&lt; <span class="Constant">&quot; (for text [&quot;</span> &lt;&lt; <a href='038new_text.cc.html#L149'>read_mu_characters</a><span class="Delimiter">(</span>start+<span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> <a href='032array.cc.html#L319'>array_length</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;])</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L477" class="LineNr">477 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L478" class="LineNr">478 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L479" class="LineNr">479 </span>  <span class="Delimiter">}</span>
+<span id="L480" class="LineNr">480 </span>  <span class="Normal">int</span> curr = start+<span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// now skip length</span>
+<span id="L481" class="LineNr">481 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>literal<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L482" class="LineNr">482 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking location &quot;</span> &lt;&lt; curr+i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L483" class="LineNr">483 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">)</span> != literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L484" class="LineNr">484 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L485" class="LineNr">485 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected location &quot;</span> &lt;&lt; <span class="Delimiter">(</span>curr+i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to contain &quot;</span> &lt;&lt; literal<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but saw &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr+i<span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L486" class="LineNr">486 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L487" class="LineNr">487 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>    <span class="Delimiter">}</span>
+<span id="L489" class="LineNr">489 </span>  <span class="Delimiter">}</span>
+<span id="L490" class="LineNr">490 </span><span class="Delimiter">}</span>
+<span id="L491" class="LineNr">491 </span>
+<span id="L492" class="LineNr">492 </span><span class="Delimiter">:(scenario memory_check_multiple)</span>
+<span id="L493" class="LineNr">493 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L494" class="LineNr">494 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L495" class="LineNr">495 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L496" class="LineNr">496 </span>  memory-should-contain [
+<span id="L497" class="LineNr">497 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
+<span id="L498" class="LineNr">498 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">0</span>
+<span id="L499" class="LineNr">499 </span>  ]
+<span id="L500" class="LineNr">500 </span>]
+<span id="L501" class="LineNr">501 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: duplicate expectation for location '1'</span>
+<span id="L502" class="LineNr">502 </span>
+<span id="L503" class="LineNr">503 </span><span class="Delimiter">:(scenario memory_check_mu_text_length)</span>
+<span id="L504" class="LineNr">504 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L505" class="LineNr">505 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L506" class="LineNr">506 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L507" class="LineNr">507 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L508" class="LineNr">508 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
+<span id="L509" class="LineNr">509 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
+<span id="L510" class="LineNr">510 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
+<span id="L511" class="LineNr">511 </span>  memory-should-contain [
+<span id="L512" class="LineNr">512 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span>[ab]
+<span id="L513" class="LineNr">513 </span>  ]
+<span id="L514" class="LineNr">514 </span>]
+<span id="L515" class="LineNr">515 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected location '1' to contain length 2 of text [ab] but saw 3 (for text [abc])</span>
+<span id="L516" class="LineNr">516 </span>
+<span id="L517" class="LineNr">517 </span><span class="Delimiter">:(scenario memory_check_mu_text)</span>
+<span id="L518" class="LineNr">518 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L519" class="LineNr">519 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L520" class="LineNr">520 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
+<span id="L521" class="LineNr">521 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
+<span id="L522" class="LineNr">522 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
+<span id="L523" class="LineNr">523 </span>  memory-should-contain [
+<span id="L524" class="LineNr">524 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span>[abc]
+<span id="L525" class="LineNr">525 </span>  ]
+<span id="L526" class="LineNr">526 </span>]
+<span id="L527" class="LineNr">527 </span><span class="traceContains">+run: checking text length at 1</span>
+<span id="L528" class="LineNr">528 </span><span class="traceContains">+run: checking location 2</span>
+<span id="L529" class="LineNr">529 </span><span class="traceContains">+run: checking location 3</span>
+<span id="L530" class="LineNr">530 </span><span class="traceContains">+run: checking location 4</span>
+<span id="L531" class="LineNr">531 </span>
+<span id="L532" class="LineNr">532 </span><span class="Delimiter">:(scenario memory_invalid_string_check)</span>
+<span id="L533" class="LineNr">533 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L534" class="LineNr">534 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L535" class="LineNr">535 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L536" class="LineNr">536 </span>  memory-should-contain [
+<span id="L537" class="LineNr">537 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span>[abc]
+<span id="L538" class="LineNr">538 </span>  ]
+<span id="L539" class="LineNr">539 </span>]
+<span id="L540" class="LineNr">540 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: location '1' can't contain non-number [abc]</span>
+<span id="L541" class="LineNr">541 </span>
+<span id="L542" class="LineNr">542 </span><span class="Delimiter">:(scenario memory_invalid_string_check2)</span>
+<span id="L543" class="LineNr">543 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L544" class="LineNr">544 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L545" class="LineNr">545 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L546" class="LineNr">546 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">97</span>  <span class="Comment"># 'a'</span>
+<span id="L547" class="LineNr">547 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">98</span>  <span class="Comment"># 'b'</span>
+<span id="L548" class="LineNr">548 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">99</span>  <span class="Comment"># 'c'</span>
+<span id="L549" class="LineNr">549 </span>  memory-should-contain [
+<span id="L550" class="LineNr">550 </span>    <span class="Constant">1</span>:array:character<span class="Special"> &lt;- </span><span class="Constant">0</span>
+<span id="L551" class="LineNr">551 </span>  ]
+<span id="L552" class="LineNr">552 </span>]
+<span id="L553" class="LineNr">553 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: array:character types inside 'memory-should-contain' can only be compared with text literals surrounded by [], not '0'</span>
+<span id="L554" class="LineNr">554 </span>
+<span id="L555" class="LineNr">555 </span><span class="Delimiter">:(scenario memory_check_with_comment)</span>
+<span id="L556" class="LineNr">556 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L557" class="LineNr">557 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L558" class="LineNr">558 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L559" class="LineNr">559 </span>  memory-should-contain [
+<span id="L560" class="LineNr">560 </span>    <span class="Constant">1</span><span class="Special"> &lt;- </span><span class="Constant">34</span>  <span class="Comment"># comment</span>
+<span id="L561" class="LineNr">561 </span>  ]
+<span id="L562" class="LineNr">562 </span>]
+<span id="L563" class="LineNr">563 </span><span class="traceAbsent">-error: location 1 can't contain non-number 34  # comment</span>
+<span id="L564" class="LineNr">564 </span><span class="Comment"># but there'll be an error signalled by memory-should-contain</span>
+<span id="L565" class="LineNr">565 </span>
+<span id="L566" class="LineNr">566 </span><span class="Comment">//: 'trace-should-contain' is like the '+' lines in our scenarios so far</span>
+<span id="L567" class="LineNr">567 </span><span class="Comment">// Like runs of contiguous '+' lines, order is important. The trace checks</span>
+<span id="L568" class="LineNr">568 </span><span class="Comment">// that the lines are present *and* in the specified sequence. (There can be</span>
+<span id="L569" class="LineNr">569 </span><span class="Comment">// other lines in between.)</span>
+<span id="L570" class="LineNr">570 </span>
+<span id="L571" class="LineNr">571 </span><span class="Delimiter">:(scenario trace_check_fails)</span>
+<span id="L572" class="LineNr">572 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L573" class="LineNr">573 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L574" class="LineNr">574 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L575" class="LineNr">575 </span>  trace-should-contain [
+<span id="L576" class="LineNr">576 </span>    <span class="Normal">a</span>: b
+<span id="L577" class="LineNr">577 </span>    <span class="Normal">a</span>: d
+<span id="L578" class="LineNr">578 </span>  ]
+<span id="L579" class="LineNr">579 </span>]
+<span id="L580" class="LineNr">580 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: missing [b] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L581" class="LineNr">581 </span>
+<span id="L582" class="LineNr">582 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L583" class="LineNr">583 </span>TRACE_SHOULD_CONTAIN<span class="Delimiter">,</span>
+<span id="L584" class="LineNr">584 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L585" class="LineNr">585 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;trace-should-contain&quot;</span><span class="Delimiter">,</span> TRACE_SHOULD_CONTAIN<span class="Delimiter">);</span>
+<span id="L586" class="LineNr">586 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L587" class="LineNr">587 </span><span class="Normal">case</span> TRACE_SHOULD_CONTAIN: <span class="Delimiter">{</span>
+<span id="L588" class="LineNr">588 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L589" class="LineNr">589 </span><span class="Delimiter">}</span>
+<span id="L590" class="LineNr">590 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L591" class="LineNr">591 </span><span class="Normal">case</span> TRACE_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L592" class="LineNr">592 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L593" class="LineNr">593 </span><span class="Delimiter">}</span>
-<span id="L594" class="LineNr">594 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L595" class="LineNr">595 </span><span class="Normal">case</span> TRACE_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L596" class="LineNr">596 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L597" class="LineNr">597 </span>  check_trace<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>name<span class="Delimiter">);</span>
-<span id="L598" class="LineNr">598 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L599" class="LineNr">599 </span><span class="Delimiter">}</span>
-<span id="L600" class="LineNr">600 </span>
-<span id="L601" class="LineNr">601 </span><span class="Delimiter">:(code)</span>
-<span id="L602" class="LineNr">602 </span><span class="Comment">// simplified version of check_trace_contents() that emits errors rather</span>
-<span id="L603" class="LineNr">603 </span><span class="Comment">// than just printing to stderr</span>
-<span id="L604" class="LineNr">604 </span><span class="Normal">void</span> check_trace<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L605" class="LineNr">605 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">();</span>
-<span id="L606" class="LineNr">606 </span>  vector&lt;trace_line&gt; expected_lines = parse_trace<span class="Delimiter">(</span>expected<span class="Delimiter">);</span>
-<span id="L607" class="LineNr">607 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L608" class="LineNr">608 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L609" class="LineNr">609 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L610" class="LineNr">610 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L611" class="LineNr">611 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>contents != <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L612" class="LineNr">612 </span>    <span class="Comment">// match</span>
-<span id="L613" class="LineNr">613 </span>    ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L614" class="LineNr">614 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L615" class="LineNr">615 </span>  <span class="Delimiter">}</span>
-<span id="L616" class="LineNr">616 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L617" class="LineNr">617 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;missing [&quot;</span> &lt;&lt; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>contents &lt;&lt; <span class="Constant">&quot;] &quot;</span>
-<span id="L618" class="LineNr">618 </span>        &lt;&lt; <span class="Constant">&quot;in <a href='003trace.cc.html#L167'>trace</a> with label '&quot;</span> &lt;&lt; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L619" class="LineNr">619 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span>
-<span id="L620" class="LineNr">620 </span>    <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label<span class="Delimiter">);</span>
-<span id="L621" class="LineNr">621 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L622" class="LineNr">622 </span><span class="Delimiter">}</span>
-<span id="L623" class="LineNr">623 </span>
-<span id="L624" class="LineNr">624 </span>vector&lt;trace_line&gt; parse_trace<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L625" class="LineNr">625 </span>  vector&lt;string&gt; buf = <a href='003trace.cc.html#L345'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L626" class="LineNr">626 </span>  vector&lt;trace_line&gt; result<span class="Delimiter">;</span>
-<span id="L627" class="LineNr">627 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>buf<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L628" class="LineNr">628 </span>    buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L629" class="LineNr">629 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L630" class="LineNr">630 </span>    <span class="Normal">int</span> delim = buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>find<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
-<span id="L631" class="LineNr">631 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>delim == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L632" class="LineNr">632 </span>      <a href='003trace.cc.html#L174'>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;lines in 'trace-should-contain' should be of the form &lt;label&gt;: &lt;contents&gt;. Both parts are required.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L633" class="LineNr">633 </span>      result<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L634" class="LineNr">634 </span>      <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L635" class="LineNr">635 </span>    <span class="Delimiter">}</span>
-<span id="L636" class="LineNr">636 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span><a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> delim<span class="Delimiter">)),</span>  <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>substr<span class="Delimiter">(</span>delim+<span class="Constant">2</span><span class="Delimiter">))));</span>
-<span id="L637" class="LineNr">637 </span>  <span class="Delimiter">}</span>
-<span id="L638" class="LineNr">638 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L639" class="LineNr">639 </span><span class="Delimiter">}</span>
-<span id="L640" class="LineNr">640 </span>
-<span id="L641" class="LineNr">641 </span><span class="Delimiter">:(scenario trace_check_fails_in_nonfirst_line)</span>
-<span id="L642" class="LineNr">642 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L643" class="LineNr">643 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L644" class="LineNr">644 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L645" class="LineNr">645 </span>  run [
-<span id="L646" class="LineNr">646 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
+<span id="L592" class="LineNr">592 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L593" class="LineNr">593 </span>  check_trace<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>name<span class="Delimiter">);</span>
+<span id="L594" class="LineNr">594 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L595" class="LineNr">595 </span><span class="Delimiter">}</span>
+<span id="L596" class="LineNr">596 </span>
+<span id="L597" class="LineNr">597 </span><span class="Delimiter">:(code)</span>
+<span id="L598" class="LineNr">598 </span><span class="Comment">// simplified version of check_trace_contents() that emits errors rather</span>
+<span id="L599" class="LineNr">599 </span><span class="Comment">// than just printing to stderr</span>
+<span id="L600" class="LineNr">600 </span><span class="Normal">void</span> check_trace<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L601" class="LineNr">601 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">();</span>
+<span id="L602" class="LineNr">602 </span>  vector&lt;trace_line&gt; expected_lines = parse_trace<span class="Delimiter">(</span>expected<span class="Delimiter">);</span>
+<span id="L603" class="LineNr">603 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L604" class="LineNr">604 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L605" class="LineNr">605 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L606" class="LineNr">606 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label != p<span class="Delimiter">-&gt;</span>label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L607" class="LineNr">607 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>contents != <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L608" class="LineNr">608 </span>    <span class="Comment">// match</span>
+<span id="L609" class="LineNr">609 </span>    ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L610" class="LineNr">610 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L611" class="LineNr">611 </span>  <span class="Delimiter">}</span>
+<span id="L612" class="LineNr">612 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L613" class="LineNr">613 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;missing [&quot;</span> &lt;&lt; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>contents &lt;&lt; <span class="Constant">&quot;] &quot;</span>
+<span id="L614" class="LineNr">614 </span>        &lt;&lt; <span class="Constant">&quot;in <a href='003trace.cc.html#L190'>trace</a> with label '&quot;</span> &lt;&lt; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L615" class="LineNr">615 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span>
+<span id="L616" class="LineNr">616 </span>    <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>label<span class="Delimiter">);</span>
+<span id="L617" class="LineNr">617 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L618" class="LineNr">618 </span><span class="Delimiter">}</span>
+<span id="L619" class="LineNr">619 </span>
+<span id="L620" class="LineNr">620 </span>vector&lt;trace_line&gt; parse_trace<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L621" class="LineNr">621 </span>  vector&lt;string&gt; buf = <a href='003trace.cc.html#L367'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L622" class="LineNr">622 </span>  vector&lt;trace_line&gt; result<span class="Delimiter">;</span>
+<span id="L623" class="LineNr">623 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>buf<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L624" class="LineNr">624 </span>    buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L625" class="LineNr">625 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L626" class="LineNr">626 </span>    <span class="Normal">int</span> delim = buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>find<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
+<span id="L627" class="LineNr">627 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>delim == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L628" class="LineNr">628 </span>      <a href='003trace.cc.html#L197'>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;lines in 'trace-should-contain' should be of the form &lt;label&gt;: &lt;contents&gt;. Both parts are required.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L629" class="LineNr">629 </span>      result<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L630" class="LineNr">630 </span>      <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L631" class="LineNr">631 </span>    <span class="Delimiter">}</span>
+<span id="L632" class="LineNr">632 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span><a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> delim<span class="Delimiter">)),</span>  <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span>buf<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>substr<span class="Delimiter">(</span>delim+<span class="Constant">2</span><span class="Delimiter">))));</span>
+<span id="L633" class="LineNr">633 </span>  <span class="Delimiter">}</span>
+<span id="L634" class="LineNr">634 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L635" class="LineNr">635 </span><span class="Delimiter">}</span>
+<span id="L636" class="LineNr">636 </span>
+<span id="L637" class="LineNr">637 </span><span class="Delimiter">:(scenario trace_check_fails_in_nonfirst_line)</span>
+<span id="L638" class="LineNr">638 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L639" class="LineNr">639 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L640" class="LineNr">640 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L641" class="LineNr">641 </span>  run [
+<span id="L642" class="LineNr">642 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
+<span id="L643" class="LineNr">643 </span>  ]
+<span id="L644" class="LineNr">644 </span>  trace-should-contain [
+<span id="L645" class="LineNr">645 </span>    <span class="Normal">a</span>: b
+<span id="L646" class="LineNr">646 </span>    <span class="Normal">a</span>: d
 <span id="L647" class="LineNr">647 </span>  ]
-<span id="L648" class="LineNr">648 </span>  trace-should-contain [
-<span id="L649" class="LineNr">649 </span>    <span class="Normal">a</span>: b
-<span id="L650" class="LineNr">650 </span>    <span class="Normal">a</span>: d
-<span id="L651" class="LineNr">651 </span>  ]
-<span id="L652" class="LineNr">652 </span>]
-<span id="L653" class="LineNr">653 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: missing [d] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L654" class="LineNr">654 </span>
-<span id="L655" class="LineNr">655 </span><span class="Delimiter">:(scenario trace_check_passes_silently)</span>
-<span id="L656" class="LineNr">656 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L657" class="LineNr">657 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L658" class="LineNr">658 </span>  run [
-<span id="L659" class="LineNr">659 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
-<span id="L660" class="LineNr">660 </span>  ]
-<span id="L661" class="LineNr">661 </span>  trace-should-contain [
-<span id="L662" class="LineNr">662 </span>    <span class="Normal">a</span>: b
-<span id="L663" class="LineNr">663 </span>  ]
-<span id="L664" class="LineNr">664 </span>]
-<span id="L665" class="LineNr">665 </span><span class="traceAbsent">-error: missing [b] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L666" class="LineNr">666 </span>$error: <span class="Constant">0</span>
+<span id="L648" class="LineNr">648 </span>]
+<span id="L649" class="LineNr">649 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: missing [d] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L650" class="LineNr">650 </span>
+<span id="L651" class="LineNr">651 </span><span class="Delimiter">:(scenario trace_check_passes_silently)</span>
+<span id="L652" class="LineNr">652 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L653" class="LineNr">653 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L654" class="LineNr">654 </span>  run [
+<span id="L655" class="LineNr">655 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
+<span id="L656" class="LineNr">656 </span>  ]
+<span id="L657" class="LineNr">657 </span>  trace-should-contain [
+<span id="L658" class="LineNr">658 </span>    <span class="Normal">a</span>: b
+<span id="L659" class="LineNr">659 </span>  ]
+<span id="L660" class="LineNr">660 </span>]
+<span id="L661" class="LineNr">661 </span><span class="traceAbsent">-error: missing [b] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L662" class="LineNr">662 </span>$error: <span class="Constant">0</span>
+<span id="L663" class="LineNr">663 </span>
+<span id="L664" class="LineNr">664 </span><span class="Comment">//: 'trace-should-not-contain' is like the '-' lines in our scenarios so far</span>
+<span id="L665" class="LineNr">665 </span><span class="Comment">//: Each trace line is separately checked for absense. Order is *not*</span>
+<span id="L666" class="LineNr">666 </span><span class="Comment">//: important, so you can't say things like &quot;B should not exist after A.&quot;</span>
 <span id="L667" class="LineNr">667 </span>
-<span id="L668" class="LineNr">668 </span><span class="Comment">//: 'trace-should-not-contain' is like the '-' lines in our scenarios so far</span>
-<span id="L669" class="LineNr">669 </span><span class="Comment">//: Each trace line is separately checked for absense. Order is *not*</span>
-<span id="L670" class="LineNr">670 </span><span class="Comment">//: important, so you can't say things like &quot;B should not exist after A.&quot;</span>
-<span id="L671" class="LineNr">671 </span>
-<span id="L672" class="LineNr">672 </span><span class="Delimiter">:(scenario trace_negative_check_fails)</span>
-<span id="L673" class="LineNr">673 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L674" class="LineNr">674 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L675" class="LineNr">675 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L676" class="LineNr">676 </span>  run [
-<span id="L677" class="LineNr">677 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
-<span id="L678" class="LineNr">678 </span>  ]
-<span id="L679" class="LineNr">679 </span>  trace-should-<span class="Normal">not</span>-contain [
-<span id="L680" class="LineNr">680 </span>    <span class="Normal">a</span>: b
-<span id="L681" class="LineNr">681 </span>  ]
-<span id="L682" class="LineNr">682 </span>]
-<span id="L683" class="LineNr">683 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: unexpected [b] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L684" class="LineNr">684 </span>
-<span id="L685" class="LineNr">685 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L686" class="LineNr">686 </span>TRACE_SHOULD_NOT_CONTAIN<span class="Delimiter">,</span>
-<span id="L687" class="LineNr">687 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L688" class="LineNr">688 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;trace-should-not-contain&quot;</span><span class="Delimiter">,</span> TRACE_SHOULD_NOT_CONTAIN<span class="Delimiter">);</span>
-<span id="L689" class="LineNr">689 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L668" class="LineNr">668 </span><span class="Delimiter">:(scenario trace_negative_check_fails)</span>
+<span id="L669" class="LineNr">669 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L670" class="LineNr">670 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L671" class="LineNr">671 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L672" class="LineNr">672 </span>  run [
+<span id="L673" class="LineNr">673 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [b]
+<span id="L674" class="LineNr">674 </span>  ]
+<span id="L675" class="LineNr">675 </span>  trace-should-<span class="Normal">not</span>-contain [
+<span id="L676" class="LineNr">676 </span>    <span class="Normal">a</span>: b
+<span id="L677" class="LineNr">677 </span>  ]
+<span id="L678" class="LineNr">678 </span>]
+<span id="L679" class="LineNr">679 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: unexpected [b] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L680" class="LineNr">680 </span>
+<span id="L681" class="LineNr">681 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L682" class="LineNr">682 </span>TRACE_SHOULD_NOT_CONTAIN<span class="Delimiter">,</span>
+<span id="L683" class="LineNr">683 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L684" class="LineNr">684 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;trace-should-not-contain&quot;</span><span class="Delimiter">,</span> TRACE_SHOULD_NOT_CONTAIN<span class="Delimiter">);</span>
+<span id="L685" class="LineNr">685 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L686" class="LineNr">686 </span><span class="Normal">case</span> TRACE_SHOULD_NOT_CONTAIN: <span class="Delimiter">{</span>
+<span id="L687" class="LineNr">687 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L688" class="LineNr">688 </span><span class="Delimiter">}</span>
+<span id="L689" class="LineNr">689 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L690" class="LineNr">690 </span><span class="Normal">case</span> TRACE_SHOULD_NOT_CONTAIN: <span class="Delimiter">{</span>
-<span id="L691" class="LineNr">691 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L692" class="LineNr">692 </span><span class="Delimiter">}</span>
-<span id="L693" class="LineNr">693 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L694" class="LineNr">694 </span><span class="Normal">case</span> TRACE_SHOULD_NOT_CONTAIN: <span class="Delimiter">{</span>
-<span id="L695" class="LineNr">695 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L696" class="LineNr">696 </span>  check_trace_missing<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>name<span class="Delimiter">);</span>
-<span id="L697" class="LineNr">697 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L698" class="LineNr">698 </span><span class="Delimiter">}</span>
-<span id="L699" class="LineNr">699 </span>
-<span id="L700" class="LineNr">700 </span><span class="Delimiter">:(code)</span>
-<span id="L701" class="LineNr">701 </span><span class="Comment">// simplified version of check_trace_contents() that emits errors rather</span>
-<span id="L702" class="LineNr">702 </span><span class="Comment">// than just printing to stderr</span>
-<span id="L703" class="LineNr">703 </span><span class="Normal">bool</span> check_trace_missing<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L704" class="LineNr">704 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">();</span>
-<span id="L705" class="LineNr">705 </span>  vector&lt;trace_line&gt; lines = parse_trace<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L706" class="LineNr">706 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>lines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L707" class="LineNr">707 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span>lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>label<span class="Delimiter">,</span> lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>contents<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L708" class="LineNr">708 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;unexpected [&quot;</span> &lt;&lt; lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>contents &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L167'>trace</a> with label '&quot;</span> &lt;&lt; lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>label &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L709" class="LineNr">709 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L710" class="LineNr">710 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L711" class="LineNr">711 </span>    <span class="Delimiter">}</span>
-<span id="L712" class="LineNr">712 </span>  <span class="Delimiter">}</span>
-<span id="L713" class="LineNr">713 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L714" class="LineNr">714 </span><span class="Delimiter">}</span>
-<span id="L715" class="LineNr">715 </span>
-<span id="L716" class="LineNr">716 </span><span class="Delimiter">:(scenario trace_negative_check_passes_silently)</span>
-<span id="L717" class="LineNr">717 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L718" class="LineNr">718 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L719" class="LineNr">719 </span>  trace-should-<span class="Normal">not</span>-contain [
-<span id="L720" class="LineNr">720 </span>    <span class="Normal">a</span>: b
-<span id="L721" class="LineNr">721 </span>  ]
-<span id="L722" class="LineNr">722 </span>]
-<span id="L723" class="LineNr">723 </span><span class="traceAbsent">-error: unexpected [b] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L724" class="LineNr">724 </span>$error: <span class="Constant">0</span>
-<span id="L725" class="LineNr">725 </span>
-<span id="L726" class="LineNr">726 </span><span class="Delimiter">:(scenario trace_negative_check_fails_on_any_unexpected_line)</span>
-<span id="L727" class="LineNr">727 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L728" class="LineNr">728 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L729" class="LineNr">729 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L730" class="LineNr">730 </span>  run [
-<span id="L731" class="LineNr">731 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [d]
+<span id="L691" class="LineNr">691 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L692" class="LineNr">692 </span>  check_trace_missing<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>name<span class="Delimiter">);</span>
+<span id="L693" class="LineNr">693 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L694" class="LineNr">694 </span><span class="Delimiter">}</span>
+<span id="L695" class="LineNr">695 </span>
+<span id="L696" class="LineNr">696 </span><span class="Delimiter">:(code)</span>
+<span id="L697" class="LineNr">697 </span><span class="Comment">// simplified version of check_trace_contents() that emits errors rather</span>
+<span id="L698" class="LineNr">698 </span><span class="Comment">// than just printing to stderr</span>
+<span id="L699" class="LineNr">699 </span><span class="Normal">bool</span> check_trace_missing<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L700" class="LineNr">700 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">();</span>
+<span id="L701" class="LineNr">701 </span>  vector&lt;trace_line&gt; lines = parse_trace<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L702" class="LineNr">702 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>lines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L703" class="LineNr">703 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span>lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>label<span class="Delimiter">,</span> lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>contents<span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L704" class="LineNr">704 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;unexpected [&quot;</span> &lt;&lt; lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>contents &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L190'>trace</a> with label '&quot;</span> &lt;&lt; lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>label &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L705" class="LineNr">705 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L706" class="LineNr">706 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L707" class="LineNr">707 </span>    <span class="Delimiter">}</span>
+<span id="L708" class="LineNr">708 </span>  <span class="Delimiter">}</span>
+<span id="L709" class="LineNr">709 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L710" class="LineNr">710 </span><span class="Delimiter">}</span>
+<span id="L711" class="LineNr">711 </span>
+<span id="L712" class="LineNr">712 </span><span class="Delimiter">:(scenario trace_negative_check_passes_silently)</span>
+<span id="L713" class="LineNr">713 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L714" class="LineNr">714 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L715" class="LineNr">715 </span>  trace-should-<span class="Normal">not</span>-contain [
+<span id="L716" class="LineNr">716 </span>    <span class="Normal">a</span>: b
+<span id="L717" class="LineNr">717 </span>  ]
+<span id="L718" class="LineNr">718 </span>]
+<span id="L719" class="LineNr">719 </span><span class="traceAbsent">-error: unexpected [b] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L720" class="LineNr">720 </span>$error: <span class="Constant">0</span>
+<span id="L721" class="LineNr">721 </span>
+<span id="L722" class="LineNr">722 </span><span class="Delimiter">:(scenario trace_negative_check_fails_on_any_unexpected_line)</span>
+<span id="L723" class="LineNr">723 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L724" class="LineNr">724 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L725" class="LineNr">725 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L726" class="LineNr">726 </span>  run [
+<span id="L727" class="LineNr">727 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [d]
+<span id="L728" class="LineNr">728 </span>  ]
+<span id="L729" class="LineNr">729 </span>  trace-should-<span class="Normal">not</span>-contain [
+<span id="L730" class="LineNr">730 </span>    <span class="Normal">a</span>: b
+<span id="L731" class="LineNr">731 </span>    <span class="Normal">a</span>: d
 <span id="L732" class="LineNr">732 </span>  ]
-<span id="L733" class="LineNr">733 </span>  trace-should-<span class="Normal">not</span>-contain [
-<span id="L734" class="LineNr">734 </span>    <span class="Normal">a</span>: b
-<span id="L735" class="LineNr">735 </span>    <span class="Normal">a</span>: d
-<span id="L736" class="LineNr">736 </span>  ]
-<span id="L737" class="LineNr">737 </span>]
-<span id="L738" class="LineNr">738 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: unexpected [d] in <a href='003trace.cc.html#L167'>trace</a> with label 'a'</span>
-<span id="L739" class="LineNr">739 </span>
-<span id="L740" class="LineNr">740 </span><span class="Delimiter">:(scenario trace_count_check)</span>
-<span id="L741" class="LineNr">741 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L742" class="LineNr">742 </span>  run [
-<span id="L743" class="LineNr">743 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [foo]
-<span id="L744" class="LineNr">744 </span>  ]
-<span id="L745" class="LineNr">745 </span>  check-trace-count-<span class="Normal">for</span>-label <span class="Constant">1</span><span class="Delimiter">,</span> [a]
-<span id="L746" class="LineNr">746 </span>]
-<span id="L747" class="LineNr">747 </span><span class="Comment"># checks are inside scenario</span>
-<span id="L748" class="LineNr">748 </span>
-<span id="L749" class="LineNr">749 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L750" class="LineNr">750 </span>CHECK_TRACE_COUNT_FOR_LABEL<span class="Delimiter">,</span>
-<span id="L751" class="LineNr">751 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L752" class="LineNr">752 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL<span class="Delimiter">);</span>
-<span id="L753" class="LineNr">753 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L754" class="LineNr">754 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL: <span class="Delimiter">{</span>
-<span id="L755" class="LineNr">755 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L756" class="LineNr">756 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L733" class="LineNr">733 </span>]
+<span id="L734" class="LineNr">734 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: unexpected [d] in <a href='003trace.cc.html#L190'>trace</a> with label 'a'</span>
+<span id="L735" class="LineNr">735 </span>
+<span id="L736" class="LineNr">736 </span><span class="Delimiter">:(scenario trace_count_check)</span>
+<span id="L737" class="LineNr">737 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L738" class="LineNr">738 </span>  run [
+<span id="L739" class="LineNr">739 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [foo]
+<span id="L740" class="LineNr">740 </span>  ]
+<span id="L741" class="LineNr">741 </span>  check-trace-count-<span class="Normal">for</span>-label <span class="Constant">1</span><span class="Delimiter">,</span> [a]
+<span id="L742" class="LineNr">742 </span>]
+<span id="L743" class="LineNr">743 </span><span class="Comment"># checks are inside scenario</span>
+<span id="L744" class="LineNr">744 </span>
+<span id="L745" class="LineNr">745 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L746" class="LineNr">746 </span>CHECK_TRACE_COUNT_FOR_LABEL<span class="Delimiter">,</span>
+<span id="L747" class="LineNr">747 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L748" class="LineNr">748 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL<span class="Delimiter">);</span>
+<span id="L749" class="LineNr">749 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L750" class="LineNr">750 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL: <span class="Delimiter">{</span>
+<span id="L751" class="LineNr">751 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L752" class="LineNr">752 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L753" class="LineNr">753 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L754" class="LineNr">754 </span>  <span class="Delimiter">}</span>
+<span id="L755" class="LineNr">755 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L756" class="LineNr">756 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L757" class="LineNr">757 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L758" class="LineNr">758 </span>  <span class="Delimiter">}</span>
-<span id="L759" class="LineNr">759 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L760" class="LineNr">760 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L759" class="LineNr">759 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L760" class="LineNr">760 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L761" class="LineNr">761 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L762" class="LineNr">762 </span>  <span class="Delimiter">}</span>
-<span id="L763" class="LineNr">763 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L764" class="LineNr">764 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L765" class="LineNr">765 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L766" class="LineNr">766 </span>  <span class="Delimiter">}</span>
-<span id="L767" class="LineNr">767 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L768" class="LineNr">768 </span><span class="Delimiter">}</span>
-<span id="L769" class="LineNr">769 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L770" class="LineNr">770 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL: <span class="Delimiter">{</span>
-<span id="L771" class="LineNr">771 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L772" class="LineNr">772 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L773" class="LineNr">773 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L774" class="LineNr">774 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L775" class="LineNr">775 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count != expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L776" class="LineNr">776 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L777" class="LineNr">777 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L167'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L167'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L778" class="LineNr">778 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L779" class="LineNr">779 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L780" class="LineNr">780 </span>  <span class="Delimiter">}</span>
-<span id="L781" class="LineNr">781 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L782" class="LineNr">782 </span><span class="Delimiter">}</span>
-<span id="L783" class="LineNr">783 </span>
-<span id="L784" class="LineNr">784 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L785" class="LineNr">785 </span>CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN<span class="Delimiter">,</span>
-<span id="L786" class="LineNr">786 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L787" class="LineNr">787 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label-greater-than&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN<span class="Delimiter">);</span>
-<span id="L788" class="LineNr">788 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L789" class="LineNr">789 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN: <span class="Delimiter">{</span>
-<span id="L790" class="LineNr">790 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L791" class="LineNr">791 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L763" class="LineNr">763 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L764" class="LineNr">764 </span><span class="Delimiter">}</span>
+<span id="L765" class="LineNr">765 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L766" class="LineNr">766 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL: <span class="Delimiter">{</span>
+<span id="L767" class="LineNr">767 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L768" class="LineNr">768 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L769" class="LineNr">769 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L770" class="LineNr">770 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L771" class="LineNr">771 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count != expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L772" class="LineNr">772 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L773" class="LineNr">773 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L190'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L190'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L774" class="LineNr">774 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L775" class="LineNr">775 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L776" class="LineNr">776 </span>  <span class="Delimiter">}</span>
+<span id="L777" class="LineNr">777 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L778" class="LineNr">778 </span><span class="Delimiter">}</span>
+<span id="L779" class="LineNr">779 </span>
+<span id="L780" class="LineNr">780 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L781" class="LineNr">781 </span>CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN<span class="Delimiter">,</span>
+<span id="L782" class="LineNr">782 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L783" class="LineNr">783 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label-greater-than&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN<span class="Delimiter">);</span>
+<span id="L784" class="LineNr">784 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L785" class="LineNr">785 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN: <span class="Delimiter">{</span>
+<span id="L786" class="LineNr">786 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L787" class="LineNr">787 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L788" class="LineNr">788 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L789" class="LineNr">789 </span>  <span class="Delimiter">}</span>
+<span id="L790" class="LineNr">790 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L791" class="LineNr">791 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L792" class="LineNr">792 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L793" class="LineNr">793 </span>  <span class="Delimiter">}</span>
-<span id="L794" class="LineNr">794 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L795" class="LineNr">795 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L794" class="LineNr">794 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L795" class="LineNr">795 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L796" class="LineNr">796 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L797" class="LineNr">797 </span>  <span class="Delimiter">}</span>
-<span id="L798" class="LineNr">798 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L799" class="LineNr">799 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L800" class="LineNr">800 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L801" class="LineNr">801 </span>  <span class="Delimiter">}</span>
-<span id="L802" class="LineNr">802 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L803" class="LineNr">803 </span><span class="Delimiter">}</span>
-<span id="L804" class="LineNr">804 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L805" class="LineNr">805 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN: <span class="Delimiter">{</span>
-<span id="L806" class="LineNr">806 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L807" class="LineNr">807 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L808" class="LineNr">808 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L809" class="LineNr">809 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L810" class="LineNr">810 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count &lt;= expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L811" class="LineNr">811 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L812" class="LineNr">812 </span>    <a href='003trace.cc.html#L174'>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;expected more than &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L167'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L167'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L813" class="LineNr">813 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L814" class="LineNr">814 </span>      cerr &lt;&lt; <span class="Constant">&quot;trace contents:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L815" class="LineNr">815 </span>      <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L816" class="LineNr">816 </span>    <span class="Delimiter">}</span>
-<span id="L817" class="LineNr">817 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L818" class="LineNr">818 </span>  <span class="Delimiter">}</span>
-<span id="L819" class="LineNr">819 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L820" class="LineNr">820 </span><span class="Delimiter">}</span>
-<span id="L821" class="LineNr">821 </span>
-<span id="L822" class="LineNr">822 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L823" class="LineNr">823 </span>CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN<span class="Delimiter">,</span>
-<span id="L824" class="LineNr">824 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L825" class="LineNr">825 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label-lesser-than&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN<span class="Delimiter">);</span>
-<span id="L826" class="LineNr">826 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L827" class="LineNr">827 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN: <span class="Delimiter">{</span>
-<span id="L828" class="LineNr">828 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L829" class="LineNr">829 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L798" class="LineNr">798 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L799" class="LineNr">799 </span><span class="Delimiter">}</span>
+<span id="L800" class="LineNr">800 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L801" class="LineNr">801 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_GREATER_THAN: <span class="Delimiter">{</span>
+<span id="L802" class="LineNr">802 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L803" class="LineNr">803 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L804" class="LineNr">804 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L805" class="LineNr">805 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L806" class="LineNr">806 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count &lt;= expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L807" class="LineNr">807 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L808" class="LineNr">808 </span>    <a href='003trace.cc.html#L197'>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;expected more than &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L190'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L190'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L809" class="LineNr">809 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L810" class="LineNr">810 </span>      cerr &lt;&lt; <span class="Constant">&quot;trace contents:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L811" class="LineNr">811 </span>      <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L812" class="LineNr">812 </span>    <span class="Delimiter">}</span>
+<span id="L813" class="LineNr">813 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L814" class="LineNr">814 </span>  <span class="Delimiter">}</span>
+<span id="L815" class="LineNr">815 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L816" class="LineNr">816 </span><span class="Delimiter">}</span>
+<span id="L817" class="LineNr">817 </span>
+<span id="L818" class="LineNr">818 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L819" class="LineNr">819 </span>CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN<span class="Delimiter">,</span>
+<span id="L820" class="LineNr">820 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L821" class="LineNr">821 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;check-trace-count-for-label-lesser-than&quot;</span><span class="Delimiter">,</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN<span class="Delimiter">);</span>
+<span id="L822" class="LineNr">822 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L823" class="LineNr">823 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN: <span class="Delimiter">{</span>
+<span id="L824" class="LineNr">824 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L825" class="LineNr">825 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'check-trace-count-for-label' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L826" class="LineNr">826 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L827" class="LineNr">827 </span>  <span class="Delimiter">}</span>
+<span id="L828" class="LineNr">828 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L829" class="LineNr">829 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L830" class="LineNr">830 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L831" class="LineNr">831 </span>  <span class="Delimiter">}</span>
-<span id="L832" class="LineNr">832 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L833" class="LineNr">833 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'check-trace-count-for-label' should be a number (count), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L832" class="LineNr">832 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L833" class="LineNr">833 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L834" class="LineNr">834 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L835" class="LineNr">835 </span>  <span class="Delimiter">}</span>
-<span id="L836" class="LineNr">836 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L837" class="LineNr">837 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'check-trace-count-for-label' should be a literal string (label), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L838" class="LineNr">838 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L839" class="LineNr">839 </span>  <span class="Delimiter">}</span>
-<span id="L840" class="LineNr">840 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L841" class="LineNr">841 </span><span class="Delimiter">}</span>
-<span id="L842" class="LineNr">842 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L843" class="LineNr">843 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN: <span class="Delimiter">{</span>
-<span id="L844" class="LineNr">844 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L845" class="LineNr">845 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L846" class="LineNr">846 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L847" class="LineNr">847 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L848" class="LineNr">848 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count &gt;= expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L849" class="LineNr">849 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L850" class="LineNr">850 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected less than &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L167'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L167'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L851" class="LineNr">851 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L852" class="LineNr">852 </span>      cerr &lt;&lt; <span class="Constant">&quot;trace contents:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L853" class="LineNr">853 </span>      <a href='003trace.cc.html#L171'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
-<span id="L854" class="LineNr">854 </span>    <span class="Delimiter">}</span>
-<span id="L855" class="LineNr">855 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L856" class="LineNr">856 </span>  <span class="Delimiter">}</span>
-<span id="L857" class="LineNr">857 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L858" class="LineNr">858 </span><span class="Delimiter">}</span>
-<span id="L859" class="LineNr">859 </span>
-<span id="L860" class="LineNr">860 </span><span class="Delimiter">:(scenario trace_count_check_2)</span>
-<span id="L861" class="LineNr">861 </span><span class="Special">% Scenario_testing_scenario = true;</span>
-<span id="L862" class="LineNr">862 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L863" class="LineNr">863 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L864" class="LineNr">864 </span>  run [
-<span id="L865" class="LineNr">865 </span>    <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [foo]
-<span id="L866" class="LineNr">866 </span>  ]
-<span id="L867" class="LineNr">867 </span>  check-trace-count-<span class="Normal">for</span>-label <span class="Constant">2</span><span class="Delimiter">,</span> [a]
-<span id="L868" class="LineNr">868 </span>]
-<span id="L869" class="LineNr">869 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected 2 lines in <a href='003trace.cc.html#L167'>trace</a> with label 'a' in <a href='003trace.cc.html#L167'>trace</a></span>
-<span id="L870" class="LineNr">870 </span>
-<span id="L871" class="LineNr">871 </span><span class="Comment">//: Minor detail: ignore 'system' calls in scenarios, since anything we do</span>
-<span id="L872" class="LineNr">872 </span><span class="Comment">//: with them is by definition impossible to test through Mu.</span>
-<span id="L873" class="LineNr">873 </span><span class="Delimiter">:(after &quot;case _SYSTEM:&quot;)</span>
-<span id="L874" class="LineNr">874 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_scenario<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L875" class="LineNr">875 </span>
-<span id="L876" class="LineNr">876 </span><span class="SalientComment">//:: Warn if people use '_' manually in recipe names. They're reserved for internal use.</span>
-<span id="L877" class="LineNr">877 </span>
-<span id="L878" class="LineNr">878 </span><span class="Delimiter">:(scenario recipe_name_with_underscore)</span>
-<span id="L879" class="LineNr">879 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L880" class="LineNr">880 </span><span class="muRecipe">def</span> foo_bar [
-<span id="L881" class="LineNr">881 </span>]
-<span id="L882" class="LineNr">882 </span><span class="traceContains">+error: foo_bar: don't create recipes with '_' in the name</span>
-<span id="L883" class="LineNr">883 </span>
-<span id="L884" class="LineNr">884 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L19'>recipe</a> Fields&quot;)</span>
-<span id="L885" class="LineNr">885 </span><span class="Normal">bool</span> is_autogenerated<span class="Delimiter">;</span>
-<span id="L886" class="LineNr">886 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L19'>recipe</a> Constructor&quot;)</span>
-<span id="L887" class="LineNr">887 </span>is_autogenerated = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L888" class="LineNr">888 </span><span class="Delimiter">:(code)</span>
-<span id="L889" class="LineNr">889 </span><span class="Normal">void</span> mark_autogenerated<span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L890" class="LineNr">890 </span>  get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>is_autogenerated = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L891" class="LineNr">891 </span><span class="Delimiter">}</span>
-<span id="L892" class="LineNr">892 </span>
-<span id="L893" class="LineNr">893 </span><span class="Delimiter">:(after &quot;void transform_all()&quot;)</span>
-<span id="L894" class="LineNr">894 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L895" class="LineNr">895 </span>    <span class="Normal">const</span> recipe&amp; r = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
-<span id="L896" class="LineNr">896 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'_'</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L897" class="LineNr">897 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>is_autogenerated<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// created by previous call to transform_all()</span>
-<span id="L898" class="LineNr">898 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: don't create recipes with '_' in the name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L899" class="LineNr">899 </span>  <span class="Delimiter">}</span>
-<span id="L900" class="LineNr">900 </span>
-<span id="L901" class="LineNr">901 </span><span class="SalientComment">//:: Helpers</span>
-<span id="L902" class="LineNr">902 </span>
-<span id="L903" class="LineNr">903 </span><span class="Delimiter">:(code)</span>
-<span id="L904" class="LineNr">904 </span><span class="Comment">// just for the scenarios running scenarios in C++ layers</span>
-<span id="L905" class="LineNr">905 </span><span class="Normal">void</span> run_mu_scenario<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; form<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L906" class="LineNr">906 </span>  Scenario_names<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L907" class="LineNr">907 </span>  istringstream in<span class="Delimiter">(</span>form<span class="Delimiter">);</span>
-<span id="L908" class="LineNr">908 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L909" class="LineNr">909 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L910" class="LineNr">910 </span>  string _scenario = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L911" class="LineNr">911 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>_scenario<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L912" class="LineNr">912 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L913" class="LineNr">913 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;no <a href='050scenario.cc.html#L57'>scenario</a> in string passed into run_mu_scenario()</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L914" class="LineNr">914 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L915" class="LineNr">915 </span>  <span class="Delimiter">}</span>
-<span id="L916" class="LineNr">916 </span>  assert<span class="Delimiter">(</span>_scenario == <span class="Constant">&quot;scenario&quot;</span><span class="Delimiter">);</span>
-<span id="L917" class="LineNr">917 </span>  <a href='050scenario.cc.html#L57'>scenario</a> s = <a href='050scenario.cc.html#L91'>parse_scenario</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L918" class="LineNr">918 </span>  run_mu_scenario<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L919" class="LineNr">919 </span><span class="Delimiter">}</span>
+<span id="L836" class="LineNr">836 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L837" class="LineNr">837 </span><span class="Delimiter">}</span>
+<span id="L838" class="LineNr">838 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L839" class="LineNr">839 </span><span class="Normal">case</span> CHECK_TRACE_COUNT_FOR_LABEL_LESSER_THAN: <span class="Delimiter">{</span>
+<span id="L840" class="LineNr">840 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L841" class="LineNr">841 </span>  <span class="Normal">int</span> expected_count = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L842" class="LineNr">842 </span>  string label = <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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L843" class="LineNr">843 </span>  <span class="Normal">int</span> count = trace_count<span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L844" class="LineNr">844 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>count &gt;= expected_count<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L845" class="LineNr">845 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L846" class="LineNr">846 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected less than &quot;</span> &lt;&lt; expected_count &lt;&lt; <span class="Constant">&quot; lines in <a href='003trace.cc.html#L190'>trace</a> with label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' in <a href='003trace.cc.html#L190'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L847" class="LineNr">847 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L848" class="LineNr">848 </span>      cerr &lt;&lt; <span class="Constant">&quot;trace contents:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L849" class="LineNr">849 </span>      <a href='003trace.cc.html#L194'>DUMP</a><span class="Delimiter">(</span>label<span class="Delimiter">);</span>
+<span id="L850" class="LineNr">850 </span>    <span class="Delimiter">}</span>
+<span id="L851" class="LineNr">851 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L852" class="LineNr">852 </span>  <span class="Delimiter">}</span>
+<span id="L853" class="LineNr">853 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L854" class="LineNr">854 </span><span class="Delimiter">}</span>
+<span id="L855" class="LineNr">855 </span>
+<span id="L856" class="LineNr">856 </span><span class="Delimiter">:(scenario trace_count_check_2)</span>
+<span id="L857" class="LineNr">857 </span><span class="Special">% Scenario_testing_scenario = true;</span>
+<span id="L858" class="LineNr">858 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L859" class="LineNr">859 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L860" class="LineNr">860 </span>  run [
+<span id="L861" class="LineNr">861 </span>    <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">1</span><span class="Delimiter">,</span> [a]<span class="Delimiter">,</span> [foo]
+<span id="L862" class="LineNr">862 </span>  ]
+<span id="L863" class="LineNr">863 </span>  check-trace-count-<span class="Normal">for</span>-label <span class="Constant">2</span><span class="Delimiter">,</span> [a]
+<span id="L864" class="LineNr">864 </span>]
+<span id="L865" class="LineNr">865 </span><span class="traceContains">+error: F - <a href='000organization.cc.html#L113'>main</a>: expected 2 lines in <a href='003trace.cc.html#L190'>trace</a> with label 'a' in <a href='003trace.cc.html#L190'>trace</a></span>
+<span id="L866" class="LineNr">866 </span>
+<span id="L867" class="LineNr">867 </span><span class="Comment">//: Minor detail: ignore 'system' calls in scenarios, since anything we do</span>
+<span id="L868" class="LineNr">868 </span><span class="Comment">//: with them is by definition impossible to test through Mu.</span>
+<span id="L869" class="LineNr">869 </span><span class="Delimiter">:(after &quot;case _SYSTEM:&quot;)</span>
+<span id="L870" class="LineNr">870 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_scenario<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L871" class="LineNr">871 </span>
+<span id="L872" class="LineNr">872 </span><span class="SalientComment">//:: Warn if people use '_' manually in recipe names. They're reserved for internal use.</span>
+<span id="L873" class="LineNr">873 </span>
+<span id="L874" class="LineNr">874 </span><span class="Delimiter">:(scenario recipe_name_with_underscore)</span>
+<span id="L875" class="LineNr">875 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L876" class="LineNr">876 </span><span class="muRecipe">def</span> foo_bar [
+<span id="L877" class="LineNr">877 </span>]
+<span id="L878" class="LineNr">878 </span><span class="traceContains">+error: foo_bar: don't create recipes with '_' in the name</span>
+<span id="L879" class="LineNr">879 </span>
+<span id="L880" class="LineNr">880 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L19'>recipe</a> Fields&quot;)</span>
+<span id="L881" class="LineNr">881 </span><span class="Normal">bool</span> is_autogenerated<span class="Delimiter">;</span>
+<span id="L882" class="LineNr">882 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L19'>recipe</a> Constructor&quot;)</span>
+<span id="L883" class="LineNr">883 </span>is_autogenerated =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L884" class="LineNr">884 </span><span class="Delimiter">:(code)</span>
+<span id="L885" class="LineNr">885 </span><span class="Normal">void</span> mark_autogenerated<span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L886" class="LineNr">886 </span>  get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>is_autogenerated =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L887" class="LineNr">887 </span><span class="Delimiter">}</span>
+<span id="L888" class="LineNr">888 </span>
+<span id="L889" class="LineNr">889 </span><span class="Delimiter">:(after &quot;void transform_all()&quot;)</span>
+<span id="L890" class="LineNr">890 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt;::iterator p = Recipe<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Recipe<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L891" class="LineNr">891 </span>    <span class="Normal">const</span> recipe&amp; r = p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
+<span id="L892" class="LineNr">892 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">'_'</span><span class="Delimiter">)</span> == string::npos<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L893" class="LineNr">893 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>is_autogenerated<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// created by previous call to transform_all()</span>
+<span id="L894" class="LineNr">894 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: don't create recipes with '_' in the name</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L895" class="LineNr">895 </span>  <span class="Delimiter">}</span>
+<span id="L896" class="LineNr">896 </span>
+<span id="L897" class="LineNr">897 </span><span class="SalientComment">//:: Helpers</span>
+<span id="L898" class="LineNr">898 </span>
+<span id="L899" class="LineNr">899 </span><span class="Delimiter">:(code)</span>
+<span id="L900" class="LineNr">900 </span><span class="Comment">// just for the scenarios running scenarios in C++ layers</span>
+<span id="L901" class="LineNr">901 </span><span class="Normal">void</span> run_mu_scenario<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; form<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L902" class="LineNr">902 </span>  Scenario_names<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L903" class="LineNr">903 </span>  istringstream in<span class="Delimiter">(</span>form<span class="Delimiter">);</span>
+<span id="L904" class="LineNr">904 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
+<span id="L905" class="LineNr">905 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L906" class="LineNr">906 </span>  string _scenario = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L907" class="LineNr">907 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>_scenario<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L908" class="LineNr">908 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
+<span id="L909" class="LineNr">909 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;no <a href='050scenario.cc.html#L57'>scenario</a> in string passed into run_mu_scenario()</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L910" class="LineNr">910 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L911" class="LineNr">911 </span>  <span class="Delimiter">}</span>
+<span id="L912" class="LineNr">912 </span>  assert<span class="Delimiter">(</span>_scenario == <span class="Constant">&quot;scenario&quot;</span><span class="Delimiter">);</span>
+<span id="L913" class="LineNr">913 </span>  <a href='050scenario.cc.html#L57'>scenario</a> s = <a href='050scenario.cc.html#L91'>parse_scenario</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L914" class="LineNr">914 </span>  run_mu_scenario<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L915" class="LineNr">915 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/051scenario_test.mu.html b/html/051scenario_test.mu.html
index 15716ab9..1407aea1 100644
--- a/html/051scenario_test.mu.html
+++ b/html/051scenario_test.mu.html
@@ -15,12 +15,12 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/052tangle.cc.html b/html/052tangle.cc.html
index c755161f..7cbd909d 100644
--- a/html/052tangle.cc.html
+++ b/html/052tangle.cc.html
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span><span class="Comment">//: outside the recipe. However, waypoints are global: a recipe can have</span>
 <span id="L8" class="LineNr">  8 </span><span class="Comment">//: multiple of them, you can't use them as jump targets.</span>
 <span id="L9" class="LineNr">  9 </span><span class="Delimiter">:(before &quot;End <a href='041jump_target.cc.html#L11'>is_jump_target</a> Special-cases&quot;)</span>
-<span id="L10" class="LineNr"> 10 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='052tangle.cc.html#L13'>is_waypoint</a><span class="Delimiter">(</span>label<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='052tangle.cc.html#L13'>is_waypoint</a><span class="Delimiter">(</span>label<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Comment">//: Waypoints are always surrounded by '&lt;&gt;', e.g. &lt;handle-request&gt;.</span>
 <span id="L12" class="LineNr"> 12 </span><span class="Delimiter">:(code)</span>
 <span id="L13" class="LineNr"> 13 </span><span class="Normal">bool</span> <a href='052tangle.cc.html#L13'>is_waypoint</a><span class="Delimiter">(</span>string label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -104,33 +104,33 @@ if ('onhashchange' in window) {
 <span id="L41" class="LineNr"> 41 </span>
 <span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End Command Handlers&quot;)</span>
 <span id="L43" class="LineNr"> 43 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;before&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L44" class="LineNr"> 44 </span>  string label = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L44" class="LineNr"> 44 </span>  string label = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>label<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L46" class="LineNr"> 46 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L47" class="LineNr"> 47 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'before' block at <a href='003trace.cc.html#L203'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L47" class="LineNr"> 47 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'before' block at <a href='003trace.cc.html#L226'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L48" class="LineNr"> 48 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Delimiter">}</span>
 <span id="L50" class="LineNr"> 50 </span>  <a href='010vm.cc.html#L19'>recipe</a> tmp<span class="Delimiter">;</span>
-<span id="L51" class="LineNr"> 51 </span>  <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
+<span id="L51" class="LineNr"> 51 </span>  <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
 <span id="L52" class="LineNr"> 52 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='052tangle.cc.html#L13'>is_waypoint</a><span class="Delimiter">(</span>label<span class="Delimiter">))</span>
-<span id="L53" class="LineNr"> 53 </span>    Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
+<span id="L53" class="LineNr"> 53 </span>    Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>Before_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
 <span id="L54" class="LineNr"> 54 </span>  <span class="Normal">else</span>
-<span id="L55" class="LineNr"> 55 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't tangle before non-waypoint &quot;</span> &lt;&lt; label &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L55" class="LineNr"> 55 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't tangle before non-waypoint &quot;</span> &lt;&lt; label &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Comment">// End before Command Handler</span>
 <span id="L57" class="LineNr"> 57 </span><span class="Delimiter">}</span>
 <span id="L58" class="LineNr"> 58 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>command == <span class="Constant">&quot;after&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L59" class="LineNr"> 59 </span>  string label = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L59" class="LineNr"> 59 </span>  string label = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>label<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L61" class="LineNr"> 61 </span>    assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L62" class="LineNr"> 62 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'after' block at <a href='003trace.cc.html#L203'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L62" class="LineNr"> 62 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'after' block at <a href='003trace.cc.html#L226'>end</a> of file</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L63" class="LineNr"> 63 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Delimiter">}</span>
 <span id="L65" class="LineNr"> 65 </span>  <a href='010vm.cc.html#L19'>recipe</a> tmp<span class="Delimiter">;</span>
-<span id="L66" class="LineNr"> 66 </span>  <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>  <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='052tangle.cc.html#L13'>is_waypoint</a><span class="Delimiter">(</span>label<span class="Delimiter">))</span>
-<span id="L68" class="LineNr"> 68 </span>    After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
+<span id="L68" class="LineNr"> 68 </span>    After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>After_fragments[label]<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> tmp<span class="Delimiter">.</span>steps<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Normal">else</span>
-<span id="L70" class="LineNr"> 70 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;can't tangle after non-waypoint &quot;</span> &lt;&lt; label &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;can't tangle after non-waypoint &quot;</span> &lt;&lt; label &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L71" class="LineNr"> 71 </span>  <span class="Comment">// End after Command Handler</span>
 <span id="L72" class="LineNr"> 72 </span><span class="Delimiter">}</span>
 <span id="L73" class="LineNr"> 73 </span>
@@ -142,10 +142,10 @@ if ('onhashchange' in window) {
 <span id="L79" class="LineNr"> 79 </span><span class="Comment">//: We might need to perform multiple passes, in case inserted fragments</span>
 <span id="L80" class="LineNr"> 80 </span><span class="Comment">//: include more labels that need further insertions. Track which labels we've</span>
 <span id="L81" class="LineNr"> 81 </span><span class="Comment">//: already processed using an extra field.</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L32'>instruction</a> Fields&quot;)</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L33'>instruction</a> Fields&quot;)</span>
 <span id="L83" class="LineNr"> 83 </span><span class="Normal">mutable</span> <span class="Normal">bool</span> tangle_done<span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L32'>instruction</a> Constructor&quot;)</span>
-<span id="L85" class="LineNr"> 85 </span>tangle_done = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L33'>instruction</a> Constructor&quot;)</span>
+<span id="L85" class="LineNr"> 85 </span>tangle_done =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L86" class="LineNr"> 86 </span>
 <span id="L87" class="LineNr"> 87 </span><span class="Delimiter">:(code)</span>
 <span id="L88" class="LineNr"> 88 </span><span class="Normal">void</span> insert_fragments<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -153,11 +153,11 @@ if ('onhashchange' in window) {
 <span id="L90" class="LineNr"> 90 </span><span class="Delimiter">}</span>
 <span id="L91" class="LineNr"> 91 </span>
 <span id="L92" class="LineNr"> 92 </span><span class="Normal">void</span> insert_fragments<span class="Delimiter">(</span>recipe&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- insert fragments into <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">bool</span> made_progress = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- insert fragments into <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">bool</span> made_progress =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L95" class="LineNr"> 95 </span>  <span class="Normal">int</span> pass = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L96" class="LineNr"> 96 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>made_progress<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>    made_progress = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>    made_progress =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L98" class="LineNr"> 98 </span>    <span class="Comment">// create a new vector because insertions invalidate iterators</span>
 <span id="L99" class="LineNr"> 99 </span>    vector&lt;instruction&gt; result<span class="Delimiter">;</span>
 <span id="L100" class="LineNr">100 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -166,20 +166,20 @@ if ('onhashchange' in window) {
 <span id="L103" class="LineNr">103 </span>        result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
 <span id="L104" class="LineNr">104 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L105" class="LineNr">105 </span>      <span class="Delimiter">}</span>
-<span id="L106" class="LineNr">106 </span>      inst<span class="Delimiter">.</span>tangle_done = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L107" class="LineNr">107 </span>      made_progress = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span>      inst<span class="Delimiter">.</span>tangle_done =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span>      made_progress =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L108" class="LineNr">108 </span>      Fragments_used<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label<span class="Delimiter">);</span>
 <span id="L109" class="LineNr">109 </span>      ostringstream prefix<span class="Delimiter">;</span>
 <span id="L110" class="LineNr">110 </span>      prefix &lt;&lt; <span class="Constant">'+'</span> &lt;&lt; r<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; pass &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; i<span class="Delimiter">;</span>
 <span id="L111" class="LineNr">111 </span>      <span class="Comment">// ok to use contains_key even though Before_fragments uses [],</span>
 <span id="L112" class="LineNr">112 </span>      <span class="Comment">// because appending an empty recipe is a noop</span>
-<span id="L113" class="LineNr">113 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Before_fragments<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L114" class="LineNr">114 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;insert fragments before label &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L113" class="LineNr">113 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Before_fragments<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L114" class="LineNr">114 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;insert fragments before label &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L115" class="LineNr">115 </span>        <a href='052tangle.cc.html#L128'>append_fragment</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> Before_fragments[inst<span class="Delimiter">.</span>label]<span class="Delimiter">.</span>steps<span class="Delimiter">,</span> prefix<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
 <span id="L116" class="LineNr">116 </span>      <span class="Delimiter">}</span>
 <span id="L117" class="LineNr">117 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
-<span id="L118" class="LineNr">118 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>After_fragments<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L119" class="LineNr">119 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;insert fragments after label &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L118" class="LineNr">118 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>After_fragments<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;insert fragments after label &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>label &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L120" class="LineNr">120 </span>        <a href='052tangle.cc.html#L128'>append_fragment</a><span class="Delimiter">(</span>result<span class="Delimiter">,</span> After_fragments[inst<span class="Delimiter">.</span>label]<span class="Delimiter">.</span>steps<span class="Delimiter">,</span> prefix<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
 <span id="L121" class="LineNr">121 </span>      <span class="Delimiter">}</span>
 <span id="L122" class="LineNr">122 </span>    <span class="Delimiter">}</span>
@@ -202,16 +202,16 @@ if ('onhashchange' in window) {
 <span id="L139" class="LineNr">139 </span>      jump_targets<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>label<span class="Delimiter">);</span>
 <span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
 <span id="L141" class="LineNr">141 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>patch<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L142" class="LineNr">142 </span>    <a href='010vm.cc.html#L32'>instruction</a> inst = patch<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L142" class="LineNr">142 </span>    <a href='010vm.cc.html#L33'>instruction</a> inst = patch<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L143" class="LineNr">143 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L144" class="LineNr">144 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>jump_targets<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span>
+<span id="L144" class="LineNr">144 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>jump_targets<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>label<span class="Delimiter">))</span>
 <span id="L145" class="LineNr">145 </span>        inst<span class="Delimiter">.</span>label = prefix+inst<span class="Delimiter">.</span>label<span class="Delimiter">;</span>
 <span id="L146" class="LineNr">146 </span>      base<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
 <span id="L147" class="LineNr">147 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L148" class="LineNr">148 </span>    <span class="Delimiter">}</span>
 <span id="L149" class="LineNr">149 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L150" class="LineNr">150 </span>      reagent&amp; x = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
-<span id="L151" class="LineNr">151 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &amp;&amp; contains_key<span class="Delimiter">(</span>jump_targets<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
+<span id="L151" class="LineNr">151 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='041jump_target.cc.html#L11'>is_jump_target</a><span class="Delimiter">(</span>x<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>jump_targets<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
 <span id="L152" class="LineNr">152 </span>        x<span class="Delimiter">.</span>name = prefix+x<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
 <span id="L153" class="LineNr">153 </span>    <span class="Delimiter">}</span>
 <span id="L154" class="LineNr">154 </span>    base<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
@@ -228,13 +228,13 @@ if ('onhashchange' in window) {
 <span id="L165" class="LineNr">165 </span><a href='052tangle.cc.html#L167'>check_insert_fragments</a><span class="Delimiter">();</span>
 <span id="L166" class="LineNr">166 </span><span class="Delimiter">:(code)</span>
 <span id="L167" class="LineNr">167 </span><span class="Normal">void</span> <a href='052tangle.cc.html#L167'>check_insert_fragments</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> recipe&gt;::iterator p = Before_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Before_fragments<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> recipe&gt;::iterator p = Before_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Before_fragments<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L169" class="LineNr">169 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
-<span id="L170" class="LineNr">170 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;could not locate insert before label &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L170" class="LineNr">170 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;could not locate insert before label &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L171" class="LineNr">171 </span>  <span class="Delimiter">}</span>
-<span id="L172" class="LineNr">172 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> recipe&gt;::iterator p = After_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != After_fragments<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> recipe&gt;::iterator p = After_fragments<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != After_fragments<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L173" class="LineNr">173 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
-<span id="L174" class="LineNr">174 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;could not locate insert after label &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;could not locate insert after label &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L175" class="LineNr">175 </span>  <span class="Delimiter">}</span>
 <span id="L176" class="LineNr">176 </span><span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span>
@@ -515,21 +515,21 @@ if ('onhashchange' in window) {
 <span id="L452" class="LineNr">452 </span>       <span class="Constant">&quot;  1:num/raw &lt;- copy 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L453" class="LineNr">453 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L454" class="LineNr">454 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L455" class="LineNr">455 </span>  <a href='003trace.cc.html#L235'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
-<span id="L456" class="LineNr">456 </span>  Hide_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L455" class="LineNr">455 </span>  <a href='003trace.cc.html#L257'>CHECK_TRACE_DOESNT_CONTAIN_ERRORS</a><span class="Delimiter">();</span>
+<span id="L456" class="LineNr">456 </span>  Hide_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L457" class="LineNr">457 </span>  <span class="Comment">// try to tangle into recipe foo after transform</span>
 <span id="L458" class="LineNr">458 </span>  load<span class="Delimiter">(</span><span class="Constant">&quot;before &lt;label&gt; [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L459" class="LineNr">459 </span>       <span class="Constant">&quot;  2:num/raw &lt;- copy 35</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
 <span id="L460" class="LineNr">460 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L461" class="LineNr">461 </span>  <a href='003trace.cc.html#L234'>CHECK_TRACE_CONTAINS_ERRORS</a><span class="Delimiter">();</span>
+<span id="L461" class="LineNr">461 </span>  <a href='003trace.cc.html#L256'>CHECK_TRACE_CONTAINS_ERRORS</a><span class="Delimiter">();</span>
 <span id="L462" class="LineNr">462 </span><span class="Delimiter">}</span>
 <span id="L463" class="LineNr">463 </span>
 <span id="L464" class="LineNr">464 </span><span class="Delimiter">:(before &quot;End before Command Handler&quot;)</span>
-<span id="L465" class="LineNr">465 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span>
-<span id="L466" class="LineNr">466 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;we've already tangled some code at label &quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot; in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L465" class="LineNr">465 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span>
+<span id="L466" class="LineNr">466 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;we've already tangled some code at label &quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot; in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L467" class="LineNr">467 </span><span class="Delimiter">:(before &quot;End after Command Handler&quot;)</span>
-<span id="L468" class="LineNr">468 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span>
-<span id="L469" class="LineNr">469 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;we've already tangled some code at label &quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot; in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L468" class="LineNr">468 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Fragments_used<span class="Delimiter">,</span> label<span class="Delimiter">))</span>
+<span id="L469" class="LineNr">469 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;we've already tangled some code at label &quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot; in a previous call to transform_all(). Those locations won't be updated.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 </pre>
 </body>
 </html>
diff --git a/html/053recipe_header.cc.html b/html/053recipe_header.cc.html
index 7ef683cd..348e473d 100644
--- a/html/053recipe_header.cc.html
+++ b/html/053recipe_header.cc.html
@@ -85,40 +85,40 @@ if ('onhashchange' in window) {
 <span id="L20" class="LineNr"> 20 </span>vector&lt;reagent&gt; ingredients<span class="Delimiter">;</span>
 <span id="L21" class="LineNr"> 21 </span>vector&lt;reagent&gt; products<span class="Delimiter">;</span>
 <span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L19'>recipe</a> Constructor&quot;)</span>
-<span id="L23" class="LineNr"> 23 </span>has_header = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L23" class="LineNr"> 23 </span>has_header =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L24" class="LineNr"> 24 </span>
 <span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End Recipe Refinements&quot;)</span>
 <span id="L26" class="LineNr"> 26 </span><span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recipe has a header; parsing&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recipe has a header; parsing&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L28" class="LineNr"> 28 </span>  <a href='053recipe_header.cc.html#L32'>load_recipe_header</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> result<span class="Delimiter">);</span>
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">}</span>
 <span id="L30" class="LineNr"> 30 </span>
 <span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(code)</span>
 <span id="L32" class="LineNr"> 32 </span><span class="Normal">void</span> <a href='053recipe_header.cc.html#L32'>load_recipe_header</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> recipe&amp; result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L33" class="LineNr"> 33 </span>  result<span class="Delimiter">.</span>has_header = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L33" class="LineNr"> 33 </span>  result<span class="Delimiter">.</span>has_header =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L35" class="LineNr"> 35 </span>    string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L35" class="LineNr"> 35 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L36" class="LineNr"> 36 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L37" class="LineNr"> 37 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L38" class="LineNr"> 38 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> header at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr"> 38 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> header at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L39" class="LineNr"> 39 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L40" class="LineNr"> 40 </span>    <span class="Delimiter">}</span>
 <span id="L41" class="LineNr"> 41 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">)</span>
-<span id="L42" class="LineNr"> 42 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; should say '-&gt;' and not '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L42" class="LineNr"> 42 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; should say '-&gt;' and not '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L43" class="LineNr"> 43 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;-&gt;&quot;</span><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L44" class="LineNr"> 44 </span>    result<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>s<span class="Delimiter">));</span>
-<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header ingredient: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header ingredient: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L46" class="LineNr"> 46 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">}</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'['</span> &amp;&amp; in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr"> 49 </span>    string s = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L49" class="LineNr"> 49 </span>    string s = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L50" class="LineNr"> 50 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L52" class="LineNr"> 52 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> header at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L52" class="LineNr"> 52 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete <a href='010vm.cc.html#L19'>recipe</a> header at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L53" class="LineNr"> 53 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L54" class="LineNr"> 54 </span>    <span class="Delimiter">}</span>
 <span id="L55" class="LineNr"> 55 </span>    result<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>s<span class="Delimiter">));</span>
-<span id="L56" class="LineNr"> 56 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header product: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>products<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L56" class="LineNr"> 56 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;header product: &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>products<span class="Delimiter">.</span>back<span class="Delimiter">().</span>original_string &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L57" class="LineNr"> 57 </span>    skip_whitespace_but_not_newline<span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L58" class="LineNr"> 58 </span>  <span class="Delimiter">}</span>
 <span id="L59" class="LineNr"> 59 </span>  <span class="Comment">// End Load Recipe Header(result)</span>
@@ -200,7 +200,7 @@ if ('onhashchange' in window) {
 <span id="L135" class="LineNr">135 </span>
 <span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;End Recipe Body(result)&quot;)</span>
 <span id="L137" class="LineNr">137 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L138" class="LineNr">138 </span>  result<span class="Delimiter">.</span>has_header = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span>  result<span class="Delimiter">.</span>has_header =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L139" class="LineNr">139 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L140" class="LineNr">140 </span>    <span class="Normal">const</span> instruction&amp; inst = result<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L141" class="LineNr">141 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;reply&quot;</span> &amp;&amp; !inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
@@ -208,13 +208,13 @@ if ('onhashchange' in window) {
 <span id="L143" class="LineNr">143 </span>        || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;next-ingredient&quot;</span>
 <span id="L144" class="LineNr">144 </span>        || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;ingredient&quot;</span>
 <span id="L145" class="LineNr">145 </span>        || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;rewind-ingredients&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L146" class="LineNr">146 </span>      result<span class="Delimiter">.</span>has_header = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>      result<span class="Delimiter">.</span>has_header =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L147" class="LineNr">147 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L148" class="LineNr">148 </span>    <span class="Delimiter">}</span>
 <span id="L149" class="LineNr">149 </span>  <span class="Delimiter">}</span>
 <span id="L150" class="LineNr">150 </span><span class="Delimiter">}</span>
 <span id="L151" class="LineNr">151 </span><span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L152" class="LineNr">152 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has a header&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L152" class="LineNr">152 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has a header&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L153" class="LineNr">153 </span><span class="Delimiter">}</span>
 <span id="L154" class="LineNr">154 </span>
 <span id="L155" class="LineNr">155 </span><span class="Comment">//: Support type abbreviations in headers.</span>
@@ -253,7 +253,7 @@ if ('onhashchange' in window) {
 <span id="L188" class="LineNr">188 </span>  <span class="Delimiter">}</span>
 <span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
 <span id="L190" class="LineNr">190 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;next-ingredient-without-typechecking&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L191" class="LineNr">191 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;never call 'next-ingredient-without-typechecking' directly</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L191" class="LineNr">191 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;never call 'next-ingredient-without-typechecking' directly</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L192" class="LineNr">192 </span>  curr<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L193" class="LineNr">193 </span><span class="Delimiter">}</span>
 <span id="L194" class="LineNr">194 </span>
@@ -298,7 +298,7 @@ if ('onhashchange' in window) {
 <span id="L233" class="LineNr">233 </span>
 <span id="L234" class="LineNr">234 </span><span class="Delimiter">:(after &quot;use-before-set Error&quot;)</span>
 <span id="L235" class="LineNr">235 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_present_in_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> ingredient<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
-<span id="L236" class="LineNr">236 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L236" class="LineNr">236 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L237" class="LineNr">237 </span>
 <span id="L238" class="LineNr">238 </span><span class="Delimiter">:(scenario load_ingredients_missing_error_2)</span>
 <span id="L239" class="LineNr">239 </span><span class="Special">% Hide_errors = true;</span>
@@ -311,15 +311,15 @@ if ('onhashchange' in window) {
 <span id="L246" class="LineNr">246 </span>
 <span id="L247" class="LineNr">247 </span><span class="Delimiter">:(after &quot;missing-type Error 1&quot;)</span>
 <span id="L248" class="LineNr">248 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_present_in_ingredients<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> recipe_name<span class="Delimiter">)),</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span>
-<span id="L249" class="LineNr">249 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L249" class="LineNr">249 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L250" class="LineNr">250 </span>
 <span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
 <span id="L252" class="LineNr">252 </span><span class="Normal">bool</span> is_present_in_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; callee<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; ingredient_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L253" class="LineNr">253 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L254" class="LineNr">254 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == ingredient_name<span class="Delimiter">)</span>
-<span id="L255" class="LineNr">255 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L255" class="LineNr">255 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L256" class="LineNr">256 </span>  <span class="Delimiter">}</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L258" class="LineNr">258 </span><span class="Delimiter">}</span>
 <span id="L259" class="LineNr">259 </span>
 <span id="L260" class="LineNr">260 </span><span class="SalientComment">//:: Check all calls against headers.</span>
@@ -353,7 +353,7 @@ if ('onhashchange' in window) {
 <span id="L288" class="LineNr">288 </span><span class="Delimiter">:(code)</span>
 <span id="L289" class="LineNr">289 </span><span class="Normal">void</span> check_calls_against_header<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L290" class="LineNr">290 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L291" class="LineNr">291 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check calls inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L291" class="LineNr">291 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check calls inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L292" class="LineNr">292 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L293" class="LineNr">293 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L294" class="LineNr">294 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -362,16 +362,16 @@ if ('onhashchange' in window) {
 <span id="L297" class="LineNr">297 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L298" class="LineNr">298 </span>      <span class="Comment">// ingredients coerced from call to callee</span>
 <span id="L299" class="LineNr">299 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L300" class="LineNr">300 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L301" class="LineNr">301 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L300" class="LineNr">300 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L301" class="LineNr">301 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L302" class="LineNr">302 </span>      <span class="Delimiter">}</span>
 <span id="L303" class="LineNr">303 </span>    <span class="Delimiter">}</span>
 <span id="L304" class="LineNr">304 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L305" class="LineNr">305 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L306" class="LineNr">306 </span>      <span class="Comment">// products coerced from callee to call</span>
 <span id="L307" class="LineNr">307 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L308" class="LineNr">308 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L309" class="LineNr">309 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L308" class="LineNr">308 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L309" class="LineNr">309 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  ['&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' vs '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;']</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L310" class="LineNr">310 </span>      <span class="Delimiter">}</span>
 <span id="L311" class="LineNr">311 </span>    <span class="Delimiter">}</span>
 <span id="L312" class="LineNr">312 </span>  <span class="Delimiter">}</span>
@@ -397,17 +397,17 @@ if ('onhashchange' in window) {
 <span id="L332" class="LineNr">332 </span><span class="Normal">void</span> check_return_instructions_against_header<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L333" class="LineNr">333 </span>  <span class="Normal">const</span> recipe&amp; caller_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L334" class="LineNr">334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_recipe<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L335" class="LineNr">335 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- checking return instructions against header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L335" class="LineNr">335 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- checking return instructions against header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L336" class="LineNr">336 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L337" class="LineNr">337 </span>    <span class="Normal">const</span> instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L338" class="LineNr">338 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;reply&quot;</span> &amp;&amp; inst<span class="Delimiter">.</span>name != <span class="Constant">&quot;return&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L339" class="LineNr">339 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L340" class="LineNr">340 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replied with the wrong number of products at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L340" class="LineNr">340 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replied with the wrong number of products at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L341" class="LineNr">341 </span>      <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L342" class="LineNr">342 </span>    <span class="Delimiter">}</span>
 <span id="L343" class="LineNr">343 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L344" class="LineNr">344 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L345" class="LineNr">345 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replied with the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L345" class="LineNr">345 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replied with the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L346" class="LineNr">346 </span>    <span class="Delimiter">}</span>
 <span id="L347" class="LineNr">347 </span>  <span class="Delimiter">}</span>
 <span id="L348" class="LineNr">348 </span><span class="Delimiter">}</span>
@@ -427,7 +427,7 @@ if ('onhashchange' in window) {
 <span id="L362" class="LineNr">362 </span><span class="muRecipe">def</span> foo<span class="muRecipe"> -&gt; </span>x:num [
 <span id="L363" class="LineNr">363 </span>  local-scope
 <span id="L364" class="LineNr">364 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L365" class="LineNr">365 </span>  <span class="Normal">z</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/<span class="Constant">false</span>
+<span id="L365" class="LineNr">365 </span>  <span class="Normal">z</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
 <span id="L366" class="LineNr">366 </span>  <span class="Identifier">return</span>-<span class="Normal">if</span> z<span class="Delimiter">,</span> z
 <span id="L367" class="LineNr">367 </span>]
 <span id="L368" class="LineNr">368 </span><span class="traceContains">+error: foo: replied with the wrong type at 'return-if z, z'</span>
@@ -468,12 +468,12 @@ if ('onhashchange' in window) {
 <span id="L403" class="LineNr">403 </span><span class="Normal">void</span> check_header_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L404" class="LineNr">404 </span>  recipe&amp; caller_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L405" class="LineNr">405 </span>  caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L406" class="LineNr">406 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- checking return instructions against header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L406" class="LineNr">406 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- checking return instructions against header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L407" class="LineNr">407 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L408" class="LineNr">408 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type == <span class="Constant">NULL</span><span class="Delimiter">)</span>
-<span id="L409" class="LineNr">409 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient '&quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L410" class="LineNr">410 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span>
-<span id="L411" class="LineNr">411 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' can't repeat in the ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L409" class="LineNr">409 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient '&quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' has no type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L410" class="LineNr">410 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span>
+<span id="L411" class="LineNr">411 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' can't repeat in the ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L412" class="LineNr">412 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
 <span id="L413" class="LineNr">413 </span>  <span class="Delimiter">}</span>
 <span id="L414" class="LineNr">414 </span><span class="Delimiter">}</span>
@@ -500,37 +500,37 @@ if ('onhashchange' in window) {
 <span id="L435" class="LineNr">435 </span><span class="Normal">void</span> deduce_types_from_header<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L436" class="LineNr">436 </span>  recipe&amp; caller_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L437" class="LineNr">437 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L438" class="LineNr">438 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- deduce types from header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L438" class="LineNr">438 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- deduce types from header for &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L439" class="LineNr">439 </span>  map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt; header_type<span class="Delimiter">;</span>
 <span id="L440" class="LineNr">440 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L441" class="LineNr">441 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
 <span id="L442" class="LineNr">442 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L443" class="LineNr">443 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L443" class="LineNr">443 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L444" class="LineNr">444 </span>  <span class="Delimiter">}</span>
 <span id="L445" class="LineNr">445 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L446" class="LineNr">446 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
 <span id="L447" class="LineNr">447 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L448" class="LineNr">448 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L448" class="LineNr">448 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L449" class="LineNr">449 </span>  <span class="Delimiter">}</span>
 <span id="L450" class="LineNr">450 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L451" class="LineNr">451 </span>    instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L452" class="LineNr">452 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L452" class="LineNr">452 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L453" class="LineNr">453 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L454" class="LineNr">454 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L455" class="LineNr">455 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span>
+<span id="L455" class="LineNr">455 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span>
 <span id="L456" class="LineNr">456 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L457" class="LineNr">457 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
 <span id="L458" class="LineNr">458 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
-<span id="L459" class="LineNr">459 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L459" class="LineNr">459 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L460" class="LineNr">460 </span>    <span class="Delimiter">}</span>
 <span id="L461" class="LineNr">461 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L462" class="LineNr">462 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L462" class="LineNr">462 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  product: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L463" class="LineNr">463 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L464" class="LineNr">464 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span>
+<span id="L464" class="LineNr">464 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>header_type<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> == header_type<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span>
 <span id="L465" class="LineNr">465 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L466" class="LineNr">466 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
 <span id="L467" class="LineNr">467 </span>      inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>header_type<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">));</span>
-<span id="L468" class="LineNr">468 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L468" class="LineNr">468 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L469" class="LineNr">469 </span>    <span class="Delimiter">}</span>
 <span id="L470" class="LineNr">470 </span>  <span class="Delimiter">}</span>
 <span id="L471" class="LineNr">471 </span><span class="Delimiter">}</span>
@@ -556,7 +556,7 @@ if ('onhashchange' in window) {
 <span id="L491" class="LineNr">491 </span><span class="Delimiter">:(code)</span>
 <span id="L492" class="LineNr">492 </span><span class="Normal">void</span> fill_in_return_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L493" class="LineNr">493 </span>  recipe&amp; caller_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L494" class="LineNr">494 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- fill in return ingredients from header for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L494" class="LineNr">494 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- fill in return ingredients from header for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L495" class="LineNr">495 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_recipe<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L496" class="LineNr">496 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L497" class="LineNr">497 </span>    instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
@@ -569,7 +569,7 @@ if ('onhashchange' in window) {
 <span id="L504" class="LineNr">504 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>final_instruction<span class="Delimiter">.</span>name == <span class="Constant">&quot;reply&quot;</span> || final_instruction<span class="Delimiter">.</span>name == <span class="Constant">&quot;return&quot;</span><span class="Delimiter">)</span>
 <span id="L505" class="LineNr">505 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L506" class="LineNr">506 </span>  <span class="Delimiter">}</span>
-<span id="L507" class="LineNr">507 </span>  <a href='010vm.cc.html#L32'>instruction</a> inst<span class="Delimiter">;</span>
+<span id="L507" class="LineNr">507 </span>  <a href='010vm.cc.html#L33'>instruction</a> inst<span class="Delimiter">;</span>
 <span id="L508" class="LineNr">508 </span>  inst<span class="Delimiter">.</span>name = <span class="Constant">&quot;return&quot;</span><span class="Delimiter">;</span>
 <span id="L509" class="LineNr">509 </span>  add_header_products<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L510" class="LineNr">510 </span>  caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
@@ -583,7 +583,7 @@ if ('onhashchange' in window) {
 <span id="L518" class="LineNr">518 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> == i<span class="Delimiter">)</span>
 <span id="L519" class="LineNr">519 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L520" class="LineNr">520 </span>    <span class="Comment">// if it's missing /same_as_ingredient, try to fill it in</span>
-<span id="L521" class="LineNr">521 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &amp;&amp; !has_property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same_as_ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L521" class="LineNr">521 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &amp;&amp; !has_property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;same_as_ingredient&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L522" class="LineNr">522 </span>      ostringstream same_as_ingredient<span class="Delimiter">;</span>
 <span id="L523" class="LineNr">523 </span>      same_as_ingredient &lt;&lt; get<span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>ingredient_index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
 <span id="L524" class="LineNr">524 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</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;same-as-ingredient&quot;</span><span class="Delimiter">,</span> <span class="Normal">new</span> string_tree<span class="Delimiter">(</span>same_as_ingredient<span class="Delimiter">.</span>str<span class="Delimiter">())));</span>
@@ -614,7 +614,7 @@ if ('onhashchange' in window) {
 <span id="L549" class="LineNr">549 </span>  load-ingredients
 <span id="L550" class="LineNr">550 </span>  z<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> y
 <span id="L551" class="LineNr">551 </span>]
-<span id="L552" class="LineNr">552 </span><span class="traceContains">+transform: <a href='010vm.cc.html#L32'>instruction</a>: return {z: &quot;number&quot;}</span>
+<span id="L552" class="LineNr">552 </span><span class="traceContains">+transform: <a href='010vm.cc.html#L33'>instruction</a>: return {z: &quot;number&quot;}</span>
 <span id="L553" class="LineNr">553 </span><span class="traceContains">+mem: storing 8 in location 1</span>
 <span id="L554" class="LineNr">554 </span>
 <span id="L555" class="LineNr">555 </span><span class="Delimiter">:(scenario return_on_fallthrough_already_exists)</span>
@@ -627,8 +627,8 @@ if ('onhashchange' in window) {
 <span id="L562" class="LineNr">562 </span>  z<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> y  <span class="Comment"># no type for z</span>
 <span id="L563" class="LineNr">563 </span>  <span class="Identifier">return</span> z
 <span id="L564" class="LineNr">564 </span>]
-<span id="L565" class="LineNr">565 </span><span class="traceContains">+transform: <a href='010vm.cc.html#L32'>instruction</a>: return {z: ()}</span>
-<span id="L566" class="LineNr">566 </span><span class="traceAbsent">-transform: <a href='010vm.cc.html#L32'>instruction</a>: return z:num</span>
+<span id="L565" class="LineNr">565 </span><span class="traceContains">+transform: <a href='010vm.cc.html#L33'>instruction</a>: return {z: ()}</span>
+<span id="L566" class="LineNr">566 </span><span class="traceAbsent">-transform: <a href='010vm.cc.html#L33'>instruction</a>: return z:num</span>
 <span id="L567" class="LineNr">567 </span><span class="traceContains">+mem: storing 8 in location 1</span>
 <span id="L568" class="LineNr">568 </span>
 <span id="L569" class="LineNr">569 </span><span class="Delimiter">:(scenario return_causes_error_in_empty_recipe)</span>
@@ -645,7 +645,7 @@ if ('onhashchange' in window) {
 <span id="L580" class="LineNr">580 </span>  local-scope
 <span id="L581" class="LineNr">581 </span>  load-ingredients
 <span id="L582" class="LineNr">582 </span>  z<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> y  <span class="Comment"># no type for z</span>
-<span id="L583" class="LineNr">583 </span>  <span class="Identifier">return</span>-<span class="Normal">if</span> <span class="Constant">0</span>/<span class="Constant">false</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L583" class="LineNr">583 </span>  <span class="Identifier">return</span>-<span class="Normal">if</span><span class="Constant"> false</span><span class="Delimiter">,</span> <span class="Constant">34</span>
 <span id="L584" class="LineNr">584 </span>]
 <span id="L585" class="LineNr">585 </span><span class="traceContains">+mem: storing 8 in location 1</span>
 <span id="L586" class="LineNr">586 </span>
@@ -689,12 +689,12 @@ if ('onhashchange' in window) {
 <span id="L624" class="LineNr">624 </span><span class="Normal">void</span> check_recipe_header_constraints<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L625" class="LineNr">625 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L626" class="LineNr">626 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name != <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L627" class="LineNr">627 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;check <a href='010vm.cc.html#L19'>recipe</a> header constraints for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L627" class="LineNr">627 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;check <a href='010vm.cc.html#L19'>recipe</a> header constraints for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L628" class="LineNr">628 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L629" class="LineNr">629 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> expected_ingredient<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
+<span id="L629" class="LineNr">629 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> expected_ingredient<span class="Delimiter">(</span><span class="Constant">&quot;x:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
 <span id="L630" class="LineNr">630 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L631" class="LineNr">631 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>expected_ingredient<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L632" class="LineNr">632 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;ingredients of <a href='010vm.cc.html#L19'>recipe</a> 'main' must all be text (address:array:character)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L632" class="LineNr">632 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;ingredients of <a href='010vm.cc.html#L19'>recipe</a> 'main' must all be text (address:array:character)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L633" class="LineNr">633 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L634" class="LineNr">634 </span>    <span class="Delimiter">}</span>
 <span id="L635" class="LineNr">635 </span>  <span class="Delimiter">}</span>
@@ -702,7 +702,7 @@ if ('onhashchange' in window) {
 <span id="L637" class="LineNr">637 </span>  reagent<span class="Comment">/*</span><span class="Comment">local</span><span class="Comment">*/</span> expected_product<span class="Delimiter">(</span><span class="Constant">&quot;x:number&quot;</span><span class="Delimiter">);</span>
 <span id="L638" class="LineNr">638 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>nprod &gt; <span class="Constant">1</span>
 <span id="L639" class="LineNr">639 </span>      || <span class="Delimiter">(</span>nprod == <span class="Constant">1</span> &amp;&amp; !types_strictly_match<span class="Delimiter">(</span>expected_product<span class="Delimiter">,</span> caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))))</span> <span class="Delimiter">{</span>
-<span id="L640" class="LineNr">640 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe 'main' must return at most a single product, a number</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L640" class="LineNr">640 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;recipe 'main' must return at most a single product, a number</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L641" class="LineNr">641 </span>  <span class="Delimiter">}</span>
 <span id="L642" class="LineNr">642 </span><span class="Delimiter">}</span>
 </pre>
diff --git a/html/054static_dispatch.cc.html b/html/054static_dispatch.cc.html
index ba5bcf8e..2f3b6c65 100644
--- a/html/054static_dispatch.cc.html
+++ b/html/054static_dispatch.cc.html
@@ -96,7 +96,7 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span>
 <span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(before &quot;End Load Recipe Header(result)&quot;)</span>
 <span id="L33" class="LineNr"> 33 </span><span class="Comment">// there can only ever be one variant for main</span>
-<span id="L34" class="LineNr"> 34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>name != <span class="Constant">&quot;main&quot;</span> &amp;&amp; contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>name != <span class="Constant">&quot;main&quot;</span> &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r = get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
 <span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L37" class="LineNr"> 37 </span>    string new_name = <a href='054static_dispatch.cc.html#L56'>matching_variant_name</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
@@ -106,9 +106,9 @@ if ('onhashchange' in window) {
 <span id="L41" class="LineNr"> 41 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
 <span id="L42" class="LineNr"> 42 </span>      <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> result<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
 <span id="L43" class="LineNr"> 43 </span>    <span class="Delimiter">}</span>
-<span id="L44" class="LineNr"> 44 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; new_name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L44" class="LineNr"> 44 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; new_name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L45" class="LineNr"> 45 </span>    result<span class="Delimiter">.</span>name = new_name<span class="Delimiter">;</span>
-<span id="L46" class="LineNr"> 46 </span>    result<span class="Delimiter">.</span>is_autogenerated = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L46" class="LineNr"> 46 </span>    result<span class="Delimiter">.</span>is_autogenerated =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Delimiter">}</span>
 <span id="L48" class="LineNr"> 48 </span><span class="Delimiter">}</span>
 <span id="L49" class="LineNr"> 49 </span><span class="Normal">else</span> <span class="Delimiter">{</span>
@@ -130,21 +130,21 @@ if ('onhashchange' in window) {
 <span id="L65" class="LineNr"> 65 </span><span class="Delimiter">}</span>
 <span id="L66" class="LineNr"> 66 </span>
 <span id="L67" class="LineNr"> 67 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L67'>all_reagents_match</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; r1<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; r2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L70" class="LineNr"> 70 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L71" class="LineNr"> 71 </span>    expand_type_abbreviations<span class="Delimiter">(</span>r1<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
 <span id="L72" class="LineNr"> 72 </span>    expand_type_abbreviations<span class="Delimiter">(</span>r2<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
 <span id="L73" class="LineNr"> 73 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!deeply_equal_type_names<span class="Delimiter">(</span>r1<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> r2<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L74" class="LineNr"> 74 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L75" class="LineNr"> 75 </span>  <span class="Delimiter">}</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r1<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L77" class="LineNr"> 77 </span>    expand_type_abbreviations<span class="Delimiter">(</span>r1<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
 <span id="L78" class="LineNr"> 78 </span>    expand_type_abbreviations<span class="Delimiter">(</span>r2<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
 <span id="L79" class="LineNr"> 79 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!deeply_equal_type_names<span class="Delimiter">(</span>r1<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> r2<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L80" class="LineNr"> 80 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">}</span>
-<span id="L82" class="LineNr"> 82 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L83" class="LineNr"> 83 </span><span class="Delimiter">}</span>
 <span id="L84" class="LineNr"> 84 </span>
 <span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
@@ -159,14 +159,14 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr"> 94 </span><span class="Normal">bool</span> deeply_equal_type_names<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* a<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L95" class="LineNr"> 95 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!a<span class="Delimiter">)</span> <span class="Identifier">return</span> !b<span class="Delimiter">;</span>
 <span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!b<span class="Delimiter">)</span> <span class="Identifier">return</span> !a<span class="Delimiter">;</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>atom != b<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>atom != b<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L99" class="LineNr"> 99 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span> &amp;&amp; b<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
-<span id="L100" class="LineNr">100 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L101" class="LineNr">101 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
-<span id="L102" class="LineNr">102 </span>      <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>b<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L102" class="LineNr">102 </span>      <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>b<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L103" class="LineNr">103 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>b<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
-<span id="L104" class="LineNr">104 </span>      <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>      <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L105" class="LineNr">105 </span>    <span class="Identifier">return</span> a<span class="Delimiter">-&gt;</span>name == b<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Delimiter">}</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Identifier">return</span> deeply_equal_type_names<span class="Delimiter">(</span>a<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> b<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
@@ -227,7 +227,7 @@ if ('onhashchange' in window) {
 <span id="L162" class="LineNr">162 </span><span class="Delimiter">:(code)</span>
 <span id="L163" class="LineNr">163 </span><span class="Normal">void</span> <a href='054static_dispatch.cc.html#L163'>resolve_ambiguous_calls</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L164" class="LineNr">164 </span>  recipe&amp; caller_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L165" class="LineNr">165 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- resolve ambiguous calls for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L165" class="LineNr">165 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- resolve ambiguous calls for <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L167" class="LineNr">167 </span>    instruction&amp; inst = caller_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L168" class="LineNr">168 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>is_label<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -237,8 +237,8 @@ if ('onhashchange' in window) {
 <span id="L172" class="LineNr">172 </span>
 <span id="L173" class="LineNr">173 </span><span class="Normal">void</span> <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L174" class="LineNr">174 </span>  <span class="Comment">// End resolve_ambiguous_call(r, index, inst, caller_recipe) Special-cases</span>
-<span id="L175" class="LineNr">175 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction &quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L177" class="LineNr">177 </span>  Resolve_stack<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>r<span class="Delimiter">,</span> index<span class="Delimiter">));</span>
 <span id="L178" class="LineNr">178 </span>  string new_name = best_variant<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L179" class="LineNr">179 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!new_name<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
@@ -254,511 +254,418 @@ if ('onhashchange' in window) {
 <span id="L189" class="LineNr">189 </span>
 <span id="L190" class="LineNr">190 </span>  <span class="Comment">// Static Dispatch Phase 1</span>
 <span id="L191" class="LineNr">191 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 1\n&quot;;</span>
-<span id="L192" class="LineNr">192 </span>  candidates = <a href='054static_dispatch.cc.html#L245'>strictly_matching_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
+<span id="L192" class="LineNr">192 </span>  candidates = <a href='054static_dispatch.cc.html#L240'>strictly_matching_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
 <span id="L193" class="LineNr">193 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> best_variant<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L194" class="LineNr">194 </span>
-<span id="L195" class="LineNr">195 </span>  <span class="Comment">// Static Dispatch Phase 2</span>
-<span id="L196" class="LineNr">196 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 2\n&quot;;</span>
-<span id="L197" class="LineNr">197 </span>  candidates = <a href='054static_dispatch.cc.html#L274'>strictly_matching_variants_except_literal_against_address_or_boolean</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> best_variant<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 3\n&quot;;</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Comment">// Static Dispatch Phase 2</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Comment">//: (shape-shifting recipes in a later layer)</span>
+<span id="L198" class="LineNr">198 </span>  <span class="Comment">// End Static Dispatch Phase 2</span>
 <span id="L199" class="LineNr">199 </span>
-<span id="L200" class="LineNr">200 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 3\n&quot;;</span>
-<span id="L201" class="LineNr">201 </span>  <span class="Comment">// Static Dispatch Phase 3</span>
-<span id="L202" class="LineNr">202 </span>  <span class="Comment">//: (shape-shifting recipes in a later layer)</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Comment">// End Static Dispatch Phase 3</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Comment">// Static Dispatch Phase 3</span>
+<span id="L201" class="LineNr">201 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 4\n&quot;;</span>
+<span id="L202" class="LineNr">202 </span>  candidates = <a href='054static_dispatch.cc.html#L269'>matching_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> best_variant<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L204" class="LineNr">204 </span>
-<span id="L205" class="LineNr">205 </span>  <span class="Comment">// Static Dispatch Phase 4</span>
-<span id="L206" class="LineNr">206 </span><span class="CommentedCode">//?   cerr &lt;&lt; inst.name &lt;&lt; &quot; phase 4\n&quot;;</span>
-<span id="L207" class="LineNr">207 </span>  candidates = <a href='054static_dispatch.cc.html#L313'>matching_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> best_variant<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L209" class="LineNr">209 </span>
-<span id="L210" class="LineNr">210 </span>  <span class="Comment">// error messages</span>
-<span id="L211" class="LineNr">211 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_primitive<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">)))</span> <span class="Delimiter">{</span>  <span class="Comment">// we currently don't check types for primitive variants</span>
-<span id="L212" class="LineNr">212 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L213" class="LineNr">213 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;types don't match in call for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L214" class="LineNr">214 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  which tries to call '&quot;</span> &lt;&lt; original_header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L215" class="LineNr">215 </span>    <span class="Delimiter">}</span>
-<span id="L216" class="LineNr">216 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L217" class="LineNr">217 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to find a matching call for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L218" class="LineNr">218 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  available variants are:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L219" class="LineNr">219 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L220" class="LineNr">220 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; <a href='054static_dispatch.cc.html#L594'>original_header_label</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L221" class="LineNr">221 </span>    <span class="Delimiter">}</span>
-<span id="L222" class="LineNr">222 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>list&lt;call&gt;::iterator p = <span class="Comment">/*</span><span class="Comment">skip</span><span class="Comment">*/</span>++Resolve_stack<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Resolve_stack<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>      <span class="Normal">const</span> recipe&amp; specializer_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">);</span>
-<span id="L224" class="LineNr">224 </span>      <span class="Normal">const</span> instruction&amp; specializer_inst = specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>running_step_index<span class="Delimiter">);</span>
-<span id="L225" class="LineNr">225 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>name != <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>
-<span id="L226" class="LineNr">226 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>specializer_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in &quot;</span> &lt;&lt; specializer_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L227" class="LineNr">227 </span>      <span class="Normal">else</span>
-<span id="L228" class="LineNr">228 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>specializer_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L229" class="LineNr">229 </span>      <span class="Comment">// One special-case to help with the rewrite_stash transform. (cross-layer)</span>
-<span id="L230" class="LineNr">230 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;stash_&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L231" class="LineNr">231 </span>        <a href='010vm.cc.html#L32'>instruction</a> stash_inst<span class="Delimiter">;</span>
-<span id="L232" class="LineNr">232 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L377'>next_stash</a><span class="Delimiter">(</span>*p<span class="Delimiter">,</span> &amp;stash_inst<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L233" class="LineNr">233 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>name != <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>
-<span id="L234" class="LineNr">234 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (part of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>stash_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in &quot;</span> &lt;&lt; specializer_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L235" class="LineNr">235 </span>          <span class="Normal">else</span>
-<span id="L236" class="LineNr">236 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (part of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>stash_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L237" class="LineNr">237 </span>        <span class="Delimiter">}</span>
-<span id="L238" class="LineNr">238 </span>      <span class="Delimiter">}</span>
-<span id="L239" class="LineNr">239 </span>    <span class="Delimiter">}</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Delimiter">}</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L242" class="LineNr">242 </span><span class="Delimiter">}</span>
-<span id="L243" class="LineNr">243 </span>
-<span id="L244" class="LineNr">244 </span><span class="Comment">// phase 1</span>
-<span id="L245" class="LineNr">245 </span>vector&lt;recipe_ordinal&gt; <a href='054static_dispatch.cc.html#L245'>strictly_matching_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L246" class="LineNr">246 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L248" class="LineNr">248 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L249" class="LineNr">249 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking variant (strict) &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L250" class="LineNr">250 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L256'>all_header_reagents_strictly_match</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span>
-<span id="L251" class="LineNr">251 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L252" class="LineNr">252 </span>  <span class="Delimiter">}</span>
-<span id="L253" class="LineNr">253 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L254" class="LineNr">254 </span><span class="Delimiter">}</span>
-<span id="L255" class="LineNr">255 </span>
-<span id="L256" class="LineNr">256 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L256'>all_header_reagents_strictly_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L258" class="LineNr">258 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L259" class="LineNr">259 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;strict match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L260" class="LineNr">260 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L261" class="LineNr">261 </span>    <span class="Delimiter">}</span>
-<span id="L262" class="LineNr">262 </span>  <span class="Delimiter">}</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L264" class="LineNr">264 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L265" class="LineNr">265 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L266" class="LineNr">266 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;strict match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L267" class="LineNr">267 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L268" class="LineNr">268 </span>    <span class="Delimiter">}</span>
-<span id="L269" class="LineNr">269 </span>  <span class="Delimiter">}</span>
-<span id="L270" class="LineNr">270 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L271" class="LineNr">271 </span><span class="Delimiter">}</span>
-<span id="L272" class="LineNr">272 </span>
-<span id="L273" class="LineNr">273 </span><span class="Comment">// phase 2</span>
-<span id="L274" class="LineNr">274 </span>vector&lt;recipe_ordinal&gt; <a href='054static_dispatch.cc.html#L274'>strictly_matching_variants_except_literal_against_address_or_boolean</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L275" class="LineNr">275 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L277" class="LineNr">277 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L278" class="LineNr">278 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking variant (strict except literal-against-boolean) &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L279" class="LineNr">279 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L285'>all_header_reagents_strictly_match_except_literal_against_address_or_boolean</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span>
-<span id="L280" class="LineNr">280 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L281" class="LineNr">281 </span>  <span class="Delimiter">}</span>
-<span id="L282" class="LineNr">282 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L283" class="LineNr">283 </span><span class="Delimiter">}</span>
-<span id="L284" class="LineNr">284 </span>
-<span id="L285" class="LineNr">285 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L285'>all_header_reagents_strictly_match_except_literal_against_address_or_boolean</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L286" class="LineNr">286 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L287" class="LineNr">287 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match_except_literal_against_address_or_boolean<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L288" class="LineNr">288 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L289" class="LineNr">289 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L290" class="LineNr">290 </span>    <span class="Delimiter">}</span>
-<span id="L291" class="LineNr">291 </span>  <span class="Delimiter">}</span>
-<span id="L292" class="LineNr">292 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L293" class="LineNr">293 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L294" class="LineNr">294 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match_except_literal_against_address_or_boolean<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L295" class="LineNr">295 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L296" class="LineNr">296 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L297" class="LineNr">297 </span>    <span class="Delimiter">}</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Delimiter">}</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L300" class="LineNr">300 </span><span class="Delimiter">}</span>
-<span id="L301" class="LineNr">301 </span>
-<span id="L302" class="LineNr">302 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L302'>types_strictly_match_except_literal_against_address_or_boolean</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; to<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L303" class="LineNr">303 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; <a href='021check_instruction.cc.html#L231'>is_mu_boolean</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span>
-<span id="L304" class="LineNr">304 </span>    <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span> || from<span class="Delimiter">.</span>name == <span class="Constant">&quot;1&quot;</span><span class="Delimiter">;</span>
-<span id="L305" class="LineNr">305 </span>  <span class="Comment">// Match Literal Zero Against Address {</span>
-<span id="L306" class="LineNr">306 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span>
-<span id="L307" class="LineNr">307 </span>    <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">;</span>
-<span id="L308" class="LineNr">308 </span>  <span class="Comment">// }</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Identifier">return</span> types_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
-<span id="L310" class="LineNr">310 </span><span class="Delimiter">}</span>
-<span id="L311" class="LineNr">311 </span>
-<span id="L312" class="LineNr">312 </span><span class="Comment">// phase 4</span>
-<span id="L313" class="LineNr">313 </span>vector&lt;recipe_ordinal&gt; <a href='054static_dispatch.cc.html#L313'>matching_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L314" class="LineNr">314 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
-<span id="L315" class="LineNr">315 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L316" class="LineNr">316 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L317" class="LineNr">317 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking variant &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L318" class="LineNr">318 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L324'>all_header_reagents_match</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span>
-<span id="L319" class="LineNr">319 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L320" class="LineNr">320 </span>  <span class="Delimiter">}</span>
-<span id="L321" class="LineNr">321 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L322" class="LineNr">322 </span><span class="Delimiter">}</span>
-<span id="L323" class="LineNr">323 </span>
-<span id="L324" class="LineNr">324 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L324'>all_header_reagents_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L325" class="LineNr">325 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L326" class="LineNr">326 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L327" class="LineNr">327 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L328" class="LineNr">328 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L329" class="LineNr">329 </span>    <span class="Delimiter">}</span>
-<span id="L330" class="LineNr">330 </span>  <span class="Delimiter">}</span>
-<span id="L331" class="LineNr">331 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L332" class="LineNr">332 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L333" class="LineNr">333 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L334" class="LineNr">334 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L335" class="LineNr">335 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L336" class="LineNr">336 </span>    <span class="Delimiter">}</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Delimiter">}</span>
-<span id="L338" class="LineNr">338 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L339" class="LineNr">339 </span><span class="Delimiter">}</span>
-<span id="L340" class="LineNr">340 </span>
-<span id="L341" class="LineNr">341 </span><span class="Comment">// tie-breaker for each phase</span>
-<span id="L342" class="LineNr">342 </span><span class="Normal">const</span> recipe&amp; best_variant<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; candidates<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L343" class="LineNr">343 </span>  assert<span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L344" class="LineNr">344 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Normal">int</span> min_score = <span class="Constant">999</span><span class="Delimiter">;</span>
-<span id="L346" class="LineNr">346 </span>  <span class="Normal">int</span> min_index = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L348" class="LineNr">348 </span>    <span class="Normal">const</span> recipe&amp; candidate = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L349" class="LineNr">349 </span>    <span class="Comment">// prefer variants without extra or missing ingredients or products</span>
-<span id="L350" class="LineNr">350 </span>    <span class="Normal">int</span> score = abs<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">)</span>-SIZE<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">))</span>
-<span id="L351" class="LineNr">351 </span>                          + abs<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span>-SIZE<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
-<span id="L352" class="LineNr">352 </span>    <span class="Comment">// prefer variants with non-address ingredients or products</span>
-<span id="L353" class="LineNr">353 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L354" class="LineNr">354 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span>
-<span id="L355" class="LineNr">355 </span>        ++score<span class="Delimiter">;</span>
-<span id="L356" class="LineNr">356 </span>    <span class="Delimiter">}</span>
-<span id="L357" class="LineNr">357 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L358" class="LineNr">358 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span>
-<span id="L359" class="LineNr">359 </span>        ++score<span class="Delimiter">;</span>
-<span id="L360" class="LineNr">360 </span>    <span class="Delimiter">}</span>
-<span id="L361" class="LineNr">361 </span>    assert<span class="Delimiter">(</span>score &lt; <span class="Constant">999</span><span class="Delimiter">);</span>
-<span id="L362" class="LineNr">362 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>score &lt; min_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L363" class="LineNr">363 </span>      min_score = score<span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span>      min_index = i<span class="Delimiter">;</span>
-<span id="L365" class="LineNr">365 </span>    <span class="Delimiter">}</span>
-<span id="L366" class="LineNr">366 </span>  <span class="Delimiter">}</span>
-<span id="L367" class="LineNr">367 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>min_index<span class="Delimiter">));</span>
-<span id="L368" class="LineNr">368 </span><span class="Delimiter">}</span>
-<span id="L369" class="LineNr">369 </span>
-<span id="L370" class="LineNr">370 </span><span class="Normal">int</span> <a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span>vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L371" class="LineNr">371 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L372" class="LineNr">372 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L373" class="LineNr">373 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> != -<span class="Constant">1</span><span class="Delimiter">)</span> ++result<span class="Delimiter">;</span>
-<span id="L374" class="LineNr">374 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L375" class="LineNr">375 </span><span class="Delimiter">}</span>
-<span id="L376" class="LineNr">376 </span>
-<span id="L377" class="LineNr">377 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L377'>next_stash</a><span class="Delimiter">(</span><span class="Normal">const</span> call&amp; c<span class="Delimiter">,</span> instruction* stash_inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L378" class="LineNr">378 </span>  <span class="Normal">const</span> recipe&amp; specializer_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> c<span class="Delimiter">.</span>running_recipe<span class="Delimiter">);</span>
-<span id="L379" class="LineNr">379 </span>  <span class="Normal">int</span> index = c<span class="Delimiter">.</span>running_step_index<span class="Delimiter">;</span>
-<span id="L380" class="LineNr">380 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>++index<span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L381" class="LineNr">381 </span>    <span class="Normal">const</span> instruction&amp; inst = specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
-<span id="L382" class="LineNr">382 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;stash&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L383" class="LineNr">383 </span>      *stash_inst = inst<span class="Delimiter">;</span>
-<span id="L384" class="LineNr">384 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L385" class="LineNr">385 </span>    <span class="Delimiter">}</span>
-<span id="L386" class="LineNr">386 </span>  <span class="Delimiter">}</span>
-<span id="L387" class="LineNr">387 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L388" class="LineNr">388 </span><span class="Delimiter">}</span>
-<span id="L389" class="LineNr">389 </span>
-<span id="L390" class="LineNr">390 </span><span class="Delimiter">:(scenario static_dispatch_disabled_in_recipe_without_variants)</span>
-<span id="L391" class="LineNr">391 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L392" class="LineNr">392 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>test <span class="Constant">3</span>
-<span id="L393" class="LineNr">393 </span>]
-<span id="L394" class="LineNr">394 </span><span class="muRecipe">def</span> test [
-<span id="L395" class="LineNr">395 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># ensure no header</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L397" class="LineNr">397 </span>]
-<span id="L398" class="LineNr">398 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L399" class="LineNr">399 </span>
-<span id="L400" class="LineNr">400 </span><span class="Delimiter">:(scenario static_dispatch_disabled_on_headerless_definition)</span>
-<span id="L401" class="LineNr">401 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L402" class="LineNr">402 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:num [
-<span id="L403" class="LineNr">403 </span>  z<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L205" class="LineNr">205 </span>  <span class="Comment">// error messages</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_primitive<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">)))</span> <span class="Delimiter">{</span>  <span class="Comment">// we currently don't check types for primitive variants</span>
+<span id="L207" class="LineNr">207 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;types don't match in call for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L209" class="LineNr">209 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  which tries to call '&quot;</span> &lt;&lt; original_header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L210" class="LineNr">210 </span>    <span class="Delimiter">}</span>
+<span id="L211" class="LineNr">211 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L212" class="LineNr">212 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to find a matching call for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  available variants are:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L214" class="LineNr">214 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L215" class="LineNr">215 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;    &quot;</span> &lt;&lt; <a href='054static_dispatch.cc.html#L501'>original_header_label</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L216" class="LineNr">216 </span>    <span class="Delimiter">}</span>
+<span id="L217" class="LineNr">217 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>list&lt;call&gt;::iterator p = <span class="Comment">/*</span><span class="Comment">skip</span><span class="Comment">*/</span>++Resolve_stack<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Resolve_stack<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L218" class="LineNr">218 </span>      <span class="Normal">const</span> recipe&amp; specializer_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">);</span>
+<span id="L219" class="LineNr">219 </span>      <span class="Normal">const</span> instruction&amp; specializer_inst = specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>running_step_index<span class="Delimiter">);</span>
+<span id="L220" class="LineNr">220 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>name != <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>
+<span id="L221" class="LineNr">221 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>specializer_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in &quot;</span> &lt;&lt; specializer_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L222" class="LineNr">222 </span>      <span class="Normal">else</span>
+<span id="L223" class="LineNr">223 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>specializer_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L224" class="LineNr">224 </span>      <span class="Comment">// One special-case to help with the rewrite_stash transform. (cross-layer)</span>
+<span id="L225" class="LineNr">225 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">&quot;stash_&quot;</span><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L226" class="LineNr">226 </span>        <a href='010vm.cc.html#L33'>instruction</a> stash_inst<span class="Delimiter">;</span>
+<span id="L227" class="LineNr">227 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L333'>next_stash</a><span class="Delimiter">(</span>*p<span class="Delimiter">,</span> &amp;stash_inst<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L228" class="LineNr">228 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>name != <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>
+<span id="L229" class="LineNr">229 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (part of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>stash_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in &quot;</span> &lt;&lt; specializer_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L230" class="LineNr">230 </span>          <span class="Normal">else</span>
+<span id="L231" class="LineNr">231 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (part of '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>stash_inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L232" class="LineNr">232 </span>        <span class="Delimiter">}</span>
+<span id="L233" class="LineNr">233 </span>      <span class="Delimiter">}</span>
+<span id="L234" class="LineNr">234 </span>    <span class="Delimiter">}</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Delimiter">}</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L237" class="LineNr">237 </span><span class="Delimiter">}</span>
+<span id="L238" class="LineNr">238 </span>
+<span id="L239" class="LineNr">239 </span><span class="Comment">// phase 1</span>
+<span id="L240" class="LineNr">240 </span>vector&lt;recipe_ordinal&gt; <a href='054static_dispatch.cc.html#L240'>strictly_matching_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L241" class="LineNr">241 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
+<span id="L242" class="LineNr">242 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L243" class="LineNr">243 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L244" class="LineNr">244 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking variant (strict) &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L245" class="LineNr">245 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L251'>all_header_reagents_strictly_match</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span>
+<span id="L246" class="LineNr">246 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Delimiter">}</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L249" class="LineNr">249 </span><span class="Delimiter">}</span>
+<span id="L250" class="LineNr">250 </span>
+<span id="L251" class="LineNr">251 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L251'>all_header_reagents_strictly_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L253" class="LineNr">253 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L254" class="LineNr">254 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;strict match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L255" class="LineNr">255 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L256" class="LineNr">256 </span>    <span class="Delimiter">}</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Delimiter">}</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L259" class="LineNr">259 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L261" class="LineNr">261 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;strict match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L262" class="LineNr">262 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L263" class="LineNr">263 </span>    <span class="Delimiter">}</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Delimiter">}</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L266" class="LineNr">266 </span><span class="Delimiter">}</span>
+<span id="L267" class="LineNr">267 </span>
+<span id="L268" class="LineNr">268 </span><span class="Comment">// phase 3</span>
+<span id="L269" class="LineNr">269 </span>vector&lt;recipe_ordinal&gt; <a href='054static_dispatch.cc.html#L269'>matching_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L270" class="LineNr">270 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L272" class="LineNr">272 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L273" class="LineNr">273 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;checking variant &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L274" class="LineNr">274 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L280'>all_header_reagents_match</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span>
+<span id="L275" class="LineNr">275 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Delimiter">}</span>
+<span id="L277" class="LineNr">277 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span><span class="Delimiter">}</span>
+<span id="L279" class="LineNr">279 </span>
+<span id="L280" class="LineNr">280 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L280'>all_header_reagents_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L282" class="LineNr">282 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L283" class="LineNr">283 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L284" class="LineNr">284 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L285" class="LineNr">285 </span>    <span class="Delimiter">}</span>
+<span id="L286" class="LineNr">286 </span>  <span class="Delimiter">}</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L289" class="LineNr">289 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L290" class="LineNr">290 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L291" class="LineNr">291 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L292" class="LineNr">292 </span>    <span class="Delimiter">}</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Delimiter">}</span>
+<span id="L294" class="LineNr">294 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span>
+<span id="L296" class="LineNr">296 </span>
+<span id="L297" class="LineNr">297 </span><span class="Comment">// tie-breaker for each phase</span>
+<span id="L298" class="LineNr">298 </span><span class="Normal">const</span> recipe&amp; best_variant<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt;&amp; candidates<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L299" class="LineNr">299 </span>  assert<span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L301" class="LineNr">301 </span>  <span class="Normal">int</span> min_score = <span class="Constant">999</span><span class="Delimiter">;</span>
+<span id="L302" class="LineNr">302 </span>  <span class="Normal">int</span> min_index = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L304" class="LineNr">304 </span>    <span class="Normal">const</span> recipe&amp; candidate = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L305" class="LineNr">305 </span>    <span class="Comment">// prefer variants without extra or missing ingredients or products</span>
+<span id="L306" class="LineNr">306 </span>    <span class="Normal">int</span> score = abs<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">)</span>-SIZE<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">))</span>
+<span id="L307" class="LineNr">307 </span>                          + abs<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span>-SIZE<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
+<span id="L308" class="LineNr">308 </span>    <span class="Comment">// prefer variants with non-address ingredients or products</span>
+<span id="L309" class="LineNr">309 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L310" class="LineNr">310 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span>
+<span id="L311" class="LineNr">311 </span>        ++score<span class="Delimiter">;</span>
+<span id="L312" class="LineNr">312 </span>    <span class="Delimiter">}</span>
+<span id="L313" class="LineNr">313 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L314" class="LineNr">314 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>candidate<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span>
+<span id="L315" class="LineNr">315 </span>        ++score<span class="Delimiter">;</span>
+<span id="L316" class="LineNr">316 </span>    <span class="Delimiter">}</span>
+<span id="L317" class="LineNr">317 </span>    assert<span class="Delimiter">(</span>score &lt; <span class="Constant">999</span><span class="Delimiter">);</span>
+<span id="L318" class="LineNr">318 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>score &lt; min_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr">319 </span>      min_score = score<span class="Delimiter">;</span>
+<span id="L320" class="LineNr">320 </span>      min_index = i<span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>    <span class="Delimiter">}</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Delimiter">}</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Identifier">return</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>min_index<span class="Delimiter">));</span>
+<span id="L324" class="LineNr">324 </span><span class="Delimiter">}</span>
+<span id="L325" class="LineNr">325 </span>
+<span id="L326" class="LineNr">326 </span><span class="Normal">int</span> <a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span>vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L329" class="LineNr">329 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> != -<span class="Constant">1</span><span class="Delimiter">)</span> ++result<span class="Delimiter">;</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span><span class="Delimiter">}</span>
+<span id="L332" class="LineNr">332 </span>
+<span id="L333" class="LineNr">333 </span><span class="Normal">bool</span> <a href='054static_dispatch.cc.html#L333'>next_stash</a><span class="Delimiter">(</span><span class="Normal">const</span> call&amp; c<span class="Delimiter">,</span> instruction* stash_inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">const</span> recipe&amp; specializer_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> c<span class="Delimiter">.</span>running_recipe<span class="Delimiter">);</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">int</span> index = c<span class="Delimiter">.</span>running_step_index<span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>++index<span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L337" class="LineNr">337 </span>    <span class="Normal">const</span> instruction&amp; inst = specializer_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
+<span id="L338" class="LineNr">338 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;stash&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L339" class="LineNr">339 </span>      *stash_inst = inst<span class="Delimiter">;</span>
+<span id="L340" class="LineNr">340 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L341" class="LineNr">341 </span>    <span class="Delimiter">}</span>
+<span id="L342" class="LineNr">342 </span>  <span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L344" class="LineNr">344 </span><span class="Delimiter">}</span>
+<span id="L345" class="LineNr">345 </span>
+<span id="L346" class="LineNr">346 </span><span class="Delimiter">:(scenario static_dispatch_disabled_in_recipe_without_variants)</span>
+<span id="L347" class="LineNr">347 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L348" class="LineNr">348 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>test <span class="Constant">3</span>
+<span id="L349" class="LineNr">349 </span>]
+<span id="L350" class="LineNr">350 </span><span class="muRecipe">def</span> test [
+<span id="L351" class="LineNr">351 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># ensure no header</span>
+<span id="L352" class="LineNr">352 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L353" class="LineNr">353 </span>]
+<span id="L354" class="LineNr">354 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L355" class="LineNr">355 </span>
+<span id="L356" class="LineNr">356 </span><span class="Delimiter">:(scenario static_dispatch_disabled_on_headerless_definition)</span>
+<span id="L357" class="LineNr">357 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L358" class="LineNr">358 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:num [
+<span id="L359" class="LineNr">359 </span>  z<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L360" class="LineNr">360 </span>]
+<span id="L361" class="LineNr">361 </span><span class="muRecipe">def</span> test [
+<span id="L362" class="LineNr">362 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L363" class="LineNr">363 </span>]
+<span id="L364" class="LineNr">364 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> test</span>
+<span id="L365" class="LineNr">365 </span>
+<span id="L366" class="LineNr">366 </span><span class="Delimiter">:(scenario static_dispatch_disabled_on_headerless_definition_2)</span>
+<span id="L367" class="LineNr">367 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L368" class="LineNr">368 </span><span class="muRecipe">def</span> test [
+<span id="L369" class="LineNr">369 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L370" class="LineNr">370 </span>]
+<span id="L371" class="LineNr">371 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:num [
+<span id="L372" class="LineNr">372 </span>  z<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L373" class="LineNr">373 </span>]
+<span id="L374" class="LineNr">374 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> test</span>
+<span id="L375" class="LineNr">375 </span>
+<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(scenario static_dispatch_on_primitive_names)</span>
+<span id="L377" class="LineNr">377 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L378" class="LineNr">378 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
+<span id="L381" class="LineNr">381 </span>  <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L382" class="LineNr">382 </span>  <span class="Constant">5</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L383" class="LineNr">383 </span>  <span class="Constant">6</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">5</span>:<span class="Normal">bool</span>
+<span id="L384" class="LineNr">384 </span>]
+<span id="L385" class="LineNr">385 </span><span class="Comment"># temporarily hardcode number equality to always fail</span>
+<span id="L386" class="LineNr">386 </span><span class="muRecipe">def</span> equal x:num<span class="Delimiter">,</span> y:num<span class="muRecipe"> -&gt; </span>z:<span class="Normal">bool</span> [
+<span id="L387" class="LineNr">387 </span>  local-scope
+<span id="L388" class="LineNr">388 </span>  load-ingredients
+<span id="L389" class="LineNr">389 </span>  z<span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>
+<span id="L390" class="LineNr">390 </span>]
+<span id="L391" class="LineNr">391 </span><span class="Comment"># comparing numbers used overload</span>
+<span id="L392" class="LineNr">392 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L393" class="LineNr">393 </span><span class="Comment"># comparing booleans continues to use primitive</span>
+<span id="L394" class="LineNr">394 </span><span class="traceContains">+mem: storing 1 in location 6</span>
+<span id="L395" class="LineNr">395 </span>
+<span id="L396" class="LineNr">396 </span><span class="Delimiter">:(scenario static_dispatch_works_with_dummy_results_for_containers)</span>
+<span id="L397" class="LineNr">397 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L398" class="LineNr">398 </span>  _<span class="Special"> &lt;- </span>test <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
+<span id="L399" class="LineNr">399 </span>]
+<span id="L400" class="LineNr">400 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:point [
+<span id="L401" class="LineNr">401 </span>  local-scope
+<span id="L402" class="LineNr">402 </span>  load-ingredients
+<span id="L403" class="LineNr">403 </span>  z<span class="Special"> &lt;- </span>merge a<span class="Delimiter">,</span> <span class="Constant">0</span>
 <span id="L404" class="LineNr">404 </span>]
-<span id="L405" class="LineNr">405 </span><span class="muRecipe">def</span> test [
-<span id="L406" class="LineNr">406 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L407" class="LineNr">407 </span>]
-<span id="L408" class="LineNr">408 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> test</span>
-<span id="L409" class="LineNr">409 </span>
-<span id="L410" class="LineNr">410 </span><span class="Delimiter">:(scenario static_dispatch_disabled_on_headerless_definition_2)</span>
-<span id="L411" class="LineNr">411 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L412" class="LineNr">412 </span><span class="muRecipe">def</span> test [
-<span id="L413" class="LineNr">413 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L414" class="LineNr">414 </span>]
-<span id="L415" class="LineNr">415 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:num [
-<span id="L416" class="LineNr">416 </span>  z<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L417" class="LineNr">417 </span>]
-<span id="L418" class="LineNr">418 </span><span class="traceContains">+error: redefining <a href='010vm.cc.html#L19'>recipe</a> test</span>
-<span id="L419" class="LineNr">419 </span>
-<span id="L420" class="LineNr">420 </span><span class="Delimiter">:(scenario static_dispatch_on_primitive_names)</span>
-<span id="L421" class="LineNr">421 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L422" class="LineNr">422 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L423" class="LineNr">423 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L424" class="LineNr">424 </span>  <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">2</span>:num
-<span id="L425" class="LineNr">425 </span>  <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/<span class="Constant">false</span>
-<span id="L426" class="LineNr">426 </span>  <span class="Constant">5</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/<span class="Constant">false</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Constant">6</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Delimiter">,</span> <span class="Constant">5</span>:<span class="Normal">bool</span>
-<span id="L428" class="LineNr">428 </span>]
-<span id="L429" class="LineNr">429 </span><span class="Comment"># temporarily hardcode number equality to always fail</span>
-<span id="L430" class="LineNr">430 </span><span class="muRecipe">def</span> equal x:num<span class="Delimiter">,</span> y:num<span class="muRecipe"> -&gt; </span>z:<span class="Normal">bool</span> [
-<span id="L431" class="LineNr">431 </span>  local-scope
-<span id="L432" class="LineNr">432 </span>  load-ingredients
-<span id="L433" class="LineNr">433 </span>  z<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/<span class="Constant">false</span>
-<span id="L434" class="LineNr">434 </span>]
-<span id="L435" class="LineNr">435 </span><span class="Comment"># comparing numbers used overload</span>
-<span id="L436" class="LineNr">436 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L437" class="LineNr">437 </span><span class="Comment"># comparing booleans continues to use primitive</span>
-<span id="L438" class="LineNr">438 </span><span class="traceContains">+mem: storing 1 in location 6</span>
-<span id="L439" class="LineNr">439 </span>
-<span id="L440" class="LineNr">440 </span><span class="Delimiter">:(scenario static_dispatch_works_with_dummy_results_for_containers)</span>
-<span id="L441" class="LineNr">441 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L442" class="LineNr">442 </span>  _<span class="Special"> &lt;- </span>test <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>
-<span id="L443" class="LineNr">443 </span>]
-<span id="L444" class="LineNr">444 </span><span class="muRecipe">def</span> test a:num<span class="muRecipe"> -&gt; </span>z:point [
+<span id="L405" class="LineNr">405 </span><span class="muRecipe">def</span> test a:num<span class="Delimiter">,</span> b:num<span class="muRecipe"> -&gt; </span>z:point [
+<span id="L406" class="LineNr">406 </span>  local-scope
+<span id="L407" class="LineNr">407 </span>  load-ingredients
+<span id="L408" class="LineNr">408 </span>  z<span class="Special"> &lt;- </span>merge a<span class="Delimiter">,</span> b
+<span id="L409" class="LineNr">409 </span>]
+<span id="L410" class="LineNr">410 </span>$error: <span class="Constant">0</span>
+<span id="L411" class="LineNr">411 </span>
+<span id="L412" class="LineNr">412 </span><span class="Delimiter">:(scenario static_dispatch_works_with_compound_type_containing_container_defined_after_first_use)</span>
+<span id="L413" class="LineNr">413 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L414" class="LineNr">414 </span>  <span class="Normal">x</span>:&amp;:foo<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">foo:type</span>
+<span id="L415" class="LineNr">415 </span>  test x
+<span id="L416" class="LineNr">416 </span>]
+<span id="L417" class="LineNr">417 </span><span class="muData">container</span> foo [
+<span id="L418" class="LineNr">418 </span>  <span class="Normal">x</span>:num
+<span id="L419" class="LineNr">419 </span>]
+<span id="L420" class="LineNr">420 </span><span class="muRecipe">def</span> test a:&amp;:foo<span class="muRecipe"> -&gt; </span>z:num [
+<span id="L421" class="LineNr">421 </span>  local-scope
+<span id="L422" class="LineNr">422 </span>  load-ingredients
+<span id="L423" class="LineNr">423 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>get *a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L424" class="LineNr">424 </span>]
+<span id="L425" class="LineNr">425 </span>$error: <span class="Constant">0</span>
+<span id="L426" class="LineNr">426 </span>
+<span id="L427" class="LineNr">427 </span><span class="Delimiter">:(scenario static_dispatch_works_with_compound_type_containing_container_defined_after_second_use)</span>
+<span id="L428" class="LineNr">428 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L429" class="LineNr">429 </span>  <span class="Normal">x</span>:&amp;:foo<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">foo:type</span>
+<span id="L430" class="LineNr">430 </span>  test x
+<span id="L431" class="LineNr">431 </span>]
+<span id="L432" class="LineNr">432 </span><span class="muRecipe">def</span> test a:&amp;:foo<span class="muRecipe"> -&gt; </span>z:num [
+<span id="L433" class="LineNr">433 </span>  local-scope
+<span id="L434" class="LineNr">434 </span>  load-ingredients
+<span id="L435" class="LineNr">435 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>get *a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L436" class="LineNr">436 </span>]
+<span id="L437" class="LineNr">437 </span><span class="muData">container</span> foo [
+<span id="L438" class="LineNr">438 </span>  <span class="Normal">x</span>:num
+<span id="L439" class="LineNr">439 </span>]
+<span id="L440" class="LineNr">440 </span>$error: <span class="Constant">0</span>
+<span id="L441" class="LineNr">441 </span>
+<span id="L442" class="LineNr">442 </span><span class="Delimiter">:(scenario static_dispatch_on_non_literal_character_ignores_variant_with_numbers)</span>
+<span id="L443" class="LineNr">443 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L444" class="LineNr">444 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L445" class="LineNr">445 </span>  local-scope
-<span id="L446" class="LineNr">446 </span>  load-ingredients
-<span id="L447" class="LineNr">447 </span>  z<span class="Special"> &lt;- </span>merge a<span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L446" class="LineNr">446 </span>  <span class="Normal">x</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/newline
+<span id="L447" class="LineNr">447 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo x
 <span id="L448" class="LineNr">448 </span>]
-<span id="L449" class="LineNr">449 </span><span class="muRecipe">def</span> test a:num<span class="Delimiter">,</span> b:num<span class="muRecipe"> -&gt; </span>z:point [
-<span id="L450" class="LineNr">450 </span>  local-scope
-<span id="L451" class="LineNr">451 </span>  load-ingredients
-<span id="L452" class="LineNr">452 </span>  z<span class="Special"> &lt;- </span>merge a<span class="Delimiter">,</span> b
-<span id="L453" class="LineNr">453 </span>]
-<span id="L454" class="LineNr">454 </span>$error: <span class="Constant">0</span>
+<span id="L449" class="LineNr">449 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L450" class="LineNr">450 </span>  load-ingredients
+<span id="L451" class="LineNr">451 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L452" class="LineNr">452 </span>]
+<span id="L453" class="LineNr">453 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: ingredient 0 has the wrong type at '1:num/raw &lt;- foo x'</span>
+<span id="L454" class="LineNr">454 </span><span class="traceAbsent">-mem: storing 34 in location 1</span>
 <span id="L455" class="LineNr">455 </span>
-<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(scenario static_dispatch_works_with_compound_type_containing_container_defined_after_first_use)</span>
+<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(scenario static_dispatch_dispatches_literal_to_character)</span>
 <span id="L457" class="LineNr">457 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L458" class="LineNr">458 </span>  <span class="Normal">x</span>:&amp;:foo<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">foo:type</span>
-<span id="L459" class="LineNr">459 </span>  test x
-<span id="L460" class="LineNr">460 </span>]
-<span id="L461" class="LineNr">461 </span><span class="muData">container</span> foo [
-<span id="L462" class="LineNr">462 </span>  <span class="Normal">x</span>:num
-<span id="L463" class="LineNr">463 </span>]
-<span id="L464" class="LineNr">464 </span><span class="muRecipe">def</span> test a:&amp;:foo<span class="muRecipe"> -&gt; </span>z:num [
-<span id="L465" class="LineNr">465 </span>  local-scope
-<span id="L466" class="LineNr">466 </span>  load-ingredients
-<span id="L467" class="LineNr">467 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>get *a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L468" class="LineNr">468 </span>]
-<span id="L469" class="LineNr">469 </span>$error: <span class="Constant">0</span>
-<span id="L470" class="LineNr">470 </span>
-<span id="L471" class="LineNr">471 </span><span class="Delimiter">:(scenario static_dispatch_works_with_compound_type_containing_container_defined_after_second_use)</span>
-<span id="L472" class="LineNr">472 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L473" class="LineNr">473 </span>  <span class="Normal">x</span>:&amp;:foo<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">foo:type</span>
-<span id="L474" class="LineNr">474 </span>  test x
-<span id="L475" class="LineNr">475 </span>]
-<span id="L476" class="LineNr">476 </span><span class="muRecipe">def</span> test a:&amp;:foo<span class="muRecipe"> -&gt; </span>z:num [
-<span id="L477" class="LineNr">477 </span>  local-scope
-<span id="L478" class="LineNr">478 </span>  load-ingredients
-<span id="L479" class="LineNr">479 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>get *a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L480" class="LineNr">480 </span>]
-<span id="L481" class="LineNr">481 </span><span class="muData">container</span> foo [
-<span id="L482" class="LineNr">482 </span>  <span class="Normal">x</span>:num
-<span id="L483" class="LineNr">483 </span>]
-<span id="L484" class="LineNr">484 </span>$error: <span class="Constant">0</span>
-<span id="L485" class="LineNr">485 </span>
-<span id="L486" class="LineNr">486 </span><span class="Delimiter">:(scenario static_dispatch_prefers_literals_to_be_numbers_rather_than_addresses)</span>
-<span id="L487" class="LineNr">487 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L488" class="LineNr">488 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">0</span>
-<span id="L489" class="LineNr">489 </span>]
-<span id="L490" class="LineNr">490 </span><span class="muRecipe">def</span> foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L491" class="LineNr">491 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L492" class="LineNr">492 </span>]
-<span id="L493" class="LineNr">493 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L494" class="LineNr">494 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L495" class="LineNr">495 </span>]
-<span id="L496" class="LineNr">496 </span><span class="traceContains">+mem: storing 35 in location 1</span>
-<span id="L497" class="LineNr">497 </span>
-<span id="L498" class="LineNr">498 </span><span class="Delimiter">:(scenario static_dispatch_prefers_literals_to_be_numbers_rather_than_addresses_2)</span>
-<span id="L499" class="LineNr">499 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L500" class="LineNr">500 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">0</span> <span class="Constant">0</span>
-<span id="L501" class="LineNr">501 </span>]
-<span id="L502" class="LineNr">502 </span><span class="Comment"># Both variants need to bind 0 to address in first ingredient.</span>
-<span id="L503" class="LineNr">503 </span><span class="Comment"># We still want to prefer the variant with a number rather than address for</span>
-<span id="L504" class="LineNr">504 </span><span class="Comment"># _subsequent_ ingredients.</span>
-<span id="L505" class="LineNr">505 </span><span class="muRecipe">def</span> foo x:&amp;:num y:&amp;:num<span class="muRecipe"> -&gt; </span>z:num [  <span class="Comment"># put the bad match before the good one</span>
-<span id="L506" class="LineNr">506 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L507" class="LineNr">507 </span>]
-<span id="L508" class="LineNr">508 </span><span class="muRecipe">def</span> foo x:&amp;:num y:num<span class="muRecipe"> -&gt; </span>z:num [
-<span id="L509" class="LineNr">509 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L510" class="LineNr">510 </span>]
-<span id="L511" class="LineNr">511 </span><span class="traceContains">+mem: storing 35 in location 1</span>
-<span id="L512" class="LineNr">512 </span>
-<span id="L513" class="LineNr">513 </span><span class="Delimiter">:(scenario static_dispatch_on_non_literal_character_ignores_variant_with_numbers)</span>
-<span id="L514" class="LineNr">514 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L515" class="LineNr">515 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L516" class="LineNr">516 </span>  local-scope
-<span id="L517" class="LineNr">517 </span>  <span class="Normal">x</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">10</span>/newline
-<span id="L518" class="LineNr">518 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo x
-<span id="L519" class="LineNr">519 </span>]
-<span id="L520" class="LineNr">520 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L521" class="LineNr">521 </span>  load-ingredients
-<span id="L522" class="LineNr">522 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L523" class="LineNr">523 </span>]
-<span id="L524" class="LineNr">524 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: ingredient 0 has the wrong type at '1:num/raw &lt;- foo x'</span>
-<span id="L525" class="LineNr">525 </span><span class="traceAbsent">-mem: storing 34 in location 1</span>
-<span id="L526" class="LineNr">526 </span>
-<span id="L527" class="LineNr">527 </span><span class="Delimiter">:(scenario static_dispatch_dispatches_literal_to_boolean_before_character)</span>
-<span id="L528" class="LineNr">528 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L529" class="LineNr">529 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">0</span>  <span class="Comment"># valid literal for boolean</span>
-<span id="L530" class="LineNr">530 </span>]
-<span id="L531" class="LineNr">531 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L532" class="LineNr">532 </span>  local-scope
-<span id="L533" class="LineNr">533 </span>  load-ingredients
-<span id="L534" class="LineNr">534 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L535" class="LineNr">535 </span>]
-<span id="L536" class="LineNr">536 </span><span class="muRecipe">def</span> foo x:<span class="Normal">bool</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L537" class="LineNr">537 </span>  local-scope
-<span id="L538" class="LineNr">538 </span>  load-ingredients
-<span id="L539" class="LineNr">539 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L540" class="LineNr">540 </span>]
-<span id="L541" class="LineNr">541 </span><span class="Comment"># boolean variant is preferred</span>
-<span id="L542" class="LineNr">542 </span><span class="traceContains">+mem: storing 35 in location 1</span>
-<span id="L543" class="LineNr">543 </span>
-<span id="L544" class="LineNr">544 </span><span class="Delimiter">:(scenario static_dispatch_dispatches_literal_to_character_when_out_of_boolean_range)</span>
-<span id="L545" class="LineNr">545 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L546" class="LineNr">546 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">97</span>  <span class="Comment"># not a valid literal for boolean</span>
-<span id="L547" class="LineNr">547 </span>]
-<span id="L548" class="LineNr">548 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L549" class="LineNr">549 </span>  local-scope
-<span id="L550" class="LineNr">550 </span>  load-ingredients
-<span id="L551" class="LineNr">551 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L552" class="LineNr">552 </span>]
-<span id="L553" class="LineNr">553 </span><span class="muRecipe">def</span> foo x:<span class="Normal">bool</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L554" class="LineNr">554 </span>  local-scope
-<span id="L555" class="LineNr">555 </span>  load-ingredients
-<span id="L556" class="LineNr">556 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L557" class="LineNr">557 </span>]
-<span id="L558" class="LineNr">558 </span><span class="Comment"># character variant is preferred</span>
-<span id="L559" class="LineNr">559 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L560" class="LineNr">560 </span>
-<span id="L561" class="LineNr">561 </span><span class="Delimiter">:(scenario static_dispatch_dispatches_literal_to_number_if_at_all_possible)</span>
-<span id="L562" class="LineNr">562 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L563" class="LineNr">563 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">97</span>
-<span id="L564" class="LineNr">564 </span>]
-<span id="L565" class="LineNr">565 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L566" class="LineNr">566 </span>  local-scope
-<span id="L567" class="LineNr">567 </span>  load-ingredients
-<span id="L568" class="LineNr">568 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L569" class="LineNr">569 </span>]
-<span id="L570" class="LineNr">570 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L458" class="LineNr">458 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">97</span>
+<span id="L459" class="LineNr">459 </span>]
+<span id="L460" class="LineNr">460 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
+<span id="L461" class="LineNr">461 </span>  local-scope
+<span id="L462" class="LineNr">462 </span>  load-ingredients
+<span id="L463" class="LineNr">463 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L464" class="LineNr">464 </span>]
+<span id="L465" class="LineNr">465 </span><span class="Comment"># character variant is preferred</span>
+<span id="L466" class="LineNr">466 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L467" class="LineNr">467 </span>
+<span id="L468" class="LineNr">468 </span><span class="Delimiter">:(scenario static_dispatch_dispatches_literal_to_number_if_at_all_possible)</span>
+<span id="L469" class="LineNr">469 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L470" class="LineNr">470 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">97</span>
+<span id="L471" class="LineNr">471 </span>]
+<span id="L472" class="LineNr">472 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
+<span id="L473" class="LineNr">473 </span>  local-scope
+<span id="L474" class="LineNr">474 </span>  load-ingredients
+<span id="L475" class="LineNr">475 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L476" class="LineNr">476 </span>]
+<span id="L477" class="LineNr">477 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L478" class="LineNr">478 </span>  local-scope
+<span id="L479" class="LineNr">479 </span>  load-ingredients
+<span id="L480" class="LineNr">480 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L481" class="LineNr">481 </span>]
+<span id="L482" class="LineNr">482 </span><span class="Comment"># number variant is preferred</span>
+<span id="L483" class="LineNr">483 </span><span class="traceContains">+mem: storing 35 in location 1</span>
+<span id="L484" class="LineNr">484 </span>
+<span id="L485" class="LineNr">485 </span><span class="Delimiter">:(replace{} &quot;string header_label(const <a href='010vm.cc.html#L14'>recipe_ordinal</a> r)&quot;)</span>
+<span id="L486" class="LineNr">486 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L487" class="LineNr">487 </span>  <span class="Identifier">return</span> header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">));</span>
+<span id="L488" class="LineNr">488 </span><span class="Delimiter">}</span>
+<span id="L489" class="LineNr">489 </span><span class="Delimiter">:(code)</span>
+<span id="L490" class="LineNr">490 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L491" class="LineNr">491 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L492" class="LineNr">492 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L493" class="LineNr">493 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L494" class="LineNr">494 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L495" class="LineNr">495 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
+<span id="L496" class="LineNr">496 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L497" class="LineNr">497 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L498" class="LineNr">498 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L499" class="LineNr">499 </span><span class="Delimiter">}</span>
+<span id="L500" class="LineNr">500 </span>
+<span id="L501" class="LineNr">501 </span>string <a href='054static_dispatch.cc.html#L501'>original_header_label</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L502" class="LineNr">502 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L503" class="LineNr">503 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name<span class="Delimiter">;</span>
+<span id="L504" class="LineNr">504 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L505" class="LineNr">505 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
+<span id="L506" class="LineNr">506 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
+<span id="L507" class="LineNr">507 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L508" class="LineNr">508 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
+<span id="L509" class="LineNr">509 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L510" class="LineNr">510 </span><span class="Delimiter">}</span>
+<span id="L511" class="LineNr">511 </span>
+<span id="L512" class="LineNr">512 </span><span class="Delimiter">:(scenario reload_variant_retains_other_variants)</span>
+<span id="L513" class="LineNr">513 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L514" class="LineNr">514 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L515" class="LineNr">515 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:num
+<span id="L516" class="LineNr">516 </span>]
+<span id="L517" class="LineNr">517 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L518" class="LineNr">518 </span>  local-scope
+<span id="L519" class="LineNr">519 </span>  load-ingredients
+<span id="L520" class="LineNr">520 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L521" class="LineNr">521 </span>]
+<span id="L522" class="LineNr">522 </span><span class="muRecipe">def</span> foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L523" class="LineNr">523 </span>  local-scope
+<span id="L524" class="LineNr">524 </span>  load-ingredients
+<span id="L525" class="LineNr">525 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L526" class="LineNr">526 </span>]
+<span id="L527" class="LineNr">527 </span><span class="muRecipe">def</span>! foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L528" class="LineNr">528 </span>  local-scope
+<span id="L529" class="LineNr">529 </span>  load-ingredients
+<span id="L530" class="LineNr">530 </span>  <span class="Identifier">return</span> <span class="Constant">36</span>
+<span id="L531" class="LineNr">531 </span>]
+<span id="L532" class="LineNr">532 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L533" class="LineNr">533 </span>$error: <span class="Constant">0</span>
+<span id="L534" class="LineNr">534 </span>
+<span id="L535" class="LineNr">535 </span><span class="Delimiter">:(scenario dispatch_errors_come_after_unknown_name_errors)</span>
+<span id="L536" class="LineNr">536 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L537" class="LineNr">537 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L538" class="LineNr">538 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>foo x
+<span id="L539" class="LineNr">539 </span>]
+<span id="L540" class="LineNr">540 </span><span class="muRecipe">def</span> foo a:num<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L541" class="LineNr">541 </span>  local-scope
+<span id="L542" class="LineNr">542 </span>  load-ingredients
+<span id="L543" class="LineNr">543 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L544" class="LineNr">544 </span>]
+<span id="L545" class="LineNr">545 </span><span class="muRecipe">def</span> foo a:<span class="Normal">bool</span><span class="muRecipe"> -&gt; </span>b:num [
+<span id="L546" class="LineNr">546 </span>  local-scope
+<span id="L547" class="LineNr">547 </span>  load-ingredients
+<span id="L548" class="LineNr">548 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L549" class="LineNr">549 </span>]
+<span id="L550" class="LineNr">550 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'x' in 'y:num &lt;- foo x'</span>
+<span id="L551" class="LineNr">551 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: failed to find a matching call for 'y:num &lt;- foo x'</span>
+<span id="L552" class="LineNr">552 </span>
+<span id="L553" class="LineNr">553 </span><span class="Delimiter">:(scenario override_methods_with_type_abbreviations)</span>
+<span id="L554" class="LineNr">554 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L555" class="LineNr">555 </span>  local-scope
+<span id="L556" class="LineNr">556 </span>  <span class="Normal">s</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L557" class="LineNr">557 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo s
+<span id="L558" class="LineNr">558 </span>]
+<span id="L559" class="LineNr">559 </span><span class="muRecipe">def</span> foo a:<a href='043space.cc.html#L101'>address</a>:array:character<span class="muRecipe"> -&gt; </span>result:number [
+<span id="L560" class="LineNr">560 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L561" class="LineNr">561 </span>]
+<span id="L562" class="LineNr">562 </span><span class="Comment"># identical to previous variant once you take type abbreviations into account</span>
+<span id="L563" class="LineNr">563 </span><span class="muRecipe">def</span>! foo a:text<span class="muRecipe"> -&gt; </span>result:num [
+<span id="L564" class="LineNr">564 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L565" class="LineNr">565 </span>]
+<span id="L566" class="LineNr">566 </span><span class="traceContains">+mem: storing 35 in location 1</span>
+<span id="L567" class="LineNr">567 </span>
+<span id="L568" class="LineNr">568 </span><span class="Delimiter">:(scenario ignore_static_dispatch_in_type_errors_without_overloading)</span>
+<span id="L569" class="LineNr">569 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L570" class="LineNr">570 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L571" class="LineNr">571 </span>  local-scope
-<span id="L572" class="LineNr">572 </span>  load-ingredients
-<span id="L573" class="LineNr">573 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L572" class="LineNr">572 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L573" class="LineNr">573 </span>  foo x
 <span id="L574" class="LineNr">574 </span>]
-<span id="L575" class="LineNr">575 </span><span class="Comment"># number variant is preferred</span>
-<span id="L576" class="LineNr">576 </span><span class="traceContains">+mem: storing 35 in location 1</span>
-<span id="L577" class="LineNr">577 </span>
-<span id="L578" class="LineNr">578 </span><span class="Delimiter">:(replace{} &quot;string header_label(const <a href='010vm.cc.html#L14'>recipe_ordinal</a> r)&quot;)</span>
-<span id="L579" class="LineNr">579 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L580" class="LineNr">580 </span>  <span class="Identifier">return</span> header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">));</span>
-<span id="L581" class="LineNr">581 </span><span class="Delimiter">}</span>
-<span id="L582" class="LineNr">582 </span><span class="Delimiter">:(code)</span>
-<span id="L583" class="LineNr">583 </span>string header_label<span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L584" class="LineNr">584 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L585" class="LineNr">585 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L586" class="LineNr">586 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L587" class="LineNr">587 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L588" class="LineNr">588 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
-<span id="L589" class="LineNr">589 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L590" class="LineNr">590 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L591" class="LineNr">591 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L592" class="LineNr">592 </span><span class="Delimiter">}</span>
-<span id="L593" class="LineNr">593 </span>
-<span id="L594" class="LineNr">594 </span>string <a href='054static_dispatch.cc.html#L594'>original_header_label</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L595" class="LineNr">595 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L596" class="LineNr">596 </span>  out &lt;&lt; <span class="Constant">&quot;recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name<span class="Delimiter">;</span>
-<span id="L597" class="LineNr">597 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L598" class="LineNr">598 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
-<span id="L599" class="LineNr">599 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> out &lt;&lt; <span class="Constant">&quot; -&gt;&quot;</span><span class="Delimiter">;</span>
-<span id="L600" class="LineNr">600 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L601" class="LineNr">601 </span>    out &lt;&lt; <span class="Constant">' '</span> &lt;&lt; caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string<span class="Delimiter">;</span>
-<span id="L602" class="LineNr">602 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L603" class="LineNr">603 </span><span class="Delimiter">}</span>
-<span id="L604" class="LineNr">604 </span>
-<span id="L605" class="LineNr">605 </span><span class="Delimiter">:(scenario reload_variant_retains_other_variants)</span>
-<span id="L606" class="LineNr">606 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L607" class="LineNr">607 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L608" class="LineNr">608 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:num
-<span id="L609" class="LineNr">609 </span>]
-<span id="L610" class="LineNr">610 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L611" class="LineNr">611 </span>  local-scope
-<span id="L612" class="LineNr">612 </span>  load-ingredients
-<span id="L613" class="LineNr">613 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L614" class="LineNr">614 </span>]
-<span id="L615" class="LineNr">615 </span><span class="muRecipe">def</span> foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L616" class="LineNr">616 </span>  local-scope
-<span id="L617" class="LineNr">617 </span>  load-ingredients
-<span id="L618" class="LineNr">618 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L619" class="LineNr">619 </span>]
-<span id="L620" class="LineNr">620 </span><span class="muRecipe">def</span>! foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L621" class="LineNr">621 </span>  local-scope
-<span id="L622" class="LineNr">622 </span>  load-ingredients
-<span id="L623" class="LineNr">623 </span>  <span class="Identifier">return</span> <span class="Constant">36</span>
-<span id="L624" class="LineNr">624 </span>]
-<span id="L625" class="LineNr">625 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L626" class="LineNr">626 </span>$error: <span class="Constant">0</span>
-<span id="L627" class="LineNr">627 </span>
-<span id="L628" class="LineNr">628 </span><span class="Delimiter">:(scenario dispatch_errors_come_after_unknown_name_errors)</span>
-<span id="L629" class="LineNr">629 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L630" class="LineNr">630 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L631" class="LineNr">631 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>foo x
-<span id="L632" class="LineNr">632 </span>]
-<span id="L633" class="LineNr">633 </span><span class="muRecipe">def</span> foo a:num<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L634" class="LineNr">634 </span>  local-scope
-<span id="L635" class="LineNr">635 </span>  load-ingredients
-<span id="L636" class="LineNr">636 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L637" class="LineNr">637 </span>]
-<span id="L638" class="LineNr">638 </span><span class="muRecipe">def</span> foo a:<span class="Normal">bool</span><span class="muRecipe"> -&gt; </span>b:num [
-<span id="L639" class="LineNr">639 </span>  local-scope
-<span id="L640" class="LineNr">640 </span>  load-ingredients
-<span id="L641" class="LineNr">641 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L642" class="LineNr">642 </span>]
-<span id="L643" class="LineNr">643 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: missing type for 'x' in 'y:num &lt;- foo x'</span>
-<span id="L644" class="LineNr">644 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: failed to find a matching call for 'y:num &lt;- foo x'</span>
-<span id="L645" class="LineNr">645 </span>
-<span id="L646" class="LineNr">646 </span><span class="Delimiter">:(scenario override_methods_with_type_abbreviations)</span>
-<span id="L647" class="LineNr">647 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L648" class="LineNr">648 </span>  local-scope
-<span id="L649" class="LineNr">649 </span>  <span class="Normal">s</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L650" class="LineNr">650 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo s
-<span id="L651" class="LineNr">651 </span>]
-<span id="L652" class="LineNr">652 </span><span class="muRecipe">def</span> foo a:<a href='043space.cc.html#L80'>address</a>:array:character<span class="muRecipe"> -&gt; </span>result:number [
-<span id="L653" class="LineNr">653 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L654" class="LineNr">654 </span>]
-<span id="L655" class="LineNr">655 </span><span class="Comment"># identical to previous variant once you take type abbreviations into account</span>
-<span id="L656" class="LineNr">656 </span><span class="muRecipe">def</span>! foo a:text<span class="muRecipe"> -&gt; </span>result:num [
-<span id="L657" class="LineNr">657 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L658" class="LineNr">658 </span>]
-<span id="L659" class="LineNr">659 </span><span class="traceContains">+mem: storing 35 in location 1</span>
-<span id="L660" class="LineNr">660 </span>
-<span id="L661" class="LineNr">661 </span><span class="Delimiter">:(scenario ignore_static_dispatch_in_type_errors_without_overloading)</span>
-<span id="L662" class="LineNr">662 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L663" class="LineNr">663 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L664" class="LineNr">664 </span>  local-scope
-<span id="L665" class="LineNr">665 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L666" class="LineNr">666 </span>  foo x
-<span id="L667" class="LineNr">667 </span>]
-<span id="L668" class="LineNr">668 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">char</span> [
-<span id="L669" class="LineNr">669 </span>  local-scope
-<span id="L670" class="LineNr">670 </span>  load-ingredients
-<span id="L671" class="LineNr">671 </span>]
-<span id="L672" class="LineNr">672 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: types don't match in call for 'foo x'</span>
-<span id="L673" class="LineNr">673 </span><span class="traceContains">+error:   which tries to call 'recipe foo x:&amp;:char'</span>
-<span id="L674" class="LineNr">674 </span>
-<span id="L675" class="LineNr">675 </span><span class="Delimiter">:(scenario show_available_variants_in_dispatch_errors)</span>
-<span id="L676" class="LineNr">676 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L677" class="LineNr">677 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L678" class="LineNr">678 </span>  local-scope
-<span id="L679" class="LineNr">679 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L680" class="LineNr">680 </span>  foo x
-<span id="L681" class="LineNr">681 </span>]
-<span id="L682" class="LineNr">682 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">char</span> [
-<span id="L683" class="LineNr">683 </span>  local-scope
-<span id="L684" class="LineNr">684 </span>  load-ingredients
-<span id="L685" class="LineNr">685 </span>]
-<span id="L686" class="LineNr">686 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">bool</span> [
-<span id="L687" class="LineNr">687 </span>  local-scope
-<span id="L688" class="LineNr">688 </span>  load-ingredients
-<span id="L689" class="LineNr">689 </span>]
-<span id="L690" class="LineNr">690 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: failed to find a matching call for 'foo x'</span>
-<span id="L691" class="LineNr">691 </span><span class="traceContains">+error:   available variants are:</span>
-<span id="L692" class="LineNr">692 </span><span class="traceContains">+error:     <a href='010vm.cc.html#L19'>recipe</a> foo x:&amp;:char</span>
-<span id="L693" class="LineNr">693 </span><span class="traceContains">+error:     <a href='010vm.cc.html#L19'>recipe</a> foo x:&amp;:bool</span>
-<span id="L694" class="LineNr">694 </span>
-<span id="L695" class="LineNr">695 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L696" class="LineNr">696 </span><span class="Normal">using</span> std::abs<span class="Delimiter">;</span>
+<span id="L575" class="LineNr">575 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">char</span> [
+<span id="L576" class="LineNr">576 </span>  local-scope
+<span id="L577" class="LineNr">577 </span>  load-ingredients
+<span id="L578" class="LineNr">578 </span>]
+<span id="L579" class="LineNr">579 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: types don't match in call for 'foo x'</span>
+<span id="L580" class="LineNr">580 </span><span class="traceContains">+error:   which tries to call 'recipe foo x:&amp;:char'</span>
+<span id="L581" class="LineNr">581 </span>
+<span id="L582" class="LineNr">582 </span><span class="Delimiter">:(scenario show_available_variants_in_dispatch_errors)</span>
+<span id="L583" class="LineNr">583 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L584" class="LineNr">584 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L585" class="LineNr">585 </span>  local-scope
+<span id="L586" class="LineNr">586 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L587" class="LineNr">587 </span>  foo x
+<span id="L588" class="LineNr">588 </span>]
+<span id="L589" class="LineNr">589 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">char</span> [
+<span id="L590" class="LineNr">590 </span>  local-scope
+<span id="L591" class="LineNr">591 </span>  load-ingredients
+<span id="L592" class="LineNr">592 </span>]
+<span id="L593" class="LineNr">593 </span><span class="muRecipe">def</span> foo x:&amp;:<span class="Normal">bool</span> [
+<span id="L594" class="LineNr">594 </span>  local-scope
+<span id="L595" class="LineNr">595 </span>  load-ingredients
+<span id="L596" class="LineNr">596 </span>]
+<span id="L597" class="LineNr">597 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: failed to find a matching call for 'foo x'</span>
+<span id="L598" class="LineNr">598 </span><span class="traceContains">+error:   available variants are:</span>
+<span id="L599" class="LineNr">599 </span><span class="traceContains">+error:     <a href='010vm.cc.html#L19'>recipe</a> foo x:&amp;:char</span>
+<span id="L600" class="LineNr">600 </span><span class="traceContains">+error:     <a href='010vm.cc.html#L19'>recipe</a> foo x:&amp;:bool</span>
+<span id="L601" class="LineNr">601 </span>
+<span id="L602" class="LineNr">602 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L603" class="LineNr">603 </span><span class="Normal">using</span> std::abs<span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/055shape_shifting_container.cc.html b/html/055shape_shifting_container.cc.html
index 1ab99309..a21d709c 100644
--- a/html/055shape_shifting_container.cc.html
+++ b/html/055shape_shifting_container.cc.html
@@ -77,701 +77,665 @@ if ('onhashchange' in window) {
 <span id="L12" class="LineNr"> 12 </span>base_type = get_base_type<span class="Delimiter">(</span>base_type<span class="Delimiter">);</span>
 <span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(after &quot;Update MAYBE_CONVERT base_type in Check&quot;)</span>
 <span id="L14" class="LineNr"> 14 </span>base_type = get_base_type<span class="Delimiter">(</span>base_type<span class="Delimiter">);</span>
-<span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(after &quot;Update base_type in size_of(type)&quot;)</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(after &quot;Update base_type in element_type&quot;)</span>
 <span id="L16" class="LineNr"> 16 </span>base_type = get_base_type<span class="Delimiter">(</span>base_type<span class="Delimiter">);</span>
-<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(after &quot;Update base_type in element_type&quot;)</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(after &quot;Update base_type in skip_addresses&quot;)</span>
 <span id="L18" class="LineNr"> 18 </span>base_type = get_base_type<span class="Delimiter">(</span>base_type<span class="Delimiter">);</span>
-<span id="L19" class="LineNr"> 19 </span><span class="CommentedCode">//? :(after &quot;Update base_type in compute_container_address_offsets&quot;)</span>
-<span id="L20" class="LineNr"> 20 </span><span class="CommentedCode">//? base_type = get_base_type(base_type);</span>
-<span id="L21" class="LineNr"> 21 </span><span class="CommentedCode">//? :(after &quot;Update base_type in append_container_address_offsets&quot;)</span>
-<span id="L22" class="LineNr"> 22 </span><span class="CommentedCode">//? base_type = get_base_type(base_type);</span>
-<span id="L23" class="LineNr"> 23 </span><span class="CommentedCode">//? :(after &quot;Update element_base_type For Exclusive Container in append_addresses&quot;)</span>
-<span id="L24" class="LineNr"> 24 </span><span class="CommentedCode">//? element_base_type = get_base_type(element_base_type);</span>
-<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(after &quot;Update base_type in skip_addresses&quot;)</span>
-<span id="L26" class="LineNr"> 26 </span>base_type = get_base_type<span class="Delimiter">(</span>base_type<span class="Delimiter">);</span>
-<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(replace{} &quot;const type_tree* get_base_type(const type_tree* t)&quot;)</span>
-<span id="L28" class="LineNr"> 28 </span><span class="Normal">const</span> type_tree* get_base_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L29" class="LineNr"> 29 </span>  <span class="Normal">const</span> type_tree* result = t<span class="Delimiter">-&gt;</span>atom ? t : t<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L30" class="LineNr"> 30 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L31" class="LineNr"> 31 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L32" class="LineNr"> 32 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">}</span>
-<span id="L34" class="LineNr"> 34 </span>
-<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(scenario ill_formed_container)</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="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">((</span>foo<span class="Delimiter">)</span> num<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L39" class="LineNr"> 39 </span>]
-<span id="L40" class="LineNr"> 40 </span><span class="Comment"># no crash</span>
-<span id="L41" class="LineNr"> 41 </span>
-<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container)</span>
-<span id="L43" class="LineNr"> 43 </span><span class="muData">container</span> foo:_t [
-<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">x</span>:_t
-<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">y</span>:num
-<span id="L46" class="LineNr"> 46 </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">1</span>:foo:num<span class="Special"> &lt;- </span>merge <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">13</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Constant">3</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L50" class="LineNr"> 50 </span>]
-<span id="L51" class="LineNr"> 51 </span><span class="traceContains">+mem: storing 12 in location 1</span>
-<span id="L52" class="LineNr"> 52 </span><span class="traceContains">+mem: storing 13 in location 2</span>
-<span id="L53" class="LineNr"> 53 </span><span class="traceContains">+mem: storing 14 in location 3</span>
-<span id="L54" class="LineNr"> 54 </span><span class="traceContains">+mem: storing 15 in location 4</span>
-<span id="L55" class="LineNr"> 55 </span><span class="traceContains">+mem: storing 16 in location 5</span>
-<span id="L56" class="LineNr"> 56 </span>
-<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_2)</span>
-<span id="L58" class="LineNr"> 58 </span><span class="Comment"># multiple type ingredients</span>
-<span id="L59" class="LineNr"> 59 </span><span class="muData">container</span> foo:_a:_b [
-<span id="L60" class="LineNr"> 60 </span>  <span class="Normal">x</span>:_a
-<span id="L61" class="LineNr"> 61 </span>  <span class="Normal">y</span>:_b
-<span id="L62" class="LineNr"> 62 </span>]
-<span id="L63" class="LineNr"> 63 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L64" class="LineNr"> 64 </span>  <span class="Constant">1</span>:foo:num:<span class="Normal">bool</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">1</span>/<span class="Constant">true</span>
-<span id="L65" class="LineNr"> 65 </span>]
-<span id="L66" class="LineNr"> 66 </span>$error: <span class="Constant">0</span>
-<span id="L67" class="LineNr"> 67 </span>
-<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_3)</span>
-<span id="L69" class="LineNr"> 69 </span><span class="muData">container</span> foo:_a:_b [
-<span id="L70" class="LineNr"> 70 </span>  <span class="Normal">x</span>:_a
-<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">y</span>:_b
-<span id="L72" class="LineNr"> 72 </span>]
-<span id="L73" class="LineNr"> 73 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L74" class="LineNr"> 74 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L75" class="LineNr"> 75 </span>  <span class="Comment"># compound types for type ingredients</span>
-<span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">{</span><span class="Constant">2</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
-<span id="L77" class="LineNr"> 77 </span>]
-<span id="L78" class="LineNr"> 78 </span>$error: <span class="Constant">0</span>
-<span id="L79" class="LineNr"> 79 </span>
-<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_4)</span>
-<span id="L81" class="LineNr"> 81 </span><span class="muData">container</span> foo:_a:_b [
-<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">x</span>:_a
-<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">y</span>:_b
-<span id="L84" class="LineNr"> 84 </span>]
-<span id="L85" class="LineNr"> 85 </span><span class="muData">container</span> bar:_a:_b [
-<span id="L86" class="LineNr"> 86 </span>  <span class="Comment"># dilated element</span>
-<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">{</span>data: <span class="Delimiter">(</span>foo _a <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> _b<span class="Delimiter">))}</span>
-<span id="L88" class="LineNr"> 88 </span>]
-<span id="L89" class="LineNr"> 89 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L90" class="LineNr"> 90 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L91" class="LineNr"> 91 </span>  <span class="Constant">2</span>:bar:num:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(replace{} &quot;const type_tree* get_base_type(const type_tree* t)&quot;)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Normal">const</span> type_tree* get_base_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* t<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Normal">const</span> type_tree* result = t<span class="Delimiter">-&gt;</span>atom ? t : t<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!result<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid type &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>t<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
+<span id="L26" class="LineNr"> 26 </span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(scenario ill_formed_container)</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L29" class="LineNr"> 29 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L30" class="LineNr"> 30 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">((</span>foo<span class="Delimiter">)</span> num<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L31" class="LineNr"> 31 </span>]
+<span id="L32" class="LineNr"> 32 </span><span class="Comment"># no crash</span>
+<span id="L33" class="LineNr"> 33 </span>
+<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: update size_of to handle non-atom container types</span>
+<span id="L35" class="LineNr"> 35 </span>
+<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container)</span>
+<span id="L37" class="LineNr"> 37 </span><span class="muData">container</span> foo:_t [
+<span id="L38" class="LineNr"> 38 </span>  <span class="Normal">x</span>:_t
+<span id="L39" class="LineNr"> 39 </span>  <span class="Normal">y</span>:num
+<span id="L40" class="LineNr"> 40 </span>]
+<span id="L41" class="LineNr"> 41 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L42" class="LineNr"> 42 </span>  <span class="Constant">1</span>:foo:num<span class="Special"> &lt;- </span>merge <span class="Constant">12</span><span class="Delimiter">,</span> <span class="Constant">13</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">3</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L44" class="LineNr"> 44 </span>]
+<span id="L45" class="LineNr"> 45 </span><span class="traceContains">+mem: storing 12 in location 1</span>
+<span id="L46" class="LineNr"> 46 </span><span class="traceContains">+mem: storing 13 in location 2</span>
+<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+mem: storing 14 in location 3</span>
+<span id="L48" class="LineNr"> 48 </span><span class="traceContains">+mem: storing 15 in location 4</span>
+<span id="L49" class="LineNr"> 49 </span><span class="traceContains">+mem: storing 16 in location 5</span>
+<span id="L50" class="LineNr"> 50 </span>
+<span id="L51" class="LineNr"> 51 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_2)</span>
+<span id="L52" class="LineNr"> 52 </span><span class="Comment"># multiple type ingredients</span>
+<span id="L53" class="LineNr"> 53 </span><span class="muData">container</span> foo:_a:_b [
+<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">x</span>:_a
+<span id="L55" class="LineNr"> 55 </span>  <span class="Normal">y</span>:_b
+<span id="L56" class="LineNr"> 56 </span>]
+<span id="L57" class="LineNr"> 57 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">1</span>:foo:num:<span class="Normal">bool</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span><span class="Constant"> true</span>
+<span id="L59" class="LineNr"> 59 </span>]
+<span id="L60" class="LineNr"> 60 </span>$error: <span class="Constant">0</span>
+<span id="L61" class="LineNr"> 61 </span>
+<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_3)</span>
+<span id="L63" class="LineNr"> 63 </span><span class="muData">container</span> foo:_a:_b [
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">x</span>:_a
+<span id="L65" class="LineNr"> 65 </span>  <span class="Normal">y</span>:_b
+<span id="L66" class="LineNr"> 66 </span>]
+<span id="L67" class="LineNr"> 67 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L68" class="LineNr"> 68 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L69" class="LineNr"> 69 </span>  <span class="Comment"># compound types for type ingredients</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Delimiter">{</span><span class="Constant">3</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
+<span id="L71" class="LineNr"> 71 </span>]
+<span id="L72" class="LineNr"> 72 </span>$error: <span class="Constant">0</span>
+<span id="L73" class="LineNr"> 73 </span>
+<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(scenario size_of_shape_shifting_container_4)</span>
+<span id="L75" class="LineNr"> 75 </span><span class="muData">container</span> foo:_a:_b [
+<span id="L76" class="LineNr"> 76 </span>  <span class="Normal">x</span>:_a
+<span id="L77" class="LineNr"> 77 </span>  <span class="Normal">y</span>:_b
+<span id="L78" class="LineNr"> 78 </span>]
+<span id="L79" class="LineNr"> 79 </span><span class="muData">container</span> bar:_a:_b [
+<span id="L80" class="LineNr"> 80 </span>  <span class="Comment"># dilated element</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Delimiter">{</span>data: <span class="Delimiter">(</span>foo _a <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> _b<span class="Delimiter">))}</span>
+<span id="L82" class="LineNr"> 82 </span>]
+<span id="L83" class="LineNr"> 83 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L84" class="LineNr"> 84 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L85" class="LineNr"> 85 </span>  <span class="Constant">3</span>:bar:num:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
+<span id="L86" class="LineNr"> 86 </span>]
+<span id="L87" class="LineNr"> 87 </span>$error: <span class="Constant">0</span>
+<span id="L88" class="LineNr"> 88 </span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(scenario shape_shifting_container_extend)</span>
+<span id="L90" class="LineNr"> 90 </span><span class="muData">container</span> foo:_a [
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">x</span>:_a
 <span id="L92" class="LineNr"> 92 </span>]
-<span id="L93" class="LineNr"> 93 </span>$error: <span class="Constant">0</span>
-<span id="L94" class="LineNr"> 94 </span>
-<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">:(scenario shape_shifting_container_extend)</span>
-<span id="L96" class="LineNr"> 96 </span><span class="muData">container</span> foo:_a [
-<span id="L97" class="LineNr"> 97 </span>  <span class="Normal">x</span>:_a
-<span id="L98" class="LineNr"> 98 </span>]
-<span id="L99" class="LineNr"> 99 </span><span class="muData">container</span> foo:_a [
-<span id="L100" class="LineNr">100 </span>  <span class="Normal">y</span>:_a
-<span id="L101" class="LineNr">101 </span>]
-<span id="L102" class="LineNr">102 </span>$error: <span class="Constant">0</span>
-<span id="L103" class="LineNr">103 </span>
-<span id="L104" class="LineNr">104 </span><span class="Delimiter">:(scenario shape_shifting_container_extend_error)</span>
-<span id="L105" class="LineNr">105 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L106" class="LineNr">106 </span><span class="muData">container</span> foo:_a [
-<span id="L107" class="LineNr">107 </span>  <span class="Normal">x</span>:_a
-<span id="L108" class="LineNr">108 </span>]
-<span id="L109" class="LineNr">109 </span><span class="muData">container</span> foo:_b [
-<span id="L110" class="LineNr">110 </span>  <span class="Normal">y</span>:_b
-<span id="L111" class="LineNr">111 </span>]
-<span id="L112" class="LineNr">112 </span><span class="traceContains">+error: headers of container 'foo' must use identical type ingredients</span>
-<span id="L113" class="LineNr">113 </span>
-<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(scenario type_ingredient_must_start_with_underscore)</span>
-<span id="L115" class="LineNr">115 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L116" class="LineNr">116 </span><span class="muData">container</span> foo:t [
-<span id="L117" class="LineNr">117 </span>  <span class="Normal">x</span>:num
-<span id="L118" class="LineNr">118 </span>]
-<span id="L119" class="LineNr">119 </span><span class="traceContains">+error: foo: type ingredient 't' must begin with an underscore</span>
-<span id="L120" class="LineNr">120 </span>
-<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L122" class="LineNr">122 </span><span class="Comment">// We'll use large type ordinals to mean &quot;the following type of the variable&quot;.</span>
-<span id="L123" class="LineNr">123 </span><span class="Comment">// For example, if we have a generic type called foo:_elem, the type</span>
-<span id="L124" class="LineNr">124 </span><span class="Comment">// ingredient _elem in foo's type_info will have value START_TYPE_INGREDIENTS,</span>
-<span id="L125" class="LineNr">125 </span><span class="Comment">// and we'll handle it by looking in the current reagent for the next type</span>
-<span id="L126" class="LineNr">126 </span><span class="Comment">// that appears after foo.</span>
-<span id="L127" class="LineNr">127 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> START_TYPE_INGREDIENTS = <span class="Constant">2000</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>  <span class="Comment">// after loading .mu files</span>
-<span id="L129" class="LineNr">129 </span>assert<span class="Delimiter">(</span>Next_type_ordinal &lt; START_TYPE_INGREDIENTS<span class="Delimiter">);</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(before &quot;End type_info Fields&quot;)</span>
-<span id="L132" class="LineNr">132 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; type_ingredient_names<span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>
-<span id="L134" class="LineNr">134 </span><span class="Comment">//: Suppress unknown type checks in shape-shifting containers.</span>
-<span id="L135" class="LineNr">135 </span>
-<span id="L136" class="LineNr">136 </span><span class="Delimiter">:(before &quot;Check Container Field Types(info)&quot;)</span>
-<span id="L137" class="LineNr">137 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L138" class="LineNr">138 </span>
-<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(before &quot;End container Name Refinements&quot;)</span>
-<span id="L140" class="LineNr">140 </span><span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">':'</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L141" class="LineNr">141 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;container has type ingredients; parsing&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L142" class="LineNr">142 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!read_type_ingredients<span class="Delimiter">(</span>name<span class="Delimiter">,</span> command<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>    <span class="Comment">// error; skip rest of the container definition and continue</span>
-<span id="L144" class="LineNr">144 </span>    <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L145" class="LineNr">145 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
-<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
-<span id="L148" class="LineNr">148 </span>
-<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(code)</span>
-<span id="L150" class="LineNr">150 </span><span class="Normal">bool</span> read_type_ingredients<span class="Delimiter">(</span>string&amp; name<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; command<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L151" class="LineNr">151 </span>  string save_name = name<span class="Delimiter">;</span>
-<span id="L152" class="LineNr">152 </span>  istringstream in<span class="Delimiter">(</span>save_name<span class="Delimiter">);</span>
-<span id="L153" class="LineNr">153 </span>  name = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
-<span id="L154" class="LineNr">154 </span>  map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; type_ingredient_names<span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!slurp_type_ingredients<span class="Delimiter">(</span>in<span class="Delimiter">,</span> type_ingredient_names<span class="Delimiter">,</span> name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L156" class="LineNr">156 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span>  <span class="Delimiter">}</span>
-<span id="L158" class="LineNr">158 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span>
-<span id="L159" class="LineNr">159 </span>      &amp;&amp; contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L160" class="LineNr">160 </span>    <span class="Normal">const</span> type_info&amp; previous_info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
-<span id="L161" class="LineNr">161 </span>    <span class="Comment">// we've already seen this container; make sure type ingredients match</span>
-<span id="L162" class="LineNr">162 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type_ingredients_match<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">,</span> previous_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr">163 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;headers of &quot;</span> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' must use identical type ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L164" class="LineNr">164 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span>    <span class="Delimiter">}</span>
-<span id="L166" class="LineNr">166 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Delimiter">}</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Comment">// we haven't seen this container before</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
-<span id="L170" class="LineNr">170 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L171" class="LineNr">171 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
-<span id="L172" class="LineNr">172 </span>  info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">);</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
-<span id="L175" class="LineNr">175 </span>
-<span id="L176" class="LineNr">176 </span><span class="Normal">bool</span> slurp_type_ingredients<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; container_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>  <span class="Normal">int</span> next_type_ordinal = START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L179" class="LineNr">179 </span>    string curr = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
-<span id="L180" class="LineNr">180 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L181" class="LineNr">181 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: empty type ingredients not permitted</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L182" class="LineNr">182 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L183" class="LineNr">183 </span>    <span class="Delimiter">}</span>
-<span id="L184" class="LineNr">184 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L185" class="LineNr">185 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: type ingredient '&quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">&quot;' must begin with an underscore</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L186" class="LineNr">186 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L187" class="LineNr">187 </span>    <span class="Delimiter">}</span>
-<span id="L188" class="LineNr">188 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>out<span class="Delimiter">.</span>find<span class="Delimiter">(</span>curr<span class="Delimiter">)</span> != out<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: can't repeat type ingredient name'&quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">&quot;' in a single container definition</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L190" class="LineNr">190 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L191" class="LineNr">191 </span>    <span class="Delimiter">}</span>
-<span id="L192" class="LineNr">192 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> next_type_ordinal++<span class="Delimiter">);</span>
-<span id="L193" class="LineNr">193 </span>  <span class="Delimiter">}</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L195" class="LineNr">195 </span><span class="Delimiter">}</span>
-<span id="L196" class="LineNr">196 </span>
-<span id="L197" class="LineNr">197 </span><span class="Normal">bool</span> type_ingredients_match<span class="Delimiter">(</span><span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>a<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>b<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;::const_iterator p = a<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != a<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L200" class="LineNr">200 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>b<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L201" class="LineNr">201 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second != get<span class="Delimiter">(</span>b<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L202" class="LineNr">202 </span>  <span class="Delimiter">}</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="muData">container</span> foo:_a [
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">y</span>:_a
+<span id="L95" class="LineNr"> 95 </span>]
+<span id="L96" class="LineNr"> 96 </span>$error: <span class="Constant">0</span>
+<span id="L97" class="LineNr"> 97 </span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(scenario shape_shifting_container_extend_error)</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L100" class="LineNr">100 </span><span class="muData">container</span> foo:_a [
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">x</span>:_a
+<span id="L102" class="LineNr">102 </span>]
+<span id="L103" class="LineNr">103 </span><span class="muData">container</span> foo:_b [
+<span id="L104" class="LineNr">104 </span>  <span class="Normal">y</span>:_b
+<span id="L105" class="LineNr">105 </span>]
+<span id="L106" class="LineNr">106 </span><span class="traceContains">+error: headers of container 'foo' must use identical type ingredients</span>
+<span id="L107" class="LineNr">107 </span>
+<span id="L108" class="LineNr">108 </span><span class="Delimiter">:(scenario type_ingredient_must_start_with_underscore)</span>
+<span id="L109" class="LineNr">109 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L110" class="LineNr">110 </span><span class="muData">container</span> foo:t [
+<span id="L111" class="LineNr">111 </span>  <span class="Normal">x</span>:num
+<span id="L112" class="LineNr">112 </span>]
+<span id="L113" class="LineNr">113 </span><span class="traceContains">+error: foo: type ingredient 't' must begin with an underscore</span>
+<span id="L114" class="LineNr">114 </span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L116" class="LineNr">116 </span><span class="Comment">// We'll use large type ordinals to mean &quot;the following type of the variable&quot;.</span>
+<span id="L117" class="LineNr">117 </span><span class="Comment">// For example, if we have a generic type called foo:_elem, the type</span>
+<span id="L118" class="LineNr">118 </span><span class="Comment">// ingredient _elem in foo's type_info will have value START_TYPE_INGREDIENTS,</span>
+<span id="L119" class="LineNr">119 </span><span class="Comment">// and we'll handle it by looking in the current reagent for the next type</span>
+<span id="L120" class="LineNr">120 </span><span class="Comment">// that appears after foo.</span>
+<span id="L121" class="LineNr">121 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> START_TYPE_INGREDIENTS = <span class="Constant">2000</span><span class="Delimiter">;</span>
+<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>  <span class="Comment">// after loading .mu files</span>
+<span id="L123" class="LineNr">123 </span>assert<span class="Delimiter">(</span>Next_type_ordinal &lt; START_TYPE_INGREDIENTS<span class="Delimiter">);</span>
+<span id="L124" class="LineNr">124 </span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(before &quot;End type_info Fields&quot;)</span>
+<span id="L126" class="LineNr">126 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; type_ingredient_names<span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </span>
+<span id="L128" class="LineNr">128 </span><span class="Comment">//: Suppress unknown type checks in shape-shifting containers.</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span><span class="Delimiter">:(before &quot;Check Container Field Types(info)&quot;)</span>
+<span id="L131" class="LineNr">131 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span>
+<span id="L133" class="LineNr">133 </span><span class="Delimiter">:(before &quot;End container Name Refinements&quot;)</span>
+<span id="L134" class="LineNr">134 </span><span class="Normal">if</span> <span class="Delimiter">(</span>name<span class="Delimiter">.</span>find<span class="Delimiter">(</span><span class="Constant">':'</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L135" class="LineNr">135 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;container has type ingredients; parsing&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L136" class="LineNr">136 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!read_type_ingredients<span class="Delimiter">(</span>name<span class="Delimiter">,</span> command<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>    <span class="Comment">// error; skip rest of the container definition and continue</span>
+<span id="L138" class="LineNr">138 </span>    <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L139" class="LineNr">139 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
+<span id="L142" class="LineNr">142 </span>
+<span id="L143" class="LineNr">143 </span><span class="Delimiter">:(code)</span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">bool</span> read_type_ingredients<span class="Delimiter">(</span>string&amp; name<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; command<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  string save_name = name<span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>  istringstream in<span class="Delimiter">(</span>save_name<span class="Delimiter">);</span>
+<span id="L147" class="LineNr">147 </span>  name = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
+<span id="L148" class="LineNr">148 </span>  map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; type_ingredient_names<span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!slurp_type_ingredients<span class="Delimiter">(</span>in<span class="Delimiter">,</span> type_ingredient_names<span class="Delimiter">,</span> name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L150" class="LineNr">150 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span>
+<span id="L153" class="LineNr">153 </span>      &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L154" class="LineNr">154 </span>    <span class="Normal">const</span> type_info&amp; previous_info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
+<span id="L155" class="LineNr">155 </span>    <span class="Comment">// we've already seen this container; make sure type ingredients match</span>
+<span id="L156" class="LineNr">156 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!type_ingredients_match<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">,</span> previous_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L157" class="LineNr">157 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;headers of &quot;</span> &lt;&lt; command &lt;&lt; <span class="Constant">&quot; '&quot;</span> &lt;&lt; name &lt;&lt; <span class="Constant">&quot;' must use identical type ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><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 class="Comment">// we haven't seen this container before</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L164" class="LineNr">164 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L165" class="LineNr">165 </span>  type_info&amp; info = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> name<span class="Delimiter">));</span>
+<span id="L166" class="LineNr">166 </span>  info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>type_ingredient_names<span class="Delimiter">);</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span><span class="Delimiter">}</span>
+<span id="L169" class="LineNr">169 </span>
+<span id="L170" class="LineNr">170 </span><span class="Normal">bool</span> slurp_type_ingredients<span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; container_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Normal">int</span> next_type_ordinal = START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L239'>has_data</a><span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>    string curr = slurp_until<span class="Delimiter">(</span>in<span class="Delimiter">,</span> <span class="Constant">':'</span><span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L175" class="LineNr">175 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: empty type ingredients not permitted</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L176" class="LineNr">176 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span>    <span class="Delimiter">}</span>
+<span id="L178" class="LineNr">178 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L179" class="LineNr">179 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: type ingredient '&quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">&quot;' must begin with an underscore</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L180" class="LineNr">180 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L181" class="LineNr">181 </span>    <span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>out<span class="Delimiter">.</span>find<span class="Delimiter">(</span>curr<span class="Delimiter">)</span> != out<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L183" class="LineNr">183 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; container_name &lt;&lt; <span class="Constant">&quot;: can't repeat type ingredient name'&quot;</span> &lt;&lt; curr &lt;&lt; <span class="Constant">&quot;' in a single container definition</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L184" class="LineNr">184 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L185" class="LineNr">185 </span>    <span class="Delimiter">}</span>
+<span id="L186" class="LineNr">186 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Delimiter">}</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
+<span id="L190" class="LineNr">190 </span>
+<span id="L191" class="LineNr">191 </span><span class="Normal">bool</span> type_ingredients_match<span class="Delimiter">(</span><span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;&amp; b<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>a<span class="Delimiter">)</span> != <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>b<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;::const_iterator p = a<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != a<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L194" class="LineNr">194 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>b<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second != get<span class="Delimiter">(</span>b<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Delimiter">}</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L198" class="LineNr">198 </span><span class="Delimiter">}</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L446'>insert_container</a> Special-cases&quot;)</span>
+<span id="L201" class="LineNr">201 </span><span class="Comment">// check for use of type ingredients</span>
+<span id="L202" class="LineNr">202 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L203" class="LineNr">203 </span>  type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
 <span id="L204" class="LineNr">204 </span><span class="Delimiter">}</span>
-<span id="L205" class="LineNr">205 </span>
-<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L661'>insert_container</a> Special-cases&quot;)</span>
-<span id="L207" class="LineNr">207 </span><span class="Comment">// check for use of type ingredients</span>
-<span id="L208" class="LineNr">208 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L209" class="LineNr">209 </span>  type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(code)</span>
-<span id="L212" class="LineNr">212 </span><span class="Normal">bool</span> is_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">);</span>
-<span id="L214" class="LineNr">214 </span><span class="Delimiter">}</span>
-<span id="L215" class="LineNr">215 </span>
-<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(before &quot;End Container Type Checks&quot;)</span>
-<span id="L217" class="LineNr">217 </span><span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS
-<span id="L218" class="LineNr">218 </span>    &amp;&amp; <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value - START_TYPE_INGREDIENTS<span class="Delimiter">)</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>type_ingredient_names<span class="Delimiter">))</span>
-<span id="L219" class="LineNr">219 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L220" class="LineNr">220 </span>
-<span id="L221" class="LineNr">221 </span><span class="Delimiter">:(scenario size_of_shape_shifting_exclusive_container)</span>
-<span id="L222" class="LineNr">222 </span><span class="muData">exclusive-container</span> foo:_t [
-<span id="L223" class="LineNr">223 </span>  <span class="Normal">x</span>:_t
-<span id="L224" class="LineNr">224 </span>  <span class="Normal">y</span>:num
-<span id="L225" class="LineNr">225 </span>]
-<span id="L226" class="LineNr">226 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L227" class="LineNr">227 </span>  <span class="Constant">1</span>:foo:num<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Constant">3</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Constant">6</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
-<span id="L230" class="LineNr">230 </span>]
-<span id="L231" class="LineNr">231 </span><span class="traceContains">+run: {1: (&quot;foo&quot; &quot;number&quot;)} &lt;- merge {0: &quot;literal&quot;, &quot;x&quot;: ()}, {34: &quot;literal&quot;}</span>
-<span id="L232" class="LineNr">232 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L233" class="LineNr">233 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L234" class="LineNr">234 </span><span class="traceContains">+run: {3: (&quot;foo&quot; &quot;point&quot;)} &lt;- merge {0: &quot;literal&quot;, &quot;x&quot;: ()}, {15: &quot;literal&quot;}, {16: &quot;literal&quot;}</span>
-<span id="L235" class="LineNr">235 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L236" class="LineNr">236 </span><span class="traceContains">+mem: storing 15 in location 4</span>
-<span id="L237" class="LineNr">237 </span><span class="traceContains">+mem: storing 16 in location 5</span>
-<span id="L238" class="LineNr">238 </span><span class="traceContains">+run: {6: (&quot;foo&quot; &quot;point&quot;)} &lt;- merge {1: &quot;literal&quot;, &quot;y&quot;: ()}, {23: &quot;literal&quot;}</span>
-<span id="L239" class="LineNr">239 </span><span class="traceContains">+mem: storing 1 in location 6</span>
-<span id="L240" class="LineNr">240 </span><span class="traceContains">+mem: storing 23 in location 7</span>
-<span id="L241" class="LineNr">241 </span><span class="traceContains">+run: return</span>
-<span id="L242" class="LineNr">242 </span><span class="Comment"># no other stores</span>
-<span id="L243" class="LineNr">243 </span><span class="Special">% CHECK_EQ(trace_count_prefix(&quot;mem&quot;, &quot;storing&quot;), 7);</span>
-<span id="L244" class="LineNr">244 </span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(before &quot;End variant_type Special-cases&quot;)</span>
-<span id="L246" class="LineNr">246 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient<span class="Delimiter">(</span>element<span class="Delimiter">))</span>
-<span id="L247" class="LineNr">247 </span>  replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">,</span> <span class="Constant">&quot; while computing variant type of exclusive-container&quot;</span><span class="Delimiter">);</span>
-<span id="L248" class="LineNr">248 </span>
-<span id="L249" class="LineNr">249 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container)</span>
-<span id="L250" class="LineNr">250 </span><span class="muData">container</span> foo:_t [
-<span id="L251" class="LineNr">251 </span>  <span class="Normal">x</span>:_t
-<span id="L252" class="LineNr">252 </span>  <span class="Normal">y</span>:num
-<span id="L253" class="LineNr">253 </span>]
-<span id="L254" class="LineNr">254 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L255" class="LineNr">255 </span>  <span class="Constant">1</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span>
-<span id="L257" class="LineNr">257 </span>]
-<span id="L258" class="LineNr">258 </span><span class="traceContains">+mem: storing 16 in location 2</span>
-<span id="L259" class="LineNr">259 </span>
-<span id="L260" class="LineNr">260 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_2)</span>
-<span id="L261" class="LineNr">261 </span><span class="muData">container</span> foo:_t [
-<span id="L262" class="LineNr">262 </span>  <span class="Normal">x</span>:_t
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">y</span>:num
-<span id="L264" class="LineNr">264 </span>]
-<span id="L265" class="LineNr">265 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L266" class="LineNr">266 </span>  <span class="Constant">1</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Constant">2</span>:point<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L268" class="LineNr">268 </span>]
-<span id="L269" class="LineNr">269 </span><span class="traceContains">+mem: storing 14 in location 2</span>
-<span id="L270" class="LineNr">270 </span><span class="traceContains">+mem: storing 15 in location 3</span>
-<span id="L271" class="LineNr">271 </span>
-<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_3)</span>
-<span id="L273" class="LineNr">273 </span><span class="muData">container</span> foo:_t [
-<span id="L274" class="LineNr">274 </span>  <span class="Normal">x</span>:_t
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">y</span>:num
-<span id="L276" class="LineNr">276 </span>]
-<span id="L277" class="LineNr">277 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L278" class="LineNr">278 </span>  <span class="Constant">1</span>:foo:&amp;:point<span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/unsafe<span class="Delimiter">,</span> <span class="Constant">48</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Constant">3</span>:&amp;:point<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:&amp;:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L280" class="LineNr">280 </span>]
-<span id="L281" class="LineNr">281 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L282" class="LineNr">282 </span>
-<span id="L283" class="LineNr">283 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_inside_container)</span>
-<span id="L284" class="LineNr">284 </span><span class="muData">container</span> foo:_t [
-<span id="L285" class="LineNr">285 </span>  <span class="Normal">x</span>:_t
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(code)</span>
+<span id="L206" class="LineNr">206 </span><span class="Normal">bool</span> is_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L207" class="LineNr">207 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;_&quot;</span><span class="Delimiter">);</span>
+<span id="L208" class="LineNr">208 </span><span class="Delimiter">}</span>
+<span id="L209" class="LineNr">209 </span>
+<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Container Type Checks&quot;)</span>
+<span id="L211" class="LineNr">211 </span><span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS
+<span id="L212" class="LineNr">212 </span>    &amp;&amp; <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value - START_TYPE_INGREDIENTS<span class="Delimiter">)</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>type_ingredient_names<span class="Delimiter">))</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>
+<span id="L215" class="LineNr">215 </span><span class="Delimiter">:(scenario size_of_shape_shifting_exclusive_container)</span>
+<span id="L216" class="LineNr">216 </span><span class="muData">exclusive-container</span> foo:_t [
+<span id="L217" class="LineNr">217 </span>  <span class="Normal">x</span>:_t
+<span id="L218" class="LineNr">218 </span>  <span class="Normal">y</span>:num
+<span id="L219" class="LineNr">219 </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="Constant">1</span>:foo:num<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Constant">3</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Constant">6</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
+<span id="L224" class="LineNr">224 </span>]
+<span id="L225" class="LineNr">225 </span><span class="traceContains">+run: {1: (&quot;foo&quot; &quot;number&quot;)} &lt;- merge {0: &quot;literal&quot;, &quot;x&quot;: ()}, {34: &quot;literal&quot;}</span>
+<span id="L226" class="LineNr">226 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L227" class="LineNr">227 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L228" class="LineNr">228 </span><span class="traceContains">+run: {3: (&quot;foo&quot; &quot;point&quot;)} &lt;- merge {0: &quot;literal&quot;, &quot;x&quot;: ()}, {15: &quot;literal&quot;}, {16: &quot;literal&quot;}</span>
+<span id="L229" class="LineNr">229 </span><span class="traceContains">+mem: storing 0 in location 3</span>
+<span id="L230" class="LineNr">230 </span><span class="traceContains">+mem: storing 15 in location 4</span>
+<span id="L231" class="LineNr">231 </span><span class="traceContains">+mem: storing 16 in location 5</span>
+<span id="L232" class="LineNr">232 </span><span class="traceContains">+run: {6: (&quot;foo&quot; &quot;point&quot;)} &lt;- merge {1: &quot;literal&quot;, &quot;y&quot;: ()}, {23: &quot;literal&quot;}</span>
+<span id="L233" class="LineNr">233 </span><span class="traceContains">+mem: storing 1 in location 6</span>
+<span id="L234" class="LineNr">234 </span><span class="traceContains">+mem: storing 23 in location 7</span>
+<span id="L235" class="LineNr">235 </span><span class="traceContains">+run: return</span>
+<span id="L236" class="LineNr">236 </span><span class="Comment"># no other stores</span>
+<span id="L237" class="LineNr">237 </span><span class="Special">% CHECK_EQ(trace_count_prefix(&quot;mem&quot;, &quot;storing&quot;), 7);</span>
+<span id="L238" class="LineNr">238 </span>
+<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(before &quot;End variant_type Special-cases&quot;)</span>
+<span id="L240" class="LineNr">240 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient<span class="Delimiter">(</span>element<span class="Delimiter">))</span>
+<span id="L241" class="LineNr">241 </span>  replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">,</span> <span class="Constant">&quot; while computing variant type of exclusive-container&quot;</span><span class="Delimiter">);</span>
+<span id="L242" class="LineNr">242 </span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container)</span>
+<span id="L244" class="LineNr">244 </span><span class="muData">container</span> foo:_t [
+<span id="L245" class="LineNr">245 </span>  <span class="Normal">x</span>:_t
+<span id="L246" class="LineNr">246 </span>  <span class="Normal">y</span>:num
+<span id="L247" class="LineNr">247 </span>]
+<span id="L248" class="LineNr">248 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L249" class="LineNr">249 </span>  <span class="Constant">1</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L250" class="LineNr">250 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span>
+<span id="L251" class="LineNr">251 </span>]
+<span id="L252" class="LineNr">252 </span><span class="traceContains">+mem: storing 16 in location 4</span>
+<span id="L253" class="LineNr">253 </span>
+<span id="L254" class="LineNr">254 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_2)</span>
+<span id="L255" class="LineNr">255 </span><span class="muData">container</span> foo:_t [
+<span id="L256" class="LineNr">256 </span>  <span class="Normal">x</span>:_t
+<span id="L257" class="LineNr">257 </span>  <span class="Normal">y</span>:num
+<span id="L258" class="LineNr">258 </span>]
+<span id="L259" class="LineNr">259 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L260" class="LineNr">260 </span>  <span class="Constant">1</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Constant">4</span>:point<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L262" class="LineNr">262 </span>]
+<span id="L263" class="LineNr">263 </span><span class="traceContains">+mem: storing 14 in location 4</span>
+<span id="L264" class="LineNr">264 </span><span class="traceContains">+mem: storing 15 in location 5</span>
+<span id="L265" class="LineNr">265 </span>
+<span id="L266" class="LineNr">266 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_3)</span>
+<span id="L267" class="LineNr">267 </span><span class="muData">container</span> foo:_t [
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">x</span>:_t
+<span id="L269" class="LineNr">269 </span>  <span class="Normal">y</span>:num
+<span id="L270" class="LineNr">270 </span>]
+<span id="L271" class="LineNr">271 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L272" class="LineNr">272 </span>  <span class="Constant">1</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Constant">3</span>:foo:&amp;:point<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>:&amp;:point<span class="Delimiter">,</span> <span class="Constant">48</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Constant">6</span>:&amp;:point<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo:&amp;:point<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L275" class="LineNr">275 </span>]
+<span id="L276" class="LineNr">276 </span><span class="traceContains">+mem: storing 0 in location 6</span>
+<span id="L277" class="LineNr">277 </span><span class="traceContains">+mem: storing 34 in location 7</span>
+<span id="L278" class="LineNr">278 </span>
+<span id="L279" class="LineNr">279 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_inside_container)</span>
+<span id="L280" class="LineNr">280 </span><span class="muData">container</span> foo:_t [
+<span id="L281" class="LineNr">281 </span>  <span class="Normal">x</span>:_t
+<span id="L282" class="LineNr">282 </span>  <span class="Normal">y</span>:num
+<span id="L283" class="LineNr">283 </span>]
+<span id="L284" class="LineNr">284 </span><span class="muData">container</span> bar [
+<span id="L285" class="LineNr">285 </span>  <span class="Normal">x</span>:foo:point
 <span id="L286" class="LineNr">286 </span>  <span class="Normal">y</span>:num
 <span id="L287" class="LineNr">287 </span>]
-<span id="L288" class="LineNr">288 </span><span class="muData">container</span> bar [
-<span id="L289" class="LineNr">289 </span>  <span class="Normal">x</span>:foo:point
-<span id="L290" class="LineNr">290 </span>  <span class="Normal">y</span>:num
+<span id="L288" class="LineNr">288 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L289" class="LineNr">289 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span><span class="Delimiter">,</span> <span class="Constant">17</span>
+<span id="L290" class="LineNr">290 </span>  <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:bar<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
 <span id="L291" class="LineNr">291 </span>]
-<span id="L292" class="LineNr">292 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L293" class="LineNr">293 </span>  <span class="Constant">1</span>:bar<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span><span class="Delimiter">,</span> <span class="Constant">17</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:bar<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L295" class="LineNr">295 </span>]
-<span id="L296" class="LineNr">296 </span><span class="traceContains">+mem: storing 17 in location 2</span>
-<span id="L297" class="LineNr">297 </span>
-<span id="L298" class="LineNr">298 </span><span class="Delimiter">:(scenario get_on_complex_shape_shifting_container)</span>
-<span id="L299" class="LineNr">299 </span><span class="muData">container</span> foo:_a:_b [
-<span id="L300" class="LineNr">300 </span>  <span class="Normal">x</span>:_a
-<span id="L301" class="LineNr">301 </span>  <span class="Normal">y</span>:_b
-<span id="L302" class="LineNr">302 </span>]
-<span id="L303" class="LineNr">303 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L304" class="LineNr">304 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L305" class="LineNr">305 </span>  <span class="Delimiter">{</span><span class="Constant">2</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
-<span id="L306" class="LineNr">306 </span>  <span class="Constant">3</span>:text<span class="Special"> &lt;- </span>get <span class="Delimiter">{</span><span class="Constant">2</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">))},</span> <span class="Constant">y:offset</span>
-<span id="L307" class="LineNr">307 </span>  <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:text<span class="Delimiter">,</span> <span class="Constant">3</span>:text
-<span id="L308" class="LineNr">308 </span>]
-<span id="L309" class="LineNr">309 </span><span class="traceContains">+mem: storing 1 in location 4</span>
-<span id="L310" class="LineNr">310 </span>
-<span id="L311" class="LineNr">311 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L429'>element_type</a> Special-cases&quot;)</span>
-<span id="L312" class="LineNr">312 </span>replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">,</span> type<span class="Delimiter">,</span> info<span class="Delimiter">,</span> <span class="Constant">&quot; while computing element type of container&quot;</span><span class="Delimiter">);</span>
-<span id="L313" class="LineNr">313 </span><span class="Delimiter">:(before &quot;Compute Container Size(element, full_type)&quot;)</span>
-<span id="L314" class="LineNr">314 </span>replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">,</span> full_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L315" class="LineNr">315 </span><span class="Delimiter">:(before &quot;Compute Exclusive Container Size(element, full_type)&quot;)</span>
-<span id="L316" class="LineNr">316 </span>replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">,</span> full_type<span class="Delimiter">,</span> exclusive_container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L317" class="LineNr">317 </span><span class="CommentedCode">//? :(before &quot;Compute Container Address Offset(element)&quot;)</span>
-<span id="L318" class="LineNr">318 </span><span class="CommentedCode">//? replace_type_ingredients(element, type, info, location_for_error_messages);</span>
-<span id="L319" class="LineNr">319 </span><span class="CommentedCode">//? if (contains_type_ingredient(element)) return;  // error raised elsewhere</span>
-<span id="L320" class="LineNr">320 </span>
-<span id="L321" class="LineNr">321 </span><span class="Delimiter">:(after &quot;Compute size_of Container&quot;)</span>
-<span id="L322" class="LineNr">322 </span>assert<span class="Delimiter">(</span>!contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L323" class="LineNr">323 </span><span class="Delimiter">:(after &quot;Compute size_of Exclusive Container&quot;)</span>
-<span id="L324" class="LineNr">324 </span>assert<span class="Delimiter">(</span>!contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L325" class="LineNr">325 </span>
-<span id="L326" class="LineNr">326 </span><span class="Delimiter">:(code)</span>
-<span id="L327" class="LineNr">327 </span><span class="Normal">bool</span> contains_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Identifier">return</span> contains_type_ingredient<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L292" class="LineNr">292 </span><span class="traceContains">+mem: storing 17 in location 5</span>
+<span id="L293" class="LineNr">293 </span>
+<span id="L294" class="LineNr">294 </span><span class="Delimiter">:(scenario get_on_complex_shape_shifting_container)</span>
+<span id="L295" class="LineNr">295 </span><span class="muData">container</span> foo:_a:_b [
+<span id="L296" class="LineNr">296 </span>  <span class="Normal">x</span>:_a
+<span id="L297" class="LineNr">297 </span>  <span class="Normal">y</span>:_b
+<span id="L298" class="LineNr">298 </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="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L301" class="LineNr">301 </span>  <span class="Delimiter">{</span><span class="Constant">3</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">))}</span><span class="Special"> &lt;- </span>merge <span class="Constant">34</span>/x<span class="Delimiter">,</span> <span class="Constant">1</span>:text/y
+<span id="L302" class="LineNr">302 </span>  <span class="Constant">6</span>:text<span class="Special"> &lt;- </span>get <span class="Delimiter">{</span><span class="Constant">3</span>: <span class="Delimiter">(</span>foo number <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">))},</span> <span class="Constant">y:offset</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Constant">8</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">1</span>:text<span class="Delimiter">,</span> <span class="Constant">6</span>:text
+<span id="L304" class="LineNr">304 </span>]
+<span id="L305" class="LineNr">305 </span><span class="traceContains">+mem: storing 1 in location 8</span>
+<span id="L306" class="LineNr">306 </span>
+<span id="L307" class="LineNr">307 </span><span class="Delimiter">:(before &quot;End <a href='030container.cc.html#L212'>element_type</a> Special-cases&quot;)</span>
+<span id="L308" class="LineNr">308 </span>replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">,</span> type<span class="Delimiter">,</span> info<span class="Delimiter">,</span> <span class="Constant">&quot; while computing element type of container&quot;</span><span class="Delimiter">);</span>
+<span id="L309" class="LineNr">309 </span>
+<span id="L310" class="LineNr">310 </span><span class="Delimiter">:(before &quot;End size_of(type) Non-atom Special-cases&quot;)</span>
+<span id="L311" class="LineNr">311 </span>assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L312" class="LineNr">312 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L313" class="LineNr">313 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;no such type &quot;</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span><span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>type_info t = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L317" class="LineNr">317 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L318" class="LineNr">318 </span>  <span class="Comment">// size of a container is the sum of the sizes of its elements</span>
+<span id="L319" class="LineNr">319 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L320" class="LineNr">320 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L321" class="LineNr">321 </span>    <span class="Comment">// todo: strengthen assertion to disallow mutual type recursion</span>
+<span id="L322" class="LineNr">322 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>get_base_type<span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">)-&gt;</span>value == get_base_type<span class="Delimiter">(</span>type<span class="Delimiter">)-&gt;</span>value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;container &quot;</span> &lt;&lt; t<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; can't include itself as a member</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L324" class="LineNr">324 </span>      <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Delimiter">}</span>
+<span id="L326" class="LineNr">326 </span>    result += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Delimiter">}</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L329" class="LineNr">329 </span><span class="Delimiter">}</span>
-<span id="L330" class="LineNr">330 </span>
-<span id="L331" class="LineNr">331 </span><span class="Normal">bool</span> contains_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L332" class="LineNr">332 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
-<span id="L334" class="LineNr">334 </span>  <span class="Identifier">return</span> contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L335" class="LineNr">335 </span><span class="Delimiter">}</span>
-<span id="L336" class="LineNr">336 </span>
-<span id="L337" class="LineNr">337 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; element<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* caller_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L338" class="LineNr">338 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L339" class="LineNr">339 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span>
-<span id="L340" class="LineNr">340 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal type &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; seems to be missing a type ingredient or three&quot;</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L341" class="LineNr">341 </span>    replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> caller_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L342" class="LineNr">342 </span>  <span class="Delimiter">}</span>
-<span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
-<span id="L344" class="LineNr">344 </span>
-<span id="L345" class="LineNr">345 </span><span class="Comment">// replace all type_ingredients in element_type with corresponding elements of callsite_type</span>
-<span id="L346" class="LineNr">346 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>type_tree* <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!callsite_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error but it's already been raised above</span>
-<span id="L348" class="LineNr">348 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!element_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L349" class="LineNr">349 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!element_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L350" class="LineNr">350 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; is_type_ingredient<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L351" class="LineNr">351 </span>      <span class="Normal">int</span> type_ingredient_index = to_type_ingredient_index<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
-<span id="L352" class="LineNr">352 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>corresponding<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">,</span> is_final_type_ingredient<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">))-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L353" class="LineNr">353 </span>        <span class="Comment">// replacing type ingredient at end of list, and replacement is a non-degenerate compound type -- (a b) but not (a)</span>
-<span id="L354" class="LineNr">354 </span>        replace_type_ingredient_at<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L355" class="LineNr">355 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L356" class="LineNr">356 </span>      <span class="Delimiter">}</span>
-<span id="L357" class="LineNr">357 </span>    <span class="Delimiter">}</span>
-<span id="L358" class="LineNr">358 </span>    replace_type_ingredients<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L359" class="LineNr">359 </span>    replace_type_ingredients<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L360" class="LineNr">360 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Delimiter">}</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">))</span>
-<span id="L363" class="LineNr">363 </span>    replace_type_ingredient_at<span class="Delimiter">(</span>to_type_ingredient_index<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">),</span> <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L364" class="LineNr">364 </span><span class="Delimiter">}</span>
-<span id="L365" class="LineNr">365 </span>
-<span id="L366" class="LineNr">366 </span><span class="Normal">const</span> type_tree* corresponding<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> <span class="Normal">bool</span> <span class="Normal">final</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L367" class="LineNr">367 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">const</span> type_tree* curr = type<span class="Delimiter">;</span>  curr<span class="Delimiter">;</span>  curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> --index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L368" class="LineNr">368 </span>    <a href='003trace.cc.html#L177'>assert_for_now</a><span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L369" class="LineNr">369 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>index == <span class="Constant">0</span><span class="Delimiter">)</span>
-<span id="L370" class="LineNr">370 </span>      <span class="Identifier">return</span> <span class="Normal">final</span> ? curr : curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L371" class="LineNr">371 </span>  <span class="Delimiter">}</span>
-<span id="L372" class="LineNr">372 </span>  <a href='003trace.cc.html#L177'>assert_for_now</a><span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
-<span id="L373" class="LineNr">373 </span><span class="Delimiter">}</span>
-<span id="L374" class="LineNr">374 </span>
-<span id="L375" class="LineNr">375 </span><span class="Normal">bool</span> is_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>atom &amp;&amp; type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span>
-<span id="L379" class="LineNr">379 </span><span class="Normal">int</span> to_type_ingredient_index<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L380" class="LineNr">380 </span>  assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value-START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
-<span id="L382" class="LineNr">382 </span><span class="Delimiter">}</span>
-<span id="L383" class="LineNr">383 </span>
-<span id="L384" class="LineNr">384 </span><span class="Normal">void</span> replace_type_ingredient_at<span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> type_tree* <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L385" class="LineNr">385 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_nth_type<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L386" class="LineNr">386 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal type &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>callsite_type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; seems to be missing a type ingredient or three&quot;</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L387" class="LineNr">387 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Delimiter">}</span>
-<span id="L389" class="LineNr">389 </span>  *element_type = *nth_type_ingredient<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">);</span>
-<span id="L390" class="LineNr">390 </span><span class="Delimiter">}</span>
-<span id="L391" class="LineNr">391 </span>
-<span id="L392" class="LineNr">392 </span><span class="Normal">const</span> type_tree* nth_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L393" class="LineNr">393 </span>  <span class="Normal">bool</span> <span class="Normal">final</span> = is_final_type_ingredient<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">);</span>
-<span id="L394" class="LineNr">394 </span>  <span class="Normal">const</span> type_tree* curr = callsite_type<span class="Delimiter">;</span>
-<span id="L395" class="LineNr">395 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; type_ingredient_index<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L396" class="LineNr">396 </span>    assert<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
-<span id="L397" class="LineNr">397 </span>    assert<span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L398" class="LineNr">398 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;type ingredient &quot; &lt;&lt; i &lt;&lt; &quot; is &quot; &lt;&lt; to_string(curr-&gt;left) &lt;&lt; '\n';</span>
-<span id="L399" class="LineNr">399 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Delimiter">}</span>
-<span id="L401" class="LineNr">401 </span>  assert<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
-<span id="L402" class="LineNr">402 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">;</span>
-<span id="L403" class="LineNr">403 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!<span class="Normal">final</span><span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L404" class="LineNr">404 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L405" class="LineNr">405 </span>  <span class="Identifier">return</span> curr<span class="Delimiter">;</span>
-<span id="L406" class="LineNr">406 </span><span class="Delimiter">}</span>
-<span id="L407" class="LineNr">407 </span>
-<span id="L408" class="LineNr">408 </span><span class="Normal">bool</span> is_final_type_ingredient<span class="Delimiter">(</span><span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L409" class="LineNr">409 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;::const_iterator p = container_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L410" class="LineNr">410 </span>       p != container_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L411" class="LineNr">411 </span>       ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L412" class="LineNr">412 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second &gt; START_TYPE_INGREDIENTS+type_ingredient_index<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L413" class="LineNr">413 </span>  <span class="Delimiter">}</span>
-<span id="L414" class="LineNr">414 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L415" class="LineNr">415 </span><span class="Delimiter">}</span>
-<span id="L416" class="LineNr">416 </span>
-<span id="L417" class="LineNr">417 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L418" class="LineNr">418 </span><span class="Normal">void</span> test_replace_type_ingredients_entire<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L419" class="LineNr">419 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L420" class="LineNr">420 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L421" class="LineNr">421 </span>      <span class="Constant">&quot;  y:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L422" class="LineNr">422 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L423" class="LineNr">423 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
-<span id="L424" class="LineNr">424 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L425" class="LineNr">425 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
-<span id="L426" class="LineNr">426 </span><span class="Delimiter">}</span>
-<span id="L427" class="LineNr">427 </span>
-<span id="L428" class="LineNr">428 </span><span class="Normal">void</span> test_replace_type_ingredients_tail<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L429" class="LineNr">429 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L430" class="LineNr">430 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L431" class="LineNr">431 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L432" class="LineNr">432 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L433" class="LineNr">433 </span>      <span class="Constant">&quot;  x:foo:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L434" class="LineNr">434 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L435" class="LineNr">435 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:point&quot;</span><span class="Delimiter">);</span>
-<span id="L436" class="LineNr">436 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L437" class="LineNr">437 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L438" class="LineNr">438 </span><span class="Delimiter">}</span>
-<span id="L439" class="LineNr">439 </span>
-<span id="L440" class="LineNr">440 </span><span class="Normal">void</span> test_replace_type_ingredients_head_tail_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L441" class="LineNr">441 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L442" class="LineNr">442 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L443" class="LineNr">443 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L444" class="LineNr">444 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L445" class="LineNr">445 </span>      <span class="Constant">&quot;  x:foo:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L446" class="LineNr">446 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L447" class="LineNr">447 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
-<span id="L448" class="LineNr">448 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L449" class="LineNr">449 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L450" class="LineNr">450 </span><span class="Delimiter">}</span>
-<span id="L451" class="LineNr">451 </span>
-<span id="L452" class="LineNr">452 </span><span class="Normal">void</span> test_replace_type_ingredients_head_middle<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L453" class="LineNr">453 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L454" class="LineNr">454 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L455" class="LineNr">455 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L456" class="LineNr">456 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L457" class="LineNr">457 </span>      <span class="Constant">&quot;  x:foo:_elem:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L458" class="LineNr">458 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L459" class="LineNr">459 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:address&quot;</span><span class="Delimiter">);</span>
-<span id="L460" class="LineNr">460 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L461" class="LineNr">461 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L462" class="LineNr">462 </span><span class="Delimiter">}</span>
-<span id="L463" class="LineNr">463 </span>
-<span id="L464" class="LineNr">464 </span><span class="Normal">void</span> test_replace_last_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L465" class="LineNr">465 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L466" class="LineNr">466 </span>      <span class="Constant">&quot;  x:_a</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L467" class="LineNr">467 </span>      <span class="Constant">&quot;  y:_b</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L468" class="LineNr">468 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L469" class="LineNr">469 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character))}&quot;</span><span class="Delimiter">);</span>
-<span id="L470" class="LineNr">470 </span>  reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L471" class="LineNr">471 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
-<span id="L472" class="LineNr">472 </span>  reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L473" class="LineNr">473 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L474" class="LineNr">474 </span><span class="Delimiter">}</span>
-<span id="L475" class="LineNr">475 </span>
-<span id="L476" class="LineNr">476 </span><span class="Normal">void</span> test_replace_last_type_ingredient_inside_compound<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L477" class="LineNr">477 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L478" class="LineNr">478 </span>      <span class="Constant">&quot;  {x: (bar _a (address _b))}</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L479" class="LineNr">479 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L480" class="LineNr">480 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;f:foo:number:array:character&quot;</span><span class="Delimiter">);</span>
-<span id="L481" class="LineNr">481 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L482" class="LineNr">482 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <span class="Constant">&quot;(bar number (address array character))&quot;</span><span class="Delimiter">);</span>
-<span id="L483" class="LineNr">483 </span><span class="Delimiter">}</span>
-<span id="L484" class="LineNr">484 </span>
-<span id="L485" class="LineNr">485 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L486" class="LineNr">486 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b:_c [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L487" class="LineNr">487 </span>      <span class="Constant">&quot;  x:_a</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L488" class="LineNr">488 </span>      <span class="Constant">&quot;  y:_b</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L489" class="LineNr">489 </span>      <span class="Constant">&quot;  z:_c</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L490" class="LineNr">490 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L491" class="LineNr">491 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character) boolean)}&quot;</span><span class="Delimiter">);</span>
-<span id="L492" class="LineNr">492 </span>  reagent element1 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L493" class="LineNr">493 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
-<span id="L494" class="LineNr">494 </span>  reagent element2 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L495" class="LineNr">495 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L496" class="LineNr">496 </span>  reagent element3 = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L497" class="LineNr">497 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
-<span id="L498" class="LineNr">498 </span><span class="Delimiter">}</span>
-<span id="L499" class="LineNr">499 </span>
-<span id="L500" class="LineNr">500 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple2<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L501" class="LineNr">501 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L502" class="LineNr">502 </span>      <span class="Constant">&quot;  key:_key</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L503" class="LineNr">503 </span>      <span class="Constant">&quot;  value:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L504" class="LineNr">504 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L505" class="LineNr">505 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo (address array character) number)}&quot;</span><span class="Delimiter">);</span>
-<span id="L506" class="LineNr">506 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L507" class="LineNr">507 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L508" class="LineNr">508 </span><span class="Delimiter">}</span>
-<span id="L509" class="LineNr">509 </span>
-<span id="L510" class="LineNr">510 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple3<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L511" class="LineNr">511 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo_table:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L512" class="LineNr">512 </span>      <span class="Constant">&quot;  data:&amp;:@:foo_table_row:_key:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L513" class="LineNr">513 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L514" class="LineNr">514 </span>      <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L515" class="LineNr">515 </span>      <span class="Constant">&quot;container foo_table_row:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L516" class="LineNr">516 </span>      <span class="Constant">&quot;  key:_key</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L517" class="LineNr">517 </span>      <span class="Constant">&quot;  value:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L518" class="LineNr">518 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L519" class="LineNr">519 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo_table (address array character) number)}&quot;</span><span class="Delimiter">);</span>
-<span id="L520" class="LineNr">520 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L521" class="LineNr">521 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L80'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
-<span id="L522" class="LineNr">522 </span><span class="Delimiter">}</span>
-<span id="L523" class="LineNr">523 </span>
-<span id="L524" class="LineNr">524 </span><span class="Delimiter">:(code)</span>
-<span id="L525" class="LineNr">525 </span><span class="Normal">bool</span> has_nth_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* base<span class="Delimiter">,</span> <span class="Normal">int</span> n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L526" class="LineNr">526 </span>  assert<span class="Delimiter">(</span>n &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L527" class="LineNr">527 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L528" class="LineNr">528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>n == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L529" class="LineNr">529 </span>  <span class="Identifier">return</span> has_nth_type<span class="Delimiter">(</span>base<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> n-<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L530" class="LineNr">530 </span><span class="Delimiter">}</span>
-<span id="L531" class="LineNr">531 </span>
-<span id="L532" class="LineNr">532 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_error)</span>
-<span id="L533" class="LineNr">533 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L534" class="LineNr">534 </span><span class="muData">container</span> foo:_t [
-<span id="L535" class="LineNr">535 </span>  <span class="Normal">x</span>:_t
-<span id="L536" class="LineNr">536 </span>  <span class="Normal">y</span>:num
-<span id="L537" class="LineNr">537 </span>]
-<span id="L538" class="LineNr">538 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L539" class="LineNr">539 </span>  <span class="Constant">10</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L540" class="LineNr">540 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">10</span>:foo<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
-<span id="L541" class="LineNr">541 </span>]
-<span id="L542" class="LineNr">542 </span><span class="traceContains">+error: illegal type &quot;foo&quot; seems to be missing a type ingredient or three in '1:num &lt;- get 10:foo, 1:offset'</span>
-<span id="L543" class="LineNr">543 </span>
-<span id="L544" class="LineNr">544 </span><span class="SalientComment">//:: fix up previous layers</span>
-<span id="L545" class="LineNr">545 </span>
-<span id="L546" class="LineNr">546 </span><span class="Comment">//: We have two transforms in previous layers -- for computing sizes and</span>
-<span id="L547" class="LineNr">547 </span><span class="Comment">//: offsets containing addresses for containers and exclusive containers --</span>
-<span id="L548" class="LineNr">548 </span><span class="Comment">//: that we need to teach about type ingredients.</span>
-<span id="L549" class="LineNr">549 </span>
-<span id="L550" class="LineNr">550 </span><span class="Delimiter">:(before &quot;End compute_container_sizes Non-atom Special-cases&quot;)</span>
-<span id="L551" class="LineNr">551 </span><span class="Normal">const</span> type_tree* root = get_base_type<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
-<span id="L552" class="LineNr">552 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L553" class="LineNr">553 </span>  type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> root<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L554" class="LineNr">554 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L555" class="LineNr">555 </span>    compute_container_sizes<span class="Delimiter">(</span>info<span class="Delimiter">,</span> type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L556" class="LineNr">556 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L557" class="LineNr">557 </span>  <span class="Delimiter">}</span>
-<span id="L558" class="LineNr">558 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L559" class="LineNr">559 </span>    <a href='033exclusive_container.cc.html#L44'>compute_exclusive_container_sizes</a><span class="Delimiter">(</span>info<span class="Delimiter">,</span> type<span class="Delimiter">,</span> pending_metadata<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
-<span id="L560" class="LineNr">560 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L561" class="LineNr">561 </span>  <span class="Delimiter">}</span>
-<span id="L562" class="LineNr">562 </span><span class="Delimiter">}</span>  <span class="Comment">// otherwise error raised elsewhere</span>
-<span id="L563" class="LineNr">563 </span>
-<span id="L564" class="LineNr">564 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
-<span id="L565" class="LineNr">565 </span><span class="Normal">void</span> test_container_sizes_shape_shifting_container<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L566" class="LineNr">566 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_t [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L567" class="LineNr">567 </span>      <span class="Constant">&quot;  x:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L568" class="LineNr">568 </span>      <span class="Constant">&quot;  y:_t</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L569" class="LineNr">569 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L570" class="LineNr">570 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
-<span id="L571" class="LineNr">571 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L572" class="LineNr">572 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L573" class="LineNr">573 </span><span class="Delimiter">}</span>
-<span id="L574" class="LineNr">574 </span>
-<span id="L575" class="LineNr">575 </span><span class="Normal">void</span> test_container_sizes_shape_shifting_exclusive_container<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L576" class="LineNr">576 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;exclusive-container foo:_t [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L577" class="LineNr">577 </span>      <span class="Constant">&quot;  x:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L578" class="LineNr">578 </span>      <span class="Constant">&quot;  y:_t</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L579" class="LineNr">579 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L580" class="LineNr">580 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
-<span id="L581" class="LineNr">581 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L582" class="LineNr">582 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">3</span><span class="Delimiter">);</span>
-<span id="L583" class="LineNr">583 </span>  reagent r2<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:num&quot;</span><span class="Delimiter">);</span>
-<span id="L584" class="LineNr">584 </span>  compute_container_sizes<span class="Delimiter">(</span>r2<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L585" class="LineNr">585 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L586" class="LineNr">586 </span><span class="Delimiter">}</span>
-<span id="L587" class="LineNr">587 </span>
-<span id="L588" class="LineNr">588 </span><span class="Normal">void</span> test_container_sizes_compound_type_ingredient<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L589" class="LineNr">589 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_t [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L590" class="LineNr">590 </span>      <span class="Constant">&quot;  x:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L591" class="LineNr">591 </span>      <span class="Constant">&quot;  y:_t</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L592" class="LineNr">592 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L593" class="LineNr">593 </span>  reagent r<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:&amp;:point&quot;</span><span class="Delimiter">);</span>
-<span id="L594" class="LineNr">594 </span>  compute_container_sizes<span class="Delimiter">(</span>r<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L595" class="LineNr">595 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L596" class="LineNr">596 </span>  <span class="Comment">// scan also pre-computes metadata for type ingredient</span>
-<span id="L597" class="LineNr">597 </span>  reagent point<span class="Delimiter">(</span><span class="Constant">&quot;x:point&quot;</span><span class="Delimiter">);</span>
-<span id="L598" class="LineNr">598 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> point<span class="Delimiter">.</span>type<span class="Delimiter">));</span>
-<span id="L599" class="LineNr">599 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Container_metadata<span class="Delimiter">,</span> point<span class="Delimiter">.</span>type<span class="Delimiter">).</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L600" class="LineNr">600 </span><span class="Delimiter">}</span>
-<span id="L601" class="LineNr">601 </span>
-<span id="L602" class="LineNr">602 </span><span class="Normal">void</span> test_container_sizes_recursive_shape_shifting_container<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L603" class="LineNr">603 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_t [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L604" class="LineNr">604 </span>      <span class="Constant">&quot;  x:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L605" class="LineNr">605 </span>      <span class="Constant">&quot;  y:&amp;:foo:_t</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L606" class="LineNr">606 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L607" class="LineNr">607 </span>  reagent r2<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:num&quot;</span><span class="Delimiter">);</span>
-<span id="L608" class="LineNr">608 </span>  compute_container_sizes<span class="Delimiter">(</span>r2<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L609" class="LineNr">609 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>r2<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>size<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
-<span id="L610" class="LineNr">610 </span><span class="Delimiter">}</span>
-<span id="L611" class="LineNr">611 </span>
-<span id="L612" class="LineNr">612 </span><span class="Delimiter">:(scenario typos_in_container_definitions)</span>
-<span id="L613" class="LineNr">613 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L614" class="LineNr">614 </span><span class="muData">container</span> foo:_t [
-<span id="L615" class="LineNr">615 </span>  <span class="Normal">x</span>:adress:_t  <span class="Comment"># typo</span>
-<span id="L616" class="LineNr">616 </span>]
-<span id="L617" class="LineNr">617 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L618" class="LineNr">618 </span>  local-scope
-<span id="L619" class="LineNr">619 </span>  <span class="Normal">x</span>:<a href='043space.cc.html#L80'>address</a>:foo:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
-<span id="L620" class="LineNr">620 </span>]
-<span id="L621" class="LineNr">621 </span><span class="Comment"># no crash</span>
-<span id="L622" class="LineNr">622 </span>
-<span id="L623" class="LineNr">623 </span><span class="Delimiter">:(scenario typos_in_recipes)</span>
-<span id="L624" class="LineNr">624 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L625" class="LineNr">625 </span><span class="muRecipe">def</span> foo [
-<span id="L626" class="LineNr">626 </span>  local-scope
-<span id="L627" class="LineNr">627 </span>  <span class="Normal">x</span>:adress:array:number<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># typo</span>
-<span id="L628" class="LineNr">628 </span>]
-<span id="L629" class="LineNr">629 </span><span class="Comment"># shouldn't crash</span>
-<span id="L630" class="LineNr">630 </span>
-<span id="L631" class="LineNr">631 </span><span class="SalientComment">//:: 'merge' on shape-shifting containers</span>
-<span id="L632" class="LineNr">632 </span>
-<span id="L633" class="LineNr">633 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_container_containing_exclusive_container)</span>
-<span id="L634" class="LineNr">634 </span><span class="muData">container</span> foo:_elem [
+<span id="L330" class="LineNr">330 </span><span class="Normal">if</span> <span class="Delimiter">(</span>t<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Comment">// size of an exclusive container is the size of its largest variant</span>
+<span id="L332" class="LineNr">332 </span>  <span class="Comment">// (So like containers, it can't contain arrays.)</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>t<span class="Delimiter">.</span>elements<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L335" class="LineNr">335 </span>    reagent tmp<span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span>    tmp<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*type<span class="Delimiter">);</span>
+<span id="L337" class="LineNr">337 </span>    <span class="Normal">int</span> size = size_of<span class="Delimiter">(</span>variant_type<span class="Delimiter">(</span>tmp<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L338" class="LineNr">338 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>size &gt; result<span class="Delimiter">)</span> result = size<span class="Delimiter">;</span>
+<span id="L339" class="LineNr">339 </span>  <span class="Delimiter">}</span>
+<span id="L340" class="LineNr">340 </span>  <span class="Comment">// ...+1 for its tag.</span>
+<span id="L341" class="LineNr">341 </span>  <span class="Identifier">return</span> result+<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span>
+<span id="L344" class="LineNr">344 </span><span class="Delimiter">:(scenario complex_shape_shifting_exclusive_container)</span>
+<span id="L345" class="LineNr">345 </span><span class="muData">exclusive-container</span> foo:_a [
+<span id="L346" class="LineNr">346 </span>  <span class="Normal">x</span>:_a
+<span id="L347" class="LineNr">347 </span>  <span class="Normal">y</span>:num
+<span id="L348" class="LineNr">348 </span>]
+<span id="L349" class="LineNr">349 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L350" class="LineNr">350 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L351" class="LineNr">351 </span>  <span class="Constant">3</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/variant<span class="Delimiter">,</span> <span class="Constant">34</span>/xx<span class="Delimiter">,</span> <span class="Constant">35</span>/xy
+<span id="L352" class="LineNr">352 </span>  <span class="Constant">10</span>:point<span class="Delimiter">,</span> <span class="Constant">20</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>maybe-convert <span class="Constant">3</span>:foo:point<span class="Delimiter">,</span> <span class="Constant">0</span>/variant
+<span id="L353" class="LineNr">353 </span>]
+<span id="L354" class="LineNr">354 </span><span class="traceContains">+mem: storing 1 in location 20</span>
+<span id="L355" class="LineNr">355 </span><span class="traceContains">+mem: storing 35 in location 11</span>
+<span id="L356" class="LineNr">356 </span>
+<span id="L357" class="LineNr">357 </span><span class="Delimiter">:(code)</span>
+<span id="L358" class="LineNr">358 </span><span class="Normal">bool</span> contains_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L359" class="LineNr">359 </span>  <span class="Identifier">return</span> contains_type_ingredient<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L360" class="LineNr">360 </span><span class="Delimiter">}</span>
+<span id="L361" class="LineNr">361 </span>
+<span id="L362" class="LineNr">362 </span><span class="Normal">bool</span> contains_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L364" class="LineNr">364 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
+<span id="L365" class="LineNr">365 </span>  <span class="Identifier">return</span> contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L366" class="LineNr">366 </span><span class="Delimiter">}</span>
+<span id="L367" class="LineNr">367 </span>
+<span id="L368" class="LineNr">368 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; element<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* caller_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L369" class="LineNr">369 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient<span class="Delimiter">(</span>element<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L370" class="LineNr">370 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span>
+<span id="L371" class="LineNr">371 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal type &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>caller_type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; seems to be missing a type ingredient or three&quot;</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L372" class="LineNr">372 </span>    replace_type_ingredients<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">,</span> caller_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
+<span id="L373" class="LineNr">373 </span>  <span class="Delimiter">}</span>
+<span id="L374" class="LineNr">374 </span><span class="Delimiter">}</span>
+<span id="L375" class="LineNr">375 </span>
+<span id="L376" class="LineNr">376 </span><span class="Comment">// replace all type_ingredients in element_type with corresponding elements of callsite_type</span>
+<span id="L377" class="LineNr">377 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>type_tree* <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L378" class="LineNr">378 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!callsite_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error but it's already been raised above</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!element_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!element_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L381" class="LineNr">381 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; is_type_ingredient<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L382" class="LineNr">382 </span>      <span class="Normal">int</span> type_ingredient_index = to_type_ingredient_index<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
+<span id="L383" class="LineNr">383 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>corresponding<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">,</span> is_final_type_ingredient<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">))-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L384" class="LineNr">384 </span>        <span class="Comment">// replacing type ingredient at end of list, and replacement is a non-degenerate compound type -- (a b) but not (a)</span>
+<span id="L385" class="LineNr">385 </span>        replace_type_ingredient_at<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
+<span id="L386" class="LineNr">386 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L387" class="LineNr">387 </span>      <span class="Delimiter">}</span>
+<span id="L388" class="LineNr">388 </span>    <span class="Delimiter">}</span>
+<span id="L389" class="LineNr">389 </span>    replace_type_ingredients<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
+<span id="L390" class="LineNr">390 </span>    replace_type_ingredients<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
+<span id="L391" class="LineNr">391 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L392" class="LineNr">392 </span>  <span class="Delimiter">}</span>
+<span id="L393" class="LineNr">393 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">))</span>
+<span id="L394" class="LineNr">394 </span>    replace_type_ingredient_at<span class="Delimiter">(</span>to_type_ingredient_index<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">),</span> <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">,</span> callsite_type<span class="Delimiter">,</span> container_info<span class="Delimiter">,</span> location_for_error_messages<span class="Delimiter">);</span>
+<span id="L395" class="LineNr">395 </span><span class="Delimiter">}</span>
+<span id="L396" class="LineNr">396 </span>
+<span id="L397" class="LineNr">397 </span><span class="Normal">const</span> type_tree* corresponding<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> <span class="Normal">bool</span> <span class="Normal">final</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">const</span> type_tree* curr = type<span class="Delimiter">;</span>  curr<span class="Delimiter">;</span>  curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> --index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L399" class="LineNr">399 </span>    <a href='003trace.cc.html#L200'>assert_for_now</a><span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L400" class="LineNr">400 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>index == <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L401" class="LineNr">401 </span>      <span class="Identifier">return</span> <span class="Normal">final</span> ? curr : curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Delimiter">}</span>
+<span id="L403" class="LineNr">403 </span>  <a href='003trace.cc.html#L200'>assert_for_now</a><span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
+<span id="L404" class="LineNr">404 </span><span class="Delimiter">}</span>
+<span id="L405" class="LineNr">405 </span>
+<span id="L406" class="LineNr">406 </span><span class="Normal">bool</span> is_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L407" class="LineNr">407 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>atom &amp;&amp; type<span class="Delimiter">-&gt;</span>value &gt;= START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
+<span id="L408" class="LineNr">408 </span><span class="Delimiter">}</span>
+<span id="L409" class="LineNr">409 </span>
+<span id="L410" class="LineNr">410 </span><span class="Normal">int</span> to_type_ingredient_index<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L411" class="LineNr">411 </span>  assert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L412" class="LineNr">412 </span>  <span class="Identifier">return</span> type<span class="Delimiter">-&gt;</span>value-START_TYPE_INGREDIENTS<span class="Delimiter">;</span>
+<span id="L413" class="LineNr">413 </span><span class="Delimiter">}</span>
+<span id="L414" class="LineNr">414 </span>
+<span id="L415" class="LineNr">415 </span><span class="Normal">void</span> replace_type_ingredient_at<span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> type_tree* <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; location_for_error_messages<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L416" class="LineNr">416 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_nth_type<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L417" class="LineNr">417 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;illegal type &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>callsite_type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; seems to be missing a type ingredient or three&quot;</span> &lt;&lt; location_for_error_messages &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L418" class="LineNr">418 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Delimiter">}</span>
+<span id="L420" class="LineNr">420 </span>  *element_type = *nth_type_ingredient<span class="Delimiter">(</span>callsite_type<span class="Delimiter">,</span> type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">);</span>
+<span id="L421" class="LineNr">421 </span><span class="Delimiter">}</span>
+<span id="L422" class="LineNr">422 </span>
+<span id="L423" class="LineNr">423 </span><span class="Normal">const</span> type_tree* nth_type_ingredient<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* callsite_type<span class="Delimiter">,</span> <span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L424" class="LineNr">424 </span>  <span class="Normal">bool</span> <span class="Normal">final</span> = is_final_type_ingredient<span class="Delimiter">(</span>type_ingredient_index<span class="Delimiter">,</span> container_info<span class="Delimiter">);</span>
+<span id="L425" class="LineNr">425 </span>  <span class="Normal">const</span> type_tree* curr = callsite_type<span class="Delimiter">;</span>
+<span id="L426" class="LineNr">426 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; type_ingredient_index<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L427" class="LineNr">427 </span>    assert<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L428" class="LineNr">428 </span>    assert<span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L429" class="LineNr">429 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;type ingredient &quot; &lt;&lt; i &lt;&lt; &quot; is &quot; &lt;&lt; to_string(curr-&gt;left) &lt;&lt; '\n';</span>
+<span id="L430" class="LineNr">430 </span>    curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">;</span>
+<span id="L431" class="LineNr">431 </span>  <span class="Delimiter">}</span>
+<span id="L432" class="LineNr">432 </span>  assert<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">;</span>
+<span id="L434" class="LineNr">434 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!<span class="Normal">final</span><span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Identifier">return</span> curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L436" class="LineNr">436 </span>  <span class="Identifier">return</span> curr<span class="Delimiter">;</span>
+<span id="L437" class="LineNr">437 </span><span class="Delimiter">}</span>
+<span id="L438" class="LineNr">438 </span>
+<span id="L439" class="LineNr">439 </span><span class="Normal">bool</span> is_final_type_ingredient<span class="Delimiter">(</span><span class="Normal">int</span> type_ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> type_info&amp; container_info<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L440" class="LineNr">440 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt;::const_iterator p = container_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
+<span id="L441" class="LineNr">441 </span>       p != container_info<span class="Delimiter">.</span>type_ingredient_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L442" class="LineNr">442 </span>       ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L443" class="LineNr">443 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second &gt; START_TYPE_INGREDIENTS+type_ingredient_index<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L444" class="LineNr">444 </span>  <span class="Delimiter">}</span>
+<span id="L445" class="LineNr">445 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L446" class="LineNr">446 </span><span class="Delimiter">}</span>
+<span id="L447" class="LineNr">447 </span>
+<span id="L448" class="LineNr">448 </span><span class="Delimiter">:(before &quot;End Unit Tests&quot;)</span>
+<span id="L449" class="LineNr">449 </span><span class="Normal">void</span> test_replace_type_ingredients_entire<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L450" class="LineNr">450 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L451" class="LineNr">451 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L452" class="LineNr">452 </span>      <span class="Constant">&quot;  y:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L453" class="LineNr">453 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L454" class="LineNr">454 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
+<span id="L455" class="LineNr">455 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L456" class="LineNr">456 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L457" class="LineNr">457 </span><span class="Delimiter">}</span>
+<span id="L458" class="LineNr">458 </span>
+<span id="L459" class="LineNr">459 </span><span class="Normal">void</span> test_replace_type_ingredients_tail<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L460" class="LineNr">460 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L461" class="LineNr">461 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L462" class="LineNr">462 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L463" class="LineNr">463 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L464" class="LineNr">464 </span>      <span class="Constant">&quot;  x:foo:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L465" class="LineNr">465 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L466" class="LineNr">466 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:point&quot;</span><span class="Delimiter">);</span>
+<span id="L467" class="LineNr">467 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L468" class="LineNr">468 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">point</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L469" class="LineNr">469 </span><span class="Delimiter">}</span>
+<span id="L470" class="LineNr">470 </span>
+<span id="L471" class="LineNr">471 </span><span class="Normal">void</span> test_replace_type_ingredients_head_tail_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L472" class="LineNr">472 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L473" class="LineNr">473 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L474" class="LineNr">474 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L475" class="LineNr">475 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L476" class="LineNr">476 </span>      <span class="Constant">&quot;  x:foo:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L477" class="LineNr">477 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L478" class="LineNr">478 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">);</span>
+<span id="L479" class="LineNr">479 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L480" class="LineNr">480 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L481" class="LineNr">481 </span><span class="Delimiter">}</span>
+<span id="L482" class="LineNr">482 </span>
+<span id="L483" class="LineNr">483 </span><span class="Normal">void</span> test_replace_type_ingredients_head_middle<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L484" class="LineNr">484 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L485" class="LineNr">485 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L486" class="LineNr">486 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L487" class="LineNr">487 </span>      <span class="Constant">&quot;container bar:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L488" class="LineNr">488 </span>      <span class="Constant">&quot;  x:foo:_elem:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L489" class="LineNr">489 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L490" class="LineNr">490 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:bar:address&quot;</span><span class="Delimiter">);</span>
+<span id="L491" class="LineNr">491 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L492" class="LineNr">492 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{x: (</span><span class="cSpecial">\&quot;</span><span class="Constant">foo</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L493" class="LineNr">493 </span><span class="Delimiter">}</span>
+<span id="L494" class="LineNr">494 </span>
+<span id="L495" class="LineNr">495 </span><span class="Normal">void</span> test_replace_last_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L496" class="LineNr">496 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L497" class="LineNr">497 </span>      <span class="Constant">&quot;  x:_a</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L498" class="LineNr">498 </span>      <span class="Constant">&quot;  y:_b</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L499" class="LineNr">499 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L500" class="LineNr">500 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character))}&quot;</span><span class="Delimiter">);</span>
+<span id="L501" class="LineNr">501 </span>  reagent element1 = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L502" class="LineNr">502 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L503" class="LineNr">503 </span>  reagent element2 = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L504" class="LineNr">504 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L505" class="LineNr">505 </span><span class="Delimiter">}</span>
+<span id="L506" class="LineNr">506 </span>
+<span id="L507" class="LineNr">507 </span><span class="Normal">void</span> test_replace_last_type_ingredient_inside_compound<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L508" class="LineNr">508 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L509" class="LineNr">509 </span>      <span class="Constant">&quot;  {x: (bar _a (address _b))}</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L510" class="LineNr">510 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L511" class="LineNr">511 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;f:foo:number:array:character&quot;</span><span class="Delimiter">);</span>
+<span id="L512" class="LineNr">512 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L513" class="LineNr">513 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>names_to_string_without_quotes<span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">),</span> <span class="Constant">&quot;(bar number (address array character))&quot;</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="Normal">void</span> test_replace_middle_type_ingredient_with_multiple<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L517" class="LineNr">517 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_a:_b:_c [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L518" class="LineNr">518 </span>      <span class="Constant">&quot;  x:_a</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L519" class="LineNr">519 </span>      <span class="Constant">&quot;  y:_b</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L520" class="LineNr">520 </span>      <span class="Constant">&quot;  z:_c</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L521" class="LineNr">521 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L522" class="LineNr">522 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo number (address array character) boolean)}&quot;</span><span class="Delimiter">);</span>
+<span id="L523" class="LineNr">523 </span>  reagent element1 = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L524" class="LineNr">524 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element1<span class="Delimiter">),</span> <span class="Constant">&quot;{x: </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L525" class="LineNr">525 </span>  reagent element2 = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L526" class="LineNr">526 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element2<span class="Delimiter">),</span> <span class="Constant">&quot;{y: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L527" class="LineNr">527 </span>  reagent element3 = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L528" class="LineNr">528 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element3<span class="Delimiter">),</span> <span class="Constant">&quot;{z: </span><span class="cSpecial">\&quot;</span><span class="Constant">boolean</span><span class="cSpecial">\&quot;</span><span class="Constant">}&quot;</span><span class="Delimiter">);</span>
+<span id="L529" class="LineNr">529 </span><span class="Delimiter">}</span>
+<span id="L530" class="LineNr">530 </span>
+<span id="L531" class="LineNr">531 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple2<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L532" class="LineNr">532 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L533" class="LineNr">533 </span>      <span class="Constant">&quot;  key:_key</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L534" class="LineNr">534 </span>      <span class="Constant">&quot;  value:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L535" class="LineNr">535 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L536" class="LineNr">536 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo (address array character) number)}&quot;</span><span class="Delimiter">);</span>
+<span id="L537" class="LineNr">537 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L538" class="LineNr">538 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{key: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L539" class="LineNr">539 </span><span class="Delimiter">}</span>
+<span id="L540" class="LineNr">540 </span>
+<span id="L541" class="LineNr">541 </span><span class="Normal">void</span> test_replace_middle_type_ingredient_with_multiple3<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L542" class="LineNr">542 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo_table:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L543" class="LineNr">543 </span>      <span class="Constant">&quot;  data:&amp;:@:foo_table_row:_key:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L544" class="LineNr">544 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L545" class="LineNr">545 </span>      <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L546" class="LineNr">546 </span>      <span class="Constant">&quot;container foo_table_row:_key:_value [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L547" class="LineNr">547 </span>      <span class="Constant">&quot;  key:_key</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L548" class="LineNr">548 </span>      <span class="Constant">&quot;  value:_value</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L549" class="LineNr">549 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L550" class="LineNr">550 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;{f: (foo_table (address array character) number)}&quot;</span><span class="Delimiter">);</span>
+<span id="L551" class="LineNr">551 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L552" class="LineNr">552 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>element<span class="Delimiter">),</span> <span class="Constant">&quot;{data: (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">foo_table_row</span><span class="cSpecial">\&quot;</span><span class="Constant"> (</span><span class="cSpecial">\&quot;</span><span class="Constant"><a href='043space.cc.html#L101'>address</a></span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">array</span><span class="cSpecial">\&quot;</span><span class="Constant"> </span><span class="cSpecial">\&quot;</span><span class="Constant">character</span><span class="cSpecial">\&quot;</span><span class="Constant">) </span><span class="cSpecial">\&quot;</span><span class="Constant">number</span><span class="cSpecial">\&quot;</span><span class="Constant">)}&quot;</span><span class="Delimiter">);</span>
+<span id="L553" class="LineNr">553 </span><span class="Delimiter">}</span>
+<span id="L554" class="LineNr">554 </span>
+<span id="L555" class="LineNr">555 </span><span class="Delimiter">:(code)</span>
+<span id="L556" class="LineNr">556 </span><span class="Normal">bool</span> has_nth_type<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* base<span class="Delimiter">,</span> <span class="Normal">int</span> n<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L557" class="LineNr">557 </span>  assert<span class="Delimiter">(</span>n &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L558" class="LineNr">558 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L559" class="LineNr">559 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>n == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L560" class="LineNr">560 </span>  <span class="Identifier">return</span> has_nth_type<span class="Delimiter">(</span>base<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> n-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L561" class="LineNr">561 </span><span class="Delimiter">}</span>
+<span id="L562" class="LineNr">562 </span>
+<span id="L563" class="LineNr">563 </span><span class="Delimiter">:(scenario get_on_shape_shifting_container_error)</span>
+<span id="L564" class="LineNr">564 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L565" class="LineNr">565 </span><span class="muData">container</span> foo:_t [
+<span id="L566" class="LineNr">566 </span>  <span class="Normal">x</span>:_t
+<span id="L567" class="LineNr">567 </span>  <span class="Normal">y</span>:num
+<span id="L568" class="LineNr">568 </span>]
+<span id="L569" class="LineNr">569 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L570" class="LineNr">570 </span>  <span class="Constant">1</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L571" class="LineNr">571 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>get <span class="Constant">1</span>:foo<span class="Delimiter">,</span> <span class="Constant">1:offset</span>
+<span id="L572" class="LineNr">572 </span>]
+<span id="L573" class="LineNr">573 </span><span class="Comment"># todo: improve error message</span>
+<span id="L574" class="LineNr">574 </span><span class="traceContains">+error: illegal type &quot;foo&quot; seems to be missing a type ingredient or three while computing element type of container</span>
+<span id="L575" class="LineNr">575 </span>
+<span id="L576" class="LineNr">576 </span><span class="Delimiter">:(scenario typos_in_container_definitions)</span>
+<span id="L577" class="LineNr">577 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L578" class="LineNr">578 </span><span class="muData">container</span> foo:_t [
+<span id="L579" class="LineNr">579 </span>  <span class="Normal">x</span>:adress:_t  <span class="Comment"># typo</span>
+<span id="L580" class="LineNr">580 </span>]
+<span id="L581" class="LineNr">581 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L582" class="LineNr">582 </span>  local-scope
+<span id="L583" class="LineNr">583 </span>  <span class="Normal">x</span>:<a href='043space.cc.html#L101'>address</a>:foo:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo num<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
+<span id="L584" class="LineNr">584 </span>]
+<span id="L585" class="LineNr">585 </span><span class="Comment"># no crash</span>
+<span id="L586" class="LineNr">586 </span>
+<span id="L587" class="LineNr">587 </span><span class="Delimiter">:(scenario typos_in_recipes)</span>
+<span id="L588" class="LineNr">588 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L589" class="LineNr">589 </span><span class="muRecipe">def</span> foo [
+<span id="L590" class="LineNr">590 </span>  local-scope
+<span id="L591" class="LineNr">591 </span>  <span class="Normal">x</span>:adress:array:number<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>  <span class="Comment"># typo</span>
+<span id="L592" class="LineNr">592 </span>]
+<span id="L593" class="LineNr">593 </span><span class="Comment"># shouldn't crash</span>
+<span id="L594" class="LineNr">594 </span>
+<span id="L595" class="LineNr">595 </span><span class="SalientComment">//:: 'merge' on shape-shifting containers</span>
+<span id="L596" class="LineNr">596 </span>
+<span id="L597" class="LineNr">597 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_container_containing_exclusive_container)</span>
+<span id="L598" class="LineNr">598 </span><span class="muData">container</span> foo:_elem [
+<span id="L599" class="LineNr">599 </span>  <span class="Normal">x</span>:num
+<span id="L600" class="LineNr">600 </span>  <span class="Normal">y</span>:_elem
+<span id="L601" class="LineNr">601 </span>]
+<span id="L602" class="LineNr">602 </span><span class="muData">exclusive-container</span> bar [
+<span id="L603" class="LineNr">603 </span>  <span class="Normal">x</span>:num
+<span id="L604" class="LineNr">604 </span>  <span class="Normal">y</span>:num
+<span id="L605" class="LineNr">605 </span>]
+<span id="L606" class="LineNr">606 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L607" class="LineNr">607 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L608" class="LineNr">608 </span>]
+<span id="L609" class="LineNr">609 </span><span class="traceContains">+mem: storing 23 in location 1</span>
+<span id="L610" class="LineNr">610 </span><span class="traceContains">+mem: storing 1 in location 2</span>
+<span id="L611" class="LineNr">611 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L612" class="LineNr">612 </span>$error: <span class="Constant">0</span>
+<span id="L613" class="LineNr">613 </span>
+<span id="L614" class="LineNr">614 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_container_containing_exclusive_container_2)</span>
+<span id="L615" class="LineNr">615 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L616" class="LineNr">616 </span><span class="muData">container</span> foo:_elem [
+<span id="L617" class="LineNr">617 </span>  <span class="Normal">x</span>:num
+<span id="L618" class="LineNr">618 </span>  <span class="Normal">y</span>:_elem
+<span id="L619" class="LineNr">619 </span>]
+<span id="L620" class="LineNr">620 </span><span class="muData">exclusive-container</span> bar [
+<span id="L621" class="LineNr">621 </span>  <span class="Normal">x</span>:num
+<span id="L622" class="LineNr">622 </span>  <span class="Normal">y</span>:num
+<span id="L623" class="LineNr">623 </span>]
+<span id="L624" class="LineNr">624 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L625" class="LineNr">625 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L626" class="LineNr">626 </span>]
+<span id="L627" class="LineNr">627 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too many ingredients in '1:foo:bar &lt;- merge 23, 1/y, 34, 35'</span>
+<span id="L628" class="LineNr">628 </span>
+<span id="L629" class="LineNr">629 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container)</span>
+<span id="L630" class="LineNr">630 </span><span class="muData">exclusive-container</span> foo:_elem [
+<span id="L631" class="LineNr">631 </span>  <span class="Normal">x</span>:num
+<span id="L632" class="LineNr">632 </span>  <span class="Normal">y</span>:_elem
+<span id="L633" class="LineNr">633 </span>]
+<span id="L634" class="LineNr">634 </span><span class="muData">container</span> bar [
 <span id="L635" class="LineNr">635 </span>  <span class="Normal">x</span>:num
-<span id="L636" class="LineNr">636 </span>  <span class="Normal">y</span>:_elem
+<span id="L636" class="LineNr">636 </span>  <span class="Normal">y</span>:num
 <span id="L637" class="LineNr">637 </span>]
-<span id="L638" class="LineNr">638 </span><span class="muData">exclusive-container</span> bar [
-<span id="L639" class="LineNr">639 </span>  <span class="Normal">x</span>:num
-<span id="L640" class="LineNr">640 </span>  <span class="Normal">y</span>:num
-<span id="L641" class="LineNr">641 </span>]
-<span id="L642" class="LineNr">642 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L643" class="LineNr">643 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L644" class="LineNr">644 </span>]
-<span id="L645" class="LineNr">645 </span><span class="traceContains">+mem: storing 23 in location 1</span>
-<span id="L646" class="LineNr">646 </span><span class="traceContains">+mem: storing 1 in location 2</span>
-<span id="L647" class="LineNr">647 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L648" class="LineNr">648 </span>$error: <span class="Constant">0</span>
-<span id="L649" class="LineNr">649 </span>
-<span id="L650" class="LineNr">650 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_container_containing_exclusive_container_2)</span>
-<span id="L651" class="LineNr">651 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L652" class="LineNr">652 </span><span class="muData">container</span> foo:_elem [
-<span id="L653" class="LineNr">653 </span>  <span class="Normal">x</span>:num
-<span id="L654" class="LineNr">654 </span>  <span class="Normal">y</span>:_elem
-<span id="L655" class="LineNr">655 </span>]
-<span id="L656" class="LineNr">656 </span><span class="muData">exclusive-container</span> bar [
-<span id="L657" class="LineNr">657 </span>  <span class="Normal">x</span>:num
-<span id="L658" class="LineNr">658 </span>  <span class="Normal">y</span>:num
-<span id="L659" class="LineNr">659 </span>]
-<span id="L660" class="LineNr">660 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L661" class="LineNr">661 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L662" class="LineNr">662 </span>]
-<span id="L663" class="LineNr">663 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too many ingredients in '1:foo:bar &lt;- merge 23, 1/y, 34, 35'</span>
-<span id="L664" class="LineNr">664 </span>
-<span id="L665" class="LineNr">665 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container)</span>
-<span id="L666" class="LineNr">666 </span><span class="muData">exclusive-container</span> foo:_elem [
+<span id="L638" class="LineNr">638 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L639" class="LineNr">639 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L640" class="LineNr">640 </span>]
+<span id="L641" class="LineNr">641 </span><span class="traceContains">+mem: storing 1 in location 1</span>
+<span id="L642" class="LineNr">642 </span><span class="traceContains">+mem: storing 23 in location 2</span>
+<span id="L643" class="LineNr">643 </span><span class="traceContains">+mem: storing 34 in location 3</span>
+<span id="L644" class="LineNr">644 </span>$error: <span class="Constant">0</span>
+<span id="L645" class="LineNr">645 </span>
+<span id="L646" class="LineNr">646 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container_2)</span>
+<span id="L647" class="LineNr">647 </span><span class="muData">exclusive-container</span> foo:_elem [
+<span id="L648" class="LineNr">648 </span>  <span class="Normal">x</span>:num
+<span id="L649" class="LineNr">649 </span>  <span class="Normal">y</span>:_elem
+<span id="L650" class="LineNr">650 </span>]
+<span id="L651" class="LineNr">651 </span><span class="muData">container</span> bar [
+<span id="L652" class="LineNr">652 </span>  <span class="Normal">x</span>:num
+<span id="L653" class="LineNr">653 </span>  <span class="Normal">y</span>:num
+<span id="L654" class="LineNr">654 </span>]
+<span id="L655" class="LineNr">655 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L656" class="LineNr">656 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">23</span>
+<span id="L657" class="LineNr">657 </span>]
+<span id="L658" class="LineNr">658 </span>$error: <span class="Constant">0</span>
+<span id="L659" class="LineNr">659 </span>
+<span id="L660" class="LineNr">660 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container_3)</span>
+<span id="L661" class="LineNr">661 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L662" class="LineNr">662 </span><span class="muData">exclusive-container</span> foo:_elem [
+<span id="L663" class="LineNr">663 </span>  <span class="Normal">x</span>:num
+<span id="L664" class="LineNr">664 </span>  <span class="Normal">y</span>:_elem
+<span id="L665" class="LineNr">665 </span>]
+<span id="L666" class="LineNr">666 </span><span class="muData">container</span> bar [
 <span id="L667" class="LineNr">667 </span>  <span class="Normal">x</span>:num
-<span id="L668" class="LineNr">668 </span>  <span class="Normal">y</span>:_elem
+<span id="L668" class="LineNr">668 </span>  <span class="Normal">y</span>:num
 <span id="L669" class="LineNr">669 </span>]
-<span id="L670" class="LineNr">670 </span><span class="muData">container</span> bar [
-<span id="L671" class="LineNr">671 </span>  <span class="Normal">x</span>:num
-<span id="L672" class="LineNr">672 </span>  <span class="Normal">y</span>:num
-<span id="L673" class="LineNr">673 </span>]
-<span id="L674" class="LineNr">674 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L675" class="LineNr">675 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L676" class="LineNr">676 </span>]
-<span id="L677" class="LineNr">677 </span><span class="traceContains">+mem: storing 1 in location 1</span>
-<span id="L678" class="LineNr">678 </span><span class="traceContains">+mem: storing 23 in location 2</span>
-<span id="L679" class="LineNr">679 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L680" class="LineNr">680 </span>$error: <span class="Constant">0</span>
-<span id="L681" class="LineNr">681 </span>
-<span id="L682" class="LineNr">682 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container_2)</span>
-<span id="L683" class="LineNr">683 </span><span class="muData">exclusive-container</span> foo:_elem [
-<span id="L684" class="LineNr">684 </span>  <span class="Normal">x</span>:num
-<span id="L685" class="LineNr">685 </span>  <span class="Normal">y</span>:_elem
-<span id="L686" class="LineNr">686 </span>]
-<span id="L687" class="LineNr">687 </span><span class="muData">container</span> bar [
-<span id="L688" class="LineNr">688 </span>  <span class="Normal">x</span>:num
-<span id="L689" class="LineNr">689 </span>  <span class="Normal">y</span>:num
-<span id="L690" class="LineNr">690 </span>]
-<span id="L691" class="LineNr">691 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L692" class="LineNr">692 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>/x<span class="Delimiter">,</span> <span class="Constant">23</span>
-<span id="L693" class="LineNr">693 </span>]
-<span id="L694" class="LineNr">694 </span>$error: <span class="Constant">0</span>
-<span id="L695" class="LineNr">695 </span>
-<span id="L696" class="LineNr">696 </span><span class="Delimiter">:(scenario merge_check_shape_shifting_exclusive_container_containing_container_3)</span>
-<span id="L697" class="LineNr">697 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L698" class="LineNr">698 </span><span class="muData">exclusive-container</span> foo:_elem [
-<span id="L699" class="LineNr">699 </span>  <span class="Normal">x</span>:num
-<span id="L700" class="LineNr">700 </span>  <span class="Normal">y</span>:_elem
-<span id="L701" class="LineNr">701 </span>]
-<span id="L702" class="LineNr">702 </span><span class="muData">container</span> bar [
-<span id="L703" class="LineNr">703 </span>  <span class="Normal">x</span>:num
-<span id="L704" class="LineNr">704 </span>  <span class="Normal">y</span>:num
-<span id="L705" class="LineNr">705 </span>]
-<span id="L706" class="LineNr">706 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L707" class="LineNr">707 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
-<span id="L708" class="LineNr">708 </span>]
-<span id="L709" class="LineNr">709 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too few ingredients in '1:foo:bar &lt;- merge 1/y, 23'</span>
+<span id="L670" class="LineNr">670 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L671" class="LineNr">671 </span>  <span class="Constant">1</span>:foo:bar<span class="Special"> &lt;- </span>merge <span class="Constant">1</span>/y<span class="Delimiter">,</span> <span class="Constant">23</span>
+<span id="L672" class="LineNr">672 </span>]
+<span id="L673" class="LineNr">673 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: too few ingredients in '1:foo:bar &lt;- merge 1/y, 23'</span>
 </pre>
 </body>
 </html>
diff --git a/html/056shape_shifting_recipe.cc.html b/html/056shape_shifting_recipe.cc.html
index c6bbe840..1482d9e9 100644
--- a/html/056shape_shifting_recipe.cc.html
+++ b/html/056shape_shifting_recipe.cc.html
@@ -69,7 +69,7 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr">   3 </span><span class="Delimiter">:(scenario shape_shifting_recipe)</span>
 <span id="L4" class="LineNr">   4 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L5" class="LineNr">   5 </span>  <span class="Constant">10</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span>
-<span id="L6" class="LineNr">   6 </span>  <span class="Constant">11</span>:point<span class="Special"> &lt;- </span>foo <span class="Constant">10</span>:point
+<span id="L6" class="LineNr">   6 </span>  <span class="Constant">12</span>:point<span class="Special"> &lt;- </span>foo <span class="Constant">10</span>:point
 <span id="L7" class="LineNr">   7 </span>]
 <span id="L8" class="LineNr">   8 </span><span class="Comment"># non-matching variant</span>
 <span id="L9" class="LineNr">   9 </span><span class="muRecipe">def</span> foo a:num<span class="muRecipe"> -&gt; </span>result:num [
@@ -83,8 +83,8 @@ if ('onhashchange' in window) {
 <span id="L17" class="LineNr">  17 </span>  load-ingredients
 <span id="L18" class="LineNr">  18 </span>  result<span class="Special"> &lt;- </span>copy a
 <span id="L19" class="LineNr">  19 </span>]
-<span id="L20" class="LineNr">  20 </span><span class="traceContains">+mem: storing 14 in location 11</span>
-<span id="L21" class="LineNr">  21 </span><span class="traceContains">+mem: storing 15 in location 12</span>
+<span id="L20" class="LineNr">  20 </span><span class="traceContains">+mem: storing 14 in location 12</span>
+<span id="L21" class="LineNr">  21 </span><span class="traceContains">+mem: storing 15 in location 13</span>
 <span id="L22" class="LineNr">  22 </span>
 <span id="L23" class="LineNr">  23 </span><span class="Comment">//: Before anything else, disable transforms for shape-shifting recipes and</span>
 <span id="L24" class="LineNr">  24 </span><span class="Comment">//: make sure we never try to actually run a shape-shifting recipe. We should</span>
@@ -97,29 +97,29 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr">  31 </span>
 <span id="L32" class="LineNr">  32 </span><span class="Delimiter">:(before &quot;End Transform Checks&quot;)</span>
 <span id="L33" class="LineNr">  33 </span>r<span class="Delimiter">.</span>transformed_until = t<span class="Delimiter">;</span>
-<span id="L34" class="LineNr">  34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>t<span class="Delimiter">)</span> != <span class="Normal">static_cast</span>&lt;transform_fn&gt;<span class="Delimiter">(</span>expand_type_abbreviations<span class="Delimiter">)</span> &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L160'>any_type_ingredient_in_header</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment"><a href='010vm.cc.html#L14'>recipe_ordinal</a></span><span class="Comment">*/</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L34" class="LineNr">  34 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>t<span class="Delimiter">)</span> != <span class="Normal">static_cast</span>&lt;transform_fn&gt;<span class="Delimiter">(</span>expand_type_abbreviations<span class="Delimiter">)</span> &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L156'>any_type_ingredient_in_header</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment"><a href='010vm.cc.html#L14'>recipe_ordinal</a></span><span class="Comment">*/</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L35" class="LineNr">  35 </span>
 <span id="L36" class="LineNr">  36 </span><span class="Delimiter">:(after &quot;Running One Instruction&quot;)</span>
 <span id="L37" class="LineNr">  37 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>running_step_index == <span class="Constant">0</span>
-<span id="L38" class="LineNr">  38 </span>    &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L160'>any_type_ingredient_in_header</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>running_recipe<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L38" class="LineNr">  38 </span>    &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L156'>any_type_ingredient_in_header</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>running_recipe<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L39" class="LineNr">  39 </span><span class="CommentedCode">//?   DUMP(&quot;&quot;);</span>
-<span id="L40" class="LineNr">  40 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;ran into unspecialized shape-shifting <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr">  40 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;ran into unspecialized shape-shifting <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; <a href='026call.cc.html#L87'>current_recipe_name</a><span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L41" class="LineNr">  41 </span><span class="CommentedCode">//?   exit(0);</span>
 <span id="L42" class="LineNr">  42 </span><span class="Delimiter">}</span>
 <span id="L43" class="LineNr">  43 </span>
 <span id="L44" class="LineNr">  44 </span><span class="Comment">//: Make sure we don't match up literals with type ingredients without</span>
 <span id="L45" class="LineNr">  45 </span><span class="Comment">//: specialization.</span>
 <span id="L46" class="LineNr">  46 </span><span class="Delimiter">:(before &quot;End Matching Types For Literal(to)&quot;)</span>
-<span id="L47" class="LineNr">  47 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<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="L47" class="LineNr">  47 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<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="L48" class="LineNr">  48 </span>
-<span id="L49" class="LineNr">  49 </span><span class="Delimiter">:(after &quot;Static Dispatch Phase 3&quot;)</span>
-<span id="L50" class="LineNr">  50 </span>candidates = <a href='056shape_shifting_recipe.cc.html#L77'>strictly_matching_shape_shifting_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
+<span id="L49" class="LineNr">  49 </span><span class="Delimiter">:(after &quot;Static Dispatch Phase 2&quot;)</span>
+<span id="L50" class="LineNr">  50 </span>candidates = <a href='056shape_shifting_recipe.cc.html#L73'>strictly_matching_shape_shifting_variants</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> variants<span class="Delimiter">);</span>
 <span id="L51" class="LineNr">  51 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L52" class="LineNr">  52 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> exemplar = <a href='056shape_shifting_recipe.cc.html#L110'>best_shape_shifting_variant</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">);</span>
-<span id="L53" class="LineNr">  53 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;found variant to specialize: &quot;</span> &lt;&lt; exemplar &lt;&lt; <span class="Constant">' '</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L54" class="LineNr">  54 </span>  string new_recipe_name = <a href='056shape_shifting_recipe.cc.html#L245'>insert_new_variant</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
+<span id="L52" class="LineNr">  52 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> exemplar = <a href='056shape_shifting_recipe.cc.html#L106'>best_shape_shifting_variant</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">);</span>
+<span id="L53" class="LineNr">  53 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;found variant to specialize: &quot;</span> &lt;&lt; exemplar &lt;&lt; <span class="Constant">' '</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L54" class="LineNr">  54 </span>  string new_recipe_name = <a href='056shape_shifting_recipe.cc.html#L241'>insert_new_variant</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L55" class="LineNr">  55 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>new_recipe_name != <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L56" class="LineNr">  56 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new specialization: &quot;</span> &lt;&lt; new_recipe_name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L56" class="LineNr">  56 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new specialization: &quot;</span> &lt;&lt; new_recipe_name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L57" class="LineNr">  57 </span>    <span class="Identifier">return</span> new_recipe_name<span class="Delimiter">;</span>
 <span id="L58" class="LineNr">  58 </span>  <span class="Delimiter">}</span>
 <span id="L59" class="LineNr">  59 </span><span class="Delimiter">}</span>
@@ -128,1099 +128,1096 @@ if ('onhashchange' in window) {
 <span id="L62" class="LineNr">  62 </span><span class="Comment">//: recipes can be called</span>
 <span id="L63" class="LineNr">  63 </span>
 <span id="L64" class="LineNr">  64 </span><span class="Delimiter">:(before &quot;End Instruction Operation Checks&quot;)</span>
-<span id="L65" class="LineNr">  65 </span><span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span> &amp;&amp; !is_primitive<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span>
-<span id="L66" class="LineNr">  66 </span>    &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L160'>any_type_ingredient_in_header</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L67" class="LineNr">  67 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has no valid specialization</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L65" class="LineNr">  65 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span> &amp;&amp; !is_primitive<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span>
+<span id="L66" class="LineNr">  66 </span>    &amp;&amp; <a href='056shape_shifting_recipe.cc.html#L156'>any_type_ingredient_in_header</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L67" class="LineNr">  67 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' has no valid specialization</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L68" class="LineNr">  68 </span>  <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L69" class="LineNr">  69 </span><span class="Delimiter">}</span>
 <span id="L70" class="LineNr">  70 </span>
-<span id="L71" class="LineNr">  71 </span><span class="Delimiter">:(replace{} &quot;Match Literal Zero Against Address&quot;)</span>
-<span id="L72" class="LineNr">  72 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>from<span class="Delimiter">)</span> &amp;&amp; is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span>
-<span id="L73" class="LineNr">  73 </span>  <span class="Identifier">return</span> from<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span> &amp;&amp; !contains_type_ingredient_name<span class="Delimiter">(</span>to<span class="Delimiter">);</span>
-<span id="L74" class="LineNr">  74 </span>
-<span id="L75" class="LineNr">  75 </span><span class="Delimiter">:(code)</span>
-<span id="L76" class="LineNr">  76 </span><span class="Comment">// phase 3 of static dispatch</span>
-<span id="L77" class="LineNr">  77 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L77'>strictly_matching_shape_shifting_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L78" class="LineNr">  78 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
-<span id="L79" class="LineNr">  79 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L80" class="LineNr">  80 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L81" class="LineNr">  81 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!any_type_ingredient_in_header<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L82" class="LineNr">  82 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!all_concrete_header_reagents_strictly_match<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L83" class="LineNr">  83 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L84" class="LineNr">  84 </span>  <span class="Delimiter">}</span>
-<span id="L85" class="LineNr">  85 </span>  <span class="Identifier">return</span> result<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">bool</span> <a href='056shape_shifting_recipe.cc.html#L88'>all_concrete_header_reagents_strictly_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L89" class="LineNr">  89 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L90" class="LineNr">  90 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!concrete_type_names_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L91" class="LineNr">  91 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;concrete-type match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L92" class="LineNr">  92 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L93" class="LineNr">  93 </span>    <span class="Delimiter">}</span>
-<span id="L94" class="LineNr">  94 </span>  <span class="Delimiter">}</span>
-<span id="L95" class="LineNr">  95 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L96" class="LineNr">  96 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L97" class="LineNr">  97 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!concrete_type_names_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L98" class="LineNr">  98 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;concrete-type match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L99" class="LineNr">  99 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><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="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L103" class="LineNr"> 103 </span><span class="Delimiter">}</span>
+<span id="L71" class="LineNr">  71 </span><span class="Delimiter">:(code)</span>
+<span id="L72" class="LineNr">  72 </span><span class="Comment">// phase 3 of static dispatch</span>
+<span id="L73" class="LineNr">  73 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L73'>strictly_matching_shape_shifting_variants</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; variants<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L74" class="LineNr">  74 </span>  vector&lt;recipe_ordinal&gt; result<span class="Delimiter">;</span>
+<span id="L75" class="LineNr">  75 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variants<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L76" class="LineNr">  76 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L77" class="LineNr">  77 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!any_type_ingredient_in_header<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L78" class="LineNr">  78 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!all_concrete_header_reagents_strictly_match<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr">  79 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>variants<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L80" class="LineNr">  80 </span>  <span class="Delimiter">}</span>
+<span id="L81" class="LineNr">  81 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L82" class="LineNr">  82 </span><span class="Delimiter">}</span>
+<span id="L83" class="LineNr">  83 </span>
+<span id="L84" class="LineNr">  84 </span><span class="Normal">bool</span> <a href='056shape_shifting_recipe.cc.html#L84'>all_concrete_header_reagents_strictly_match</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr">  85 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L86" class="LineNr">  86 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!concrete_type_names_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr">  87 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;concrete-type match failed: ingredient &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr">  88 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L89" class="LineNr">  89 </span>    <span class="Delimiter">}</span>
+<span id="L90" class="LineNr">  90 </span>  <span class="Delimiter">}</span>
+<span id="L91" class="LineNr">  91 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr">  92 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr">  93 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!concrete_type_names_strictly_match<span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L94" class="LineNr">  94 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;concrete-type match failed: product &quot;</span> &lt;&lt; i &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L95" class="LineNr">  95 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L96" class="LineNr">  96 </span>    <span class="Delimiter">}</span>
+<span id="L97" class="LineNr">  97 </span>  <span class="Delimiter">}</span>
+<span id="L98" class="LineNr">  98 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L99" class="LineNr">  99 </span><span class="Delimiter">}</span>
+<span id="L100" class="LineNr"> 100 </span>
+<span id="L101" class="LineNr"> 101 </span><span class="Comment">// manual prototype</span>
+<span id="L102" class="LineNr"> 102 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L128'>keep_max</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp;<span class="Delimiter">,</span>
+<span id="L103" class="LineNr"> 103 </span>                                <span class="Normal">int</span> <span class="Delimiter">(</span>*<span class="Delimiter">)(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a><span class="Delimiter">));</span>
 <span id="L104" class="LineNr"> 104 </span>
-<span id="L105" class="LineNr"> 105 </span><span class="Comment">// manual prototype</span>
-<span id="L106" class="LineNr"> 106 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L132'>keep_max</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp;<span class="Delimiter">,</span>
-<span id="L107" class="LineNr"> 107 </span>                                <span class="Normal">int</span> <span class="Delimiter">(</span>*<span class="Delimiter">)(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a><span class="Delimiter">));</span>
-<span id="L108" class="LineNr"> 108 </span>
-<span id="L109" class="LineNr"> 109 </span><span class="Comment">// tie-breaker for phase 3</span>
-<span id="L110" class="LineNr"> 110 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='056shape_shifting_recipe.cc.html#L110'>best_shape_shifting_variant</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; candidates<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr"> 111 </span>  assert<span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L112" class="LineNr"> 112 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L113" class="LineNr"> 113 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;A picking shape-shifting variant:\n&quot;;</span>
-<span id="L114" class="LineNr"> 114 </span>  vector&lt;recipe_ordinal&gt; result1 = <a href='056shape_shifting_recipe.cc.html#L132'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">,</span> number_of_concrete_type_names<span class="Delimiter">);</span>
-<span id="L115" class="LineNr"> 115 </span>  assert<span class="Delimiter">(</span>!result1<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L116" class="LineNr"> 116 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result1<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> result1<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L117" class="LineNr"> 117 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;B picking shape-shifting variant:\n&quot;;</span>
-<span id="L118" class="LineNr"> 118 </span>  vector&lt;recipe_ordinal&gt; result2 = <a href='056shape_shifting_recipe.cc.html#L132'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> result1<span class="Delimiter">,</span> <a href='056shape_shifting_recipe.cc.html#L154'>arity_fit</a><span class="Delimiter">);</span>
-<span id="L119" class="LineNr"> 119 </span>  assert<span class="Delimiter">(</span>!result2<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L120" class="LineNr"> 120 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result2<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> result2<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L121" class="LineNr"> 121 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;C picking shape-shifting variant:\n&quot;;</span>
-<span id="L122" class="LineNr"> 122 </span>  vector&lt;recipe_ordinal&gt; result3 = <a href='056shape_shifting_recipe.cc.html#L132'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> result2<span class="Delimiter">,</span> number_of_type_ingredients<span class="Delimiter">);</span>
-<span id="L123" class="LineNr"> 123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result3<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L124" class="LineNr"> 124 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">Couldn't decide the best shape-shifting variant for instruction '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L125" class="LineNr"> 125 </span>    cerr &lt;&lt; <span class="Constant">&quot;This is a hole in Mu. Please copy the following candidates into an email to Kartik Agaram &lt;mu@akkartik.com&gt;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L126" class="LineNr"> 126 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L127" class="LineNr"> 127 </span>      cerr &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr"> 128 </span>  <span class="Delimiter">}</span>
-<span id="L129" class="LineNr"> 129 </span>  <span class="Identifier">return</span> result3<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L130" class="LineNr"> 130 </span><span class="Delimiter">}</span>
-<span id="L131" class="LineNr"> 131 </span>
-<span id="L132" class="LineNr"> 132 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L132'>keep_max</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; in<span class="Delimiter">,</span>
-<span id="L133" class="LineNr"> 133 </span>                                <span class="Normal">int</span> <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L134" class="LineNr"> 134 </span>  assert<span class="Delimiter">(</span>!in<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L135" class="LineNr"> 135 </span>  vector&lt;recipe_ordinal&gt; out<span class="Delimiter">;</span>
-<span id="L136" class="LineNr"> 136 </span>  out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L137" class="LineNr"> 137 </span>  <span class="Normal">int</span> best_score = <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span>inst<span class="Delimiter">,</span> in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L138" class="LineNr"> 138 </span><span class="CommentedCode">//?   cerr &lt;&lt; best_score &lt;&lt; &quot; &quot; &lt;&lt; header_label(get(Recipe, in.at(0))) &lt;&lt; '\n';</span>
-<span id="L139" class="LineNr"> 139 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L140" class="LineNr"> 140 </span>    <span class="Normal">int</span> score = <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span>inst<span class="Delimiter">,</span> in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L141" class="LineNr"> 141 </span><span class="CommentedCode">//?     cerr &lt;&lt; score &lt;&lt; &quot; &quot; &lt;&lt; header_label(get(Recipe, in.at(i))) &lt;&lt; '\n';</span>
-<span id="L142" class="LineNr"> 142 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>score == best_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr"> 143 </span>      out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L144" class="LineNr"> 144 </span>    <span class="Delimiter">}</span>
-<span id="L145" class="LineNr"> 145 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>score &gt; best_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L146" class="LineNr"> 146 </span>      best_score = score<span class="Delimiter">;</span>
-<span id="L147" class="LineNr"> 147 </span>      out<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L148" class="LineNr"> 148 </span>      out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
-<span id="L149" class="LineNr"> 149 </span>    <span class="Delimiter">}</span>
-<span id="L150" class="LineNr"> 150 </span>  <span class="Delimiter">}</span>
-<span id="L151" class="LineNr"> 151 </span>  <span class="Identifier">return</span> out<span class="Delimiter">;</span>
-<span id="L152" class="LineNr"> 152 </span><span class="Delimiter">}</span>
-<span id="L153" class="LineNr"> 153 </span>
-<span id="L154" class="LineNr"> 154 </span><span class="Normal">int</span> <a href='056shape_shifting_recipe.cc.html#L154'>arity_fit</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> candidate<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L155" class="LineNr"> 155 </span>  <span class="Normal">const</span> recipe&amp; r = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidate<span class="Delimiter">);</span>
-<span id="L156" class="LineNr"> 156 </span>  <span class="Identifier">return</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> - <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>products<span class="Delimiter">))</span>
-<span id="L157" class="LineNr"> 157 </span>       + <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> - <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
-<span id="L158" class="LineNr"> 158 </span><span class="Delimiter">}</span>
-<span id="L159" class="LineNr"> 159 </span>
-<span id="L160" class="LineNr"> 160 </span><span class="Normal">bool</span> <a href='056shape_shifting_recipe.cc.html#L160'>any_type_ingredient_in_header</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L161" class="LineNr"> 161 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variant<span class="Delimiter">);</span>
-<span id="L162" class="LineNr"> 162 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L163" class="LineNr"> 163 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L164" class="LineNr"> 164 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr"> 105 </span><span class="Comment">// tie-breaker for phase 3</span>
+<span id="L106" class="LineNr"> 106 </span><a href='010vm.cc.html#L14'>recipe_ordinal</a> <a href='056shape_shifting_recipe.cc.html#L106'>best_shape_shifting_variant</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; candidates<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L107" class="LineNr"> 107 </span>  assert<span class="Delimiter">(</span>!candidates<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L108" class="LineNr"> 108 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L109" class="LineNr"> 109 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;A picking shape-shifting variant:\n&quot;;</span>
+<span id="L110" class="LineNr"> 110 </span>  vector&lt;recipe_ordinal&gt; result1 = <a href='056shape_shifting_recipe.cc.html#L128'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> candidates<span class="Delimiter">,</span> number_of_concrete_type_names<span class="Delimiter">);</span>
+<span id="L111" class="LineNr"> 111 </span>  assert<span class="Delimiter">(</span>!result1<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L112" class="LineNr"> 112 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result1<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> result1<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L113" class="LineNr"> 113 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;B picking shape-shifting variant:\n&quot;;</span>
+<span id="L114" class="LineNr"> 114 </span>  vector&lt;recipe_ordinal&gt; result2 = <a href='056shape_shifting_recipe.cc.html#L128'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> result1<span class="Delimiter">,</span> <a href='056shape_shifting_recipe.cc.html#L150'>arity_fit</a><span class="Delimiter">);</span>
+<span id="L115" class="LineNr"> 115 </span>  assert<span class="Delimiter">(</span>!result2<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L116" class="LineNr"> 116 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result2<span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">return</span> result2<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L117" class="LineNr"> 117 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;C picking shape-shifting variant:\n&quot;;</span>
+<span id="L118" class="LineNr"> 118 </span>  vector&lt;recipe_ordinal&gt; result3 = <a href='056shape_shifting_recipe.cc.html#L128'>keep_max</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> result2<span class="Delimiter">,</span> number_of_type_ingredients<span class="Delimiter">);</span>
+<span id="L119" class="LineNr"> 119 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>result3<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L120" class="LineNr"> 120 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">Couldn't decide the best shape-shifting variant for instruction '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L121" class="LineNr"> 121 </span>    cerr &lt;&lt; <span class="Constant">&quot;This is a hole in Mu. Please copy the following candidates into an email to Kartik Agaram &lt;mu@akkartik.com&gt;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L122" class="LineNr"> 122 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>candidates<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L123" class="LineNr"> 123 </span>      cerr &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidates<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L124" class="LineNr"> 124 </span>  <span class="Delimiter">}</span>
+<span id="L125" class="LineNr"> 125 </span>  <span class="Identifier">return</span> result3<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L126" class="LineNr"> 126 </span><span class="Delimiter">}</span>
+<span id="L127" class="LineNr"> 127 </span>
+<span id="L128" class="LineNr"> 128 </span>vector&lt;recipe_ordinal&gt; <a href='056shape_shifting_recipe.cc.html#L128'>keep_max</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;recipe_ordinal&gt;&amp; in<span class="Delimiter">,</span>
+<span id="L129" class="LineNr"> 129 </span>                                <span class="Normal">int</span> <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span><span class="Normal">const</span> instruction&amp;<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L130" class="LineNr"> 130 </span>  assert<span class="Delimiter">(</span>!in<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L131" class="LineNr"> 131 </span>  vector&lt;recipe_ordinal&gt; out<span class="Delimiter">;</span>
+<span id="L132" class="LineNr"> 132 </span>  out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L133" class="LineNr"> 133 </span>  <span class="Normal">int</span> best_score = <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span>inst<span class="Delimiter">,</span> in<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L134" class="LineNr"> 134 </span><span class="CommentedCode">//?   cerr &lt;&lt; best_score &lt;&lt; &quot; &quot; &lt;&lt; header_label(get(Recipe, in.at(0))) &lt;&lt; '\n';</span>
+<span id="L135" class="LineNr"> 135 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L136" class="LineNr"> 136 </span>    <span class="Normal">int</span> score = <span class="Delimiter">(</span>*scorer<span class="Delimiter">)(</span>inst<span class="Delimiter">,</span> in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L137" class="LineNr"> 137 </span><span class="CommentedCode">//?     cerr &lt;&lt; score &lt;&lt; &quot; &quot; &lt;&lt; header_label(get(Recipe, in.at(i))) &lt;&lt; '\n';</span>
+<span id="L138" class="LineNr"> 138 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>score == best_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L139" class="LineNr"> 139 </span>      out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L140" class="LineNr"> 140 </span>    <span class="Delimiter">}</span>
+<span id="L141" class="LineNr"> 141 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>score &gt; best_score<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L142" class="LineNr"> 142 </span>      best_score = score<span class="Delimiter">;</span>
+<span id="L143" class="LineNr"> 143 </span>      out<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L144" class="LineNr"> 144 </span>      out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L145" class="LineNr"> 145 </span>    <span class="Delimiter">}</span>
+<span id="L146" class="LineNr"> 146 </span>  <span class="Delimiter">}</span>
+<span id="L147" class="LineNr"> 147 </span>  <span class="Identifier">return</span> out<span class="Delimiter">;</span>
+<span id="L148" class="LineNr"> 148 </span><span class="Delimiter">}</span>
+<span id="L149" class="LineNr"> 149 </span>
+<span id="L150" class="LineNr"> 150 </span><span class="Normal">int</span> <a href='056shape_shifting_recipe.cc.html#L150'>arity_fit</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> candidate<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L151" class="LineNr"> 151 </span>  <span class="Normal">const</span> recipe&amp; r = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> candidate<span class="Delimiter">);</span>
+<span id="L152" class="LineNr"> 152 </span>  <span class="Identifier">return</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> - <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>products<span class="Delimiter">))</span>
+<span id="L153" class="LineNr"> 153 </span>       + <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> - <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
+<span id="L154" class="LineNr"> 154 </span><span class="Delimiter">}</span>
+<span id="L155" class="LineNr"> 155 </span>
+<span id="L156" class="LineNr"> 156 </span><span class="Normal">bool</span> <a href='056shape_shifting_recipe.cc.html#L156'>any_type_ingredient_in_header</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L157" class="LineNr"> 157 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variant<span class="Delimiter">);</span>
+<span id="L158" class="LineNr"> 158 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L159" class="LineNr"> 159 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<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 class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L163" class="LineNr"> 163 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
+<span id="L164" class="LineNr"> 164 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L165" class="LineNr"> 165 </span>  <span class="Delimiter">}</span>
-<span id="L166" class="LineNr"> 166 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L167" class="LineNr"> 167 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contains_type_ingredient_name<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L168" class="LineNr"> 168 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L169" class="LineNr"> 169 </span>  <span class="Delimiter">}</span>
-<span id="L170" class="LineNr"> 170 </span>  <span class="Identifier">return</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="Normal">bool</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L174" class="LineNr"> 174 </span>  canonize_type<span class="Delimiter">(</span>to<span class="Delimiter">);</span>
-<span id="L175" class="LineNr"> 175 </span>  canonize_type<span class="Delimiter">(</span>from<span class="Delimiter">);</span>
-<span id="L176" class="LineNr"> 176 </span>  <span class="Identifier">return</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
-<span id="L177" class="LineNr"> 177 </span><span class="Delimiter">}</span>
-<span id="L178" class="LineNr"> 178 </span>
-<span id="L179" class="LineNr"> 179 </span><span class="Normal">bool</span> concrete_type_names_strictly_match<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* to<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* from<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; rhs_reagent<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L180" class="LineNr"> 180 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">)</span> <span class="Identifier">return</span> !from<span class="Delimiter">;</span>
-<span id="L181" class="LineNr"> 181 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">)</span> <span class="Identifier">return</span> !to<span class="Delimiter">;</span>
-<span id="L182" class="LineNr"> 182 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_type_ingredient_name<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>  <span class="Comment">// type ingredient matches anything</span>
-<span id="L183" class="LineNr"> 183 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">-&gt;</span>atom &amp;&amp; to<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; to<span class="Delimiter">-&gt;</span>left != <span class="Constant">NULL</span> &amp;&amp; to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_type_ingredient_name<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L184" class="LineNr"> 184 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span>
-<span id="L185" class="LineNr"> 185 </span>    <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span> &amp;&amp; rhs_reagent<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">;</span>
-<span id="L186" class="LineNr"> 186 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">-&gt;</span>atom &amp;&amp; !to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L187" class="LineNr"> 187 </span>    <span class="Identifier">return</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> rhs_reagent<span class="Delimiter">)</span>
-<span id="L188" class="LineNr"> 188 </span>        &amp;&amp; concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> rhs_reagent<span class="Delimiter">);</span>
-<span id="L189" class="LineNr"> 189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom != to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L190" class="LineNr"> 190 </span>  <span class="Comment">// both from and to are atoms</span>
-<span id="L191" class="LineNr"> 191 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
-<span id="L192" class="LineNr"> 192 </span>    <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L193" class="LineNr"> 193 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
-<span id="L194" class="LineNr"> 194 </span>    <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L195" class="LineNr"> 195 </span>  <span class="Identifier">return</span> to<span class="Delimiter">-&gt;</span>name == from<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L166" class="LineNr"> 166 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L167" class="LineNr"> 167 </span><span class="Delimiter">}</span>
+<span id="L168" class="LineNr"> 168 </span>
+<span id="L169" class="LineNr"> 169 </span><span class="Normal">bool</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> to<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> from<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr"> 170 </span>  canonize_type<span class="Delimiter">(</span>to<span class="Delimiter">);</span>
+<span id="L171" class="LineNr"> 171 </span>  canonize_type<span class="Delimiter">(</span>from<span class="Delimiter">);</span>
+<span id="L172" class="LineNr"> 172 </span>  <span class="Identifier">return</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">.</span>type<span class="Delimiter">,</span> from<span class="Delimiter">);</span>
+<span id="L173" class="LineNr"> 173 </span><span class="Delimiter">}</span>
+<span id="L174" class="LineNr"> 174 </span>
+<span id="L175" class="LineNr"> 175 </span><span class="Normal">bool</span> concrete_type_names_strictly_match<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* to<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* from<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; rhs_reagent<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L176" class="LineNr"> 176 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">)</span> <span class="Identifier">return</span> !from<span class="Delimiter">;</span>
+<span id="L177" class="LineNr"> 177 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">)</span> <span class="Identifier">return</span> !to<span class="Delimiter">;</span>
+<span id="L178" class="LineNr"> 178 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_type_ingredient_name<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>  <span class="Comment">// type ingredient matches anything</span>
+<span id="L179" class="LineNr"> 179 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!to<span class="Delimiter">-&gt;</span>atom &amp;&amp; to<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; to<span class="Delimiter">-&gt;</span>left != <span class="Constant">NULL</span> &amp;&amp; to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_type_ingredient_name<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L180" class="LineNr"> 180 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom &amp;&amp; is_mu_address<span class="Delimiter">(</span>to<span class="Delimiter">))</span>
+<span id="L181" class="LineNr"> 181 </span>    <span class="Identifier">return</span> from<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal-address&quot;</span> &amp;&amp; rhs_reagent<span class="Delimiter">.</span>name == <span class="Constant">&quot;null&quot;</span><span class="Delimiter">;</span>
+<span id="L182" class="LineNr"> 182 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!from<span class="Delimiter">-&gt;</span>atom &amp;&amp; !to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L183" class="LineNr"> 183 </span>    <span class="Identifier">return</span> concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> rhs_reagent<span class="Delimiter">)</span>
+<span id="L184" class="LineNr"> 184 </span>        &amp;&amp; concrete_type_names_strictly_match<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> from<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> rhs_reagent<span class="Delimiter">);</span>
+<span id="L185" class="LineNr"> 185 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>atom != to<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L186" class="LineNr"> 186 </span>  <span class="Comment">// both from and to are atoms</span>
+<span id="L187" class="LineNr"> 187 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
+<span id="L188" class="LineNr"> 188 </span>    <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L189" class="LineNr"> 189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>to<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span>
+<span id="L190" class="LineNr"> 190 </span>    <span class="Identifier">return</span> Literal_type_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>from<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> != Literal_type_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L191" class="LineNr"> 191 </span>  <span class="Identifier">return</span> to<span class="Delimiter">-&gt;</span>name == from<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L192" class="LineNr"> 192 </span><span class="Delimiter">}</span>
+<span id="L193" class="LineNr"> 193 </span>
+<span id="L194" class="LineNr"> 194 </span><span class="Normal">bool</span> contains_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L195" class="LineNr"> 195 </span>  <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L196" class="LineNr"> 196 </span><span class="Delimiter">}</span>
 <span id="L197" class="LineNr"> 197 </span>
-<span id="L198" class="LineNr"> 198 </span><span class="Normal">bool</span> contains_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L199" class="LineNr"> 199 </span>  <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L200" class="LineNr"> 200 </span><span class="Delimiter">}</span>
-<span id="L201" class="LineNr"> 201 </span>
-<span id="L202" class="LineNr"> 202 </span><span class="Normal">bool</span> contains_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L203" class="LineNr"> 203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L204" class="LineNr"> 204 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L205" class="LineNr"> 205 </span>  <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L206" class="LineNr"> 206 </span><span class="Delimiter">}</span>
-<span id="L207" class="LineNr"> 207 </span>
-<span id="L208" class="LineNr"> 208 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><a href='001help.cc.html#L259'>vestigial</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L209" class="LineNr"> 209 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L210" class="LineNr"> 210 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L211" class="LineNr"> 211 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L212" class="LineNr"> 212 </span>    result += number_of_concrete_type_names<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L213" class="LineNr"> 213 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L214" class="LineNr"> 214 </span>    result += number_of_concrete_type_names<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L215" class="LineNr"> 215 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L216" class="LineNr"> 216 </span><span class="Delimiter">}</span>
-<span id="L217" class="LineNr"> 217 </span>
-<span id="L218" class="LineNr"> 218 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L219" class="LineNr"> 219 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L220" class="LineNr"> 220 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L221" class="LineNr"> 221 </span>    <span class="Identifier">return</span> is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> ? <span class="Constant">0</span> : <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L222" class="LineNr"> 222 </span>  <span class="Identifier">return</span> number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
-<span id="L223" class="LineNr"> 223 </span>       + number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L224" class="LineNr"> 224 </span><span class="Delimiter">}</span>
-<span id="L225" class="LineNr"> 225 </span>
-<span id="L226" class="LineNr"> 226 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><a href='001help.cc.html#L259'>vestigial</a> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L227" class="LineNr"> 227 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L228" class="LineNr"> 228 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L229" class="LineNr"> 229 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L230" class="LineNr"> 230 </span>    result += number_of_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L231" class="LineNr"> 231 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L232" class="LineNr"> 232 </span>    result += number_of_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
-<span id="L233" class="LineNr"> 233 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L234" class="LineNr"> 234 </span><span class="Delimiter">}</span>
-<span id="L235" class="LineNr"> 235 </span>
-<span id="L236" class="LineNr"> 236 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L237" class="LineNr"> 237 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L238" class="LineNr"> 238 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L239" class="LineNr"> 239 </span>    <span class="Identifier">return</span> is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> ? <span class="Constant">1</span> : <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L240" class="LineNr"> 240 </span>  <span class="Identifier">return</span> number_of_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
-<span id="L241" class="LineNr"> 241 </span>       + number_of_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L242" class="LineNr"> 242 </span><span class="Delimiter">}</span>
-<span id="L243" class="LineNr"> 243 </span>
-<span id="L244" class="LineNr"> 244 </span><span class="Comment">// returns name of new variant</span>
-<span id="L245" class="LineNr"> 245 </span>string <a href='056shape_shifting_recipe.cc.html#L245'>insert_new_variant</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L246" class="LineNr"> 246 </span>  string new_name = <a href='054static_dispatch.cc.html#L111'>next_unused_recipe_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
-<span id="L247" class="LineNr"> 247 </span>  assert<span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
-<span id="L248" class="LineNr"> 248 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> new_recipe_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
-<span id="L249" class="LineNr"> 249 </span>  <span class="Comment">// make a copy</span>
-<span id="L250" class="LineNr"> 250 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
-<span id="L251" class="LineNr"> 251 </span>  assert<span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">));</span>
-<span id="L252" class="LineNr"> 252 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
-<span id="L253" class="LineNr"> 253 </span>  recipe&amp; new_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">);</span>
-<span id="L254" class="LineNr"> 254 </span>  new_recipe<span class="Delimiter">.</span>name = new_name<span class="Delimiter">;</span>
-<span id="L255" class="LineNr"> 255 </span>  new_recipe<span class="Delimiter">.</span>is_autogenerated = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L256" class="LineNr"> 256 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to specialized &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>new_recipe<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L257" class="LineNr"> 257 </span>
-<span id="L258" class="LineNr"> 258 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;transforming new specialization: &quot;</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L259" class="LineNr"> 259 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing transforms until check_or_set_types_by_name&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L260" class="LineNr"> 260 </span>  <span class="Normal">int</span> transform_index = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L261" class="LineNr"> 261 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>transform_index = <span class="Constant">0</span><span class="Delimiter">;</span>  transform_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">);</span>  ++transform_index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L262" class="LineNr"> 262 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">)</span> == <a href='046check_type_by_name.cc.html#L21'>check_or_set_types_by_name</a><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L263" class="LineNr"> 263 </span>    <span class="Delimiter">(</span>*Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">))(</span>new_recipe_ordinal<span class="Delimiter">);</span>
-<span id="L264" class="LineNr"> 264 </span>  <span class="Delimiter">}</span>
-<span id="L265" class="LineNr"> 265 </span>  new_recipe<span class="Delimiter">.</span>transformed_until = transform_index-<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L266" class="LineNr"> 266 </span>
-<span id="L267" class="LineNr"> 267 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing type-ingredient-aware version of <a href='012transform.cc.html#L99'>transform</a> check_or_set_types_by_name&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L268" class="LineNr"> 268 </span>  <a href='056shape_shifting_recipe.cc.html#L293'>compute_type_names</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">);</span>
-<span id="L269" class="LineNr"> 269 </span>  new_recipe<span class="Delimiter">.</span>transformed_until++<span class="Delimiter">;</span>
-<span id="L270" class="LineNr"> 270 </span>
-<span id="L271" class="LineNr"> 271 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: replacing type ingredients&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L272" class="LineNr"> 272 </span>  <span class="Delimiter">{</span>
-<span id="L273" class="LineNr"> 273 </span>    map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt; mappings<span class="Delimiter">;</span>
-<span id="L274" class="LineNr"> 274 </span>    <span class="Normal">bool</span> error = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L275" class="LineNr"> 275 </span>    <a href='056shape_shifting_recipe.cc.html#L331'>compute_type_ingredient_mappings</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">),</span> inst<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> &amp;error<span class="Delimiter">);</span>
-<span id="L276" class="LineNr"> 276 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!error<span class="Delimiter">)</span> error = <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>mappings<span class="Delimiter">)</span> != <a href='056shape_shifting_recipe.cc.html#L469'>type_ingredient_count_in_header</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">));</span>
-<span id="L277" class="LineNr"> 277 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!error<span class="Delimiter">)</span> replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
-<span id="L278" class="LineNr"> 278 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;::iterator p = mappings<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != mappings<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L279" class="LineNr"> 279 </span>      <span class="Normal">delete</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
-<span id="L280" class="LineNr"> 280 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>error<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L281" class="LineNr"> 281 </span>  <span class="Delimiter">}</span>
-<span id="L282" class="LineNr"> 282 </span>  ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
-<span id="L283" class="LineNr"> 283 </span>
-<span id="L284" class="LineNr"> 284 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: recording the new variant before recursively calling resolve_ambiguous_calls&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L285" class="LineNr"> 285 </span>  get<span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>new_recipe_ordinal<span class="Delimiter">);</span>
-<span id="L286" class="LineNr"> 286 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing remaining transforms (including resolve_ambiguous_calls)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L287" class="LineNr"> 287 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  transform_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">);</span>  ++transform_index<span class="Delimiter">)</span>
-<span id="L288" class="LineNr"> 288 </span>    <span class="Delimiter">(</span>*Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">))(</span>new_recipe_ordinal<span class="Delimiter">);</span>
-<span id="L289" class="LineNr"> 289 </span>  new_recipe<span class="Delimiter">.</span>transformed_until = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L290" class="LineNr"> 290 </span>  <span class="Identifier">return</span> new_recipe<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L291" class="LineNr"> 291 </span><span class="Delimiter">}</span>
-<span id="L292" class="LineNr"> 292 </span>
-<span id="L293" class="LineNr"> 293 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L293'>compute_type_names</a><span class="Delimiter">(</span>recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L294" class="LineNr"> 294 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- compute type names: &quot;</span> &lt;&lt; variant<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L295" class="LineNr"> 295 </span>  map&lt;string<span class="Delimiter">,</span> type_tree*&gt; type_names<span class="Delimiter">;</span>
-<span id="L296" class="LineNr"> 296 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L297" class="LineNr"> 297 </span>    <a href='056shape_shifting_recipe.cc.html#L310'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L298" class="LineNr"> 298 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L299" class="LineNr"> 299 </span>    <a href='056shape_shifting_recipe.cc.html#L310'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L300" class="LineNr"> 300 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L301" class="LineNr"> 301 </span>    instruction&amp; inst = variant<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L302" class="LineNr"> 302 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  <a href='010vm.cc.html#L32'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L303" class="LineNr"> 303 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
-<span id="L304" class="LineNr"> 304 </span>      <a href='056shape_shifting_recipe.cc.html#L310'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
-<span id="L305" class="LineNr"> 305 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
-<span id="L306" class="LineNr"> 306 </span>      <a href='056shape_shifting_recipe.cc.html#L310'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
-<span id="L307" class="LineNr"> 307 </span>  <span class="Delimiter">}</span>
-<span id="L308" class="LineNr"> 308 </span><span class="Delimiter">}</span>
-<span id="L309" class="LineNr"> 309 </span>
-<span id="L310" class="LineNr"> 310 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L310'>save_or_deduce_type_name</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_tree*&gt;&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; context<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L311" class="LineNr"> 311 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L312" class="LineNr"> 312 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type &amp;&amp; contains_key<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L313" class="LineNr"> 313 </span>    x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
-<span id="L314" class="LineNr"> 314 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    deducing type to &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L315" class="LineNr"> 315 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L316" class="LineNr"> 316 </span>  <span class="Delimiter">}</span>
-<span id="L317" class="LineNr"> 317 </span>  <span class="Comment">// Type Check in Type-ingredient-aware check_or_set_types_by_name</span>
-<span id="L318" class="LineNr"> 318 </span>  <span class="Comment">// This is different from check_or_set_types_by_name.</span>
-<span id="L319" class="LineNr"> 319 </span>  <span class="Comment">// We've found it useful in the past for tracking down bugs in</span>
-<span id="L320" class="LineNr"> 320 </span>  <span class="Comment">// specialization.</span>
-<span id="L321" class="LineNr"> 321 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L322" class="LineNr"> 322 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>original_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unknown type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; context &lt;&lt; <span class="Constant">&quot; (check the name for typos)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L323" class="LineNr"> 323 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L324" class="LineNr"> 324 </span>  <span class="Delimiter">}</span>
-<span id="L325" class="LineNr"> 325 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L326" class="LineNr"> 326 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;offset&quot;</span> || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;variant&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// special-case for container-access instructions</span>
-<span id="L327" class="LineNr"> 327 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">,</span> x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L328" class="LineNr"> 328 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L329" class="LineNr"> 329 </span><span class="Delimiter">}</span>
-<span id="L330" class="LineNr"> 330 </span>
-<span id="L331" class="LineNr"> 331 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L331'>compute_type_ingredient_mappings</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L332" class="LineNr"> 332 </span>  <span class="Normal">int</span> limit = min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
-<span id="L333" class="LineNr"> 333 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; limit<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L334" class="LineNr"> 334 </span>    <span class="Normal">const</span> reagent&amp; exemplar_reagent = exemplar<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L335" class="LineNr"> 335 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L336" class="LineNr"> 336 </span>    canonize_type<span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
-<span id="L337" class="LineNr"> 337 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">)</span> &amp;&amp; ingredient<span class="Delimiter">.</span>name == <span class="Constant">&quot;0&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// assume it matches</span>
-<span id="L338" class="LineNr"> 338 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">,</span> ingredient<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
-<span id="L339" class="LineNr"> 339 </span>  <span class="Delimiter">}</span>
-<span id="L340" class="LineNr"> 340 </span>  limit = min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>products<span class="Delimiter">));</span>
-<span id="L341" class="LineNr"> 341 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; limit<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L342" class="LineNr"> 342 </span>    <span class="Normal">const</span> reagent&amp; exemplar_reagent = exemplar<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L343" class="LineNr"> 343 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L344" class="LineNr"> 344 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L345" class="LineNr"> 345 </span>    canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
-<span id="L346" class="LineNr"> 346 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">,</span> product<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
-<span id="L347" class="LineNr"> 347 </span>  <span class="Delimiter">}</span>
-<span id="L348" class="LineNr"> 348 </span><span class="Delimiter">}</span>
-<span id="L349" class="LineNr"> 349 </span>
-<span id="L350" class="LineNr"> 350 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; exemplar_reagent<span class="Delimiter">,</span> reagent&amp; refinement<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; call_instruction<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L351" class="LineNr"> 351 </span>  assert<span class="Delimiter">(</span>refinement<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L352" class="LineNr"> 352 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">.</span>type<span class="Delimiter">,</span> refinement<span class="Delimiter">.</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
-<span id="L353" class="LineNr"> 353 </span><span class="Delimiter">}</span>
-<span id="L354" class="LineNr"> 354 </span>
-<span id="L355" class="LineNr"> 355 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* exemplar_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* refinement_type<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; exemplar_reagent<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; call_instruction<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L356" class="LineNr"> 356 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!exemplar_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L357" class="LineNr"> 357 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!refinement_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L358" class="LineNr"> 358 </span>    <span class="Comment">// probably a bug in mu</span>
-<span id="L359" class="LineNr"> 359 </span>    <span class="Comment">// todo: make this smarter; only flag an error if exemplar_type contains some *new* type ingredient</span>
-<span id="L360" class="LineNr"> 360 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type ingredient for &quot;</span> &lt;&lt; exemplar_reagent<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L361" class="LineNr"> 361 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  (called from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>call_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L362" class="LineNr"> 362 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L363" class="LineNr"> 363 </span>  <span class="Delimiter">}</span>
-<span id="L364" class="LineNr"> 364 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!exemplar_type<span class="Delimiter">-&gt;</span>atom &amp;&amp; exemplar_type<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; !refinement_type<span class="Delimiter">-&gt;</span>atom &amp;&amp; refinement_type<span class="Delimiter">-&gt;</span>right != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L365" class="LineNr"> 365 </span>    exemplar_type = exemplar_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L366" class="LineNr"> 366 </span>    <a href='003trace.cc.html#L177'>assert_for_now</a><span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L367" class="LineNr"> 367 </span>  <span class="Delimiter">}</span>
-<span id="L368" class="LineNr"> 368 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L369" class="LineNr"> 369 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L370" class="LineNr"> 370 </span>      <span class="Normal">const</span> type_tree* curr_refinement_type = <span class="Constant">NULL</span><span class="Delimiter">;</span>  <span class="Comment">// temporary heap allocation; must always be deleted before it goes out of scope</span>
-<span id="L371" class="LineNr"> 371 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
-<span id="L372" class="LineNr"> 372 </span>        curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">);</span>
-<span id="L373" class="LineNr"> 373 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L374" class="LineNr"> 374 </span>        assert<span class="Delimiter">(</span>!refinement_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
-<span id="L375" class="LineNr"> 375 </span>        curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
-<span id="L376" class="LineNr"> 376 </span>      <span class="Delimiter">}</span>
-<span id="L377" class="LineNr"> 377 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L378" class="LineNr"> 378 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L379" class="LineNr"> 379 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
-<span id="L380" class="LineNr"> 380 </span>      <span class="Delimiter">}</span>
-<span id="L381" class="LineNr"> 381 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L382" class="LineNr"> 382 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!deeply_equal_type_names<span class="Delimiter">(</span>get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">),</span> curr_refinement_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L383" class="LineNr"> 383 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;no call found for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>call_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L384" class="LineNr"> 384 </span>          *error = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L385" class="LineNr"> 385 </span>          <span class="Normal">delete</span> curr_refinement_type<span class="Delimiter">;</span>
-<span id="L386" class="LineNr"> 386 </span>          <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L387" class="LineNr"> 387 </span>        <span class="Delimiter">}</span>
-<span id="L388" class="LineNr"> 388 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L389" class="LineNr"> 389 </span>          <span class="Normal">delete</span> get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L390" class="LineNr"> 390 </span>          <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
-<span id="L391" class="LineNr"> 391 </span>        <span class="Delimiter">}</span>
-<span id="L392" class="LineNr"> 392 </span>      <span class="Delimiter">}</span>
-<span id="L393" class="LineNr"> 393 </span>      <span class="Normal">delete</span> curr_refinement_type<span class="Delimiter">;</span>
-<span id="L394" class="LineNr"> 394 </span>    <span class="Delimiter">}</span>
-<span id="L395" class="LineNr"> 395 </span>  <span class="Delimiter">}</span>
-<span id="L396" class="LineNr"> 396 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L397" class="LineNr"> 397 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
-<span id="L398" class="LineNr"> 398 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> refinement_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
-<span id="L399" class="LineNr"> 399 </span>  <span class="Delimiter">}</span>
-<span id="L400" class="LineNr"> 400 </span><span class="Delimiter">}</span>
-<span id="L401" class="LineNr"> 401 </span>
-<span id="L402" class="LineNr"> 402 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>recipe&amp; new_recipe<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L403" class="LineNr"> 403 </span>  <span class="Comment">// update its header</span>
-<span id="L404" class="LineNr"> 404 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>mappings<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L405" class="LineNr"> 405 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L19'>recipe</a> header ingredients&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L406" class="LineNr"> 406 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L407" class="LineNr"> 407 </span>    replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
-<span id="L408" class="LineNr"> 408 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L19'>recipe</a> header products&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L409" class="LineNr"> 409 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L410" class="LineNr"> 410 </span>    replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
-<span id="L411" class="LineNr"> 411 </span>  <span class="Comment">// update its body</span>
-<span id="L412" class="LineNr"> 412 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L413" class="LineNr"> 413 </span>    instruction&amp; inst = new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L414" class="LineNr"> 414 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L415" class="LineNr"> 415 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
-<span id="L416" class="LineNr"> 416 </span>      replace_type_ingredients<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
-<span id="L417" class="LineNr"> 417 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
-<span id="L418" class="LineNr"> 418 </span>      replace_type_ingredients<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
-<span id="L419" class="LineNr"> 419 </span>    <span class="Comment">// special-case for new: replace type ingredient in first ingredient *value*</span>
-<span id="L420" class="LineNr"> 420 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;new&quot;</span> &amp;&amp; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;literal-string&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L421" class="LineNr"> 421 </span>      type_tree* type = <a href='056shape_shifting_recipe.cc.html#L486'>parse_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
-<span id="L422" class="LineNr"> 422 </span>      replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
-<span id="L423" class="LineNr"> 423 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name = inspect<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
-<span id="L424" class="LineNr"> 424 </span>      <span class="Normal">delete</span> type<span class="Delimiter">;</span>
-<span id="L425" class="LineNr"> 425 </span>    <span class="Delimiter">}</span>
-<span id="L426" class="LineNr"> 426 </span>  <span class="Delimiter">}</span>
-<span id="L427" class="LineNr"> 427 </span><span class="Delimiter">}</span>
-<span id="L428" class="LineNr"> 428 </span>
-<span id="L429" class="LineNr"> 429 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L430" class="LineNr"> 430 </span>  string before = <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
-<span id="L431" class="LineNr"> 431 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in ingredient &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L432" class="LineNr"> 432 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L433" class="LineNr"> 433 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;specializing &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name &lt;&lt; <span class="Constant">&quot;: missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L434" class="LineNr"> 434 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L435" class="LineNr"> 435 </span>  <span class="Delimiter">}</span>
-<span id="L436" class="LineNr"> 436 </span>  replace_type_ingredients<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
-<span id="L437" class="LineNr"> 437 </span><span class="Delimiter">}</span>
-<span id="L438" class="LineNr"> 438 </span>
-<span id="L439" class="LineNr"> 439 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L440" class="LineNr"> 440 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L441" class="LineNr"> 441 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L442" class="LineNr"> 442 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; type<span class="Delimiter">-&gt;</span>left != <span class="Constant">NULL</span> &amp;&amp; type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> &amp;&amp; !get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>atom &amp;&amp; get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>right != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L443" class="LineNr"> 443 </span>      *type = *get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L444" class="LineNr"> 444 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L445" class="LineNr"> 445 </span>    <span class="Delimiter">}</span>
-<span id="L446" class="LineNr"> 446 </span>    replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
-<span id="L447" class="LineNr"> 447 </span>    replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
-<span id="L448" class="LineNr"> 448 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L449" class="LineNr"> 449 </span>  <span class="Delimiter">}</span>
-<span id="L450" class="LineNr"> 450 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>  <span class="Comment">// todo: ugly side effect</span>
-<span id="L451" class="LineNr"> 451 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L452" class="LineNr"> 452 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
-<span id="L453" class="LineNr"> 453 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L454" class="LineNr"> 454 </span>  <span class="Normal">const</span> type_tree* replacement = get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L455" class="LineNr"> 455 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>replacement<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L456" class="LineNr"> 456 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>replacement<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L457" class="LineNr"> 457 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> replacement<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L458" class="LineNr"> 458 </span>      <span class="Comment">// error in program; should be reported elsewhere</span>
-<span id="L459" class="LineNr"> 459 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L460" class="LineNr"> 460 </span>    <span class="Delimiter">}</span>
-<span id="L461" class="LineNr"> 461 </span>    type<span class="Delimiter">-&gt;</span>name = <span class="Delimiter">(</span>replacement<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span> ? <span class="Constant">&quot;number&quot;</span> : replacement<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
-<span id="L462" class="LineNr"> 462 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L198" class="LineNr"> 198 </span><span class="Normal">bool</span> contains_type_ingredient_name<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L199" class="LineNr"> 199 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L200" class="LineNr"> 200 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L201" class="LineNr"> 201 </span>  <span class="Identifier">return</span> contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span> || contains_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L202" class="LineNr"> 202 </span><span class="Delimiter">}</span>
+<span id="L203" class="LineNr"> 203 </span>
+<span id="L204" class="LineNr"> 204 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L205" class="LineNr"> 205 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L206" class="LineNr"> 206 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L207" class="LineNr"> 207 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L208" class="LineNr"> 208 </span>    result += number_of_concrete_type_names<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L209" class="LineNr"> 209 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L210" class="LineNr"> 210 </span>    result += number_of_concrete_type_names<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L211" class="LineNr"> 211 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L212" class="LineNr"> 212 </span><span class="Delimiter">}</span>
+<span id="L213" class="LineNr"> 213 </span>
+<span id="L214" class="LineNr"> 214 </span><span class="Normal">int</span> number_of_concrete_type_names<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L215" class="LineNr"> 215 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L216" class="LineNr"> 216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L217" class="LineNr"> 217 </span>    <span class="Identifier">return</span> is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> ? <span class="Constant">0</span> : <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L218" class="LineNr"> 218 </span>  <span class="Identifier">return</span> number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
+<span id="L219" class="LineNr"> 219 </span>       + number_of_concrete_type_names<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L220" class="LineNr"> 220 </span><span class="Delimiter">}</span>
+<span id="L221" class="LineNr"> 221 </span>
+<span id="L222" class="LineNr"> 222 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">,</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L223" class="LineNr"> 223 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L224" class="LineNr"> 224 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L225" class="LineNr"> 225 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L226" class="LineNr"> 226 </span>    result += number_of_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L227" class="LineNr"> 227 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L228" class="LineNr"> 228 </span>    result += number_of_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
+<span id="L229" class="LineNr"> 229 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L230" class="LineNr"> 230 </span><span class="Delimiter">}</span>
+<span id="L231" class="LineNr"> 231 </span>
+<span id="L232" class="LineNr"> 232 </span><span class="Normal">int</span> number_of_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L233" class="LineNr"> 233 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L234" class="LineNr"> 234 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L235" class="LineNr"> 235 </span>    <span class="Identifier">return</span> is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> ? <span class="Constant">1</span> : <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L236" class="LineNr"> 236 </span>  <span class="Identifier">return</span> number_of_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
+<span id="L237" class="LineNr"> 237 </span>       + number_of_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L238" class="LineNr"> 238 </span><span class="Delimiter">}</span>
+<span id="L239" class="LineNr"> 239 </span>
+<span id="L240" class="LineNr"> 240 </span><span class="Comment">// returns name of new variant</span>
+<span id="L241" class="LineNr"> 241 </span>string <a href='056shape_shifting_recipe.cc.html#L241'>insert_new_variant</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L242" class="LineNr"> 242 </span>  string new_name = <a href='054static_dispatch.cc.html#L111'>next_unused_recipe_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
+<span id="L243" class="LineNr"> 243 </span>  assert<span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">));</span>
+<span id="L244" class="LineNr"> 244 </span>  <a href='010vm.cc.html#L14'>recipe_ordinal</a> new_recipe_ordinal = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> new_name<span class="Delimiter">,</span> Next_recipe_ordinal++<span class="Delimiter">);</span>
+<span id="L245" class="LineNr"> 245 </span>  <span class="Comment">// make a copy</span>
+<span id="L246" class="LineNr"> 246 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
+<span id="L247" class="LineNr"> 247 </span>  assert<span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">));</span>
+<span id="L248" class="LineNr"> 248 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
+<span id="L249" class="LineNr"> 249 </span>  recipe&amp; new_recipe = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> new_recipe_ordinal<span class="Delimiter">);</span>
+<span id="L250" class="LineNr"> 250 </span>  new_recipe<span class="Delimiter">.</span>name = new_name<span class="Delimiter">;</span>
+<span id="L251" class="LineNr"> 251 </span>  new_recipe<span class="Delimiter">.</span>ordinal = new_recipe_ordinal<span class="Delimiter">;</span>
+<span id="L252" class="LineNr"> 252 </span>  new_recipe<span class="Delimiter">.</span>is_autogenerated =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L253" class="LineNr"> 253 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;switching &quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; to specialized &quot;</span> &lt;&lt; header_label<span class="Delimiter">(</span>new_recipe<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L254" class="LineNr"> 254 </span>
+<span id="L255" class="LineNr"> 255 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;transforming new specialization: &quot;</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L256" class="LineNr"> 256 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing transforms until check_or_set_types_by_name&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L257" class="LineNr"> 257 </span>  <span class="Normal">int</span> transform_index = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L258" class="LineNr"> 258 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>transform_index = <span class="Constant">0</span><span class="Delimiter">;</span>  transform_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">);</span>  ++transform_index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L259" class="LineNr"> 259 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">)</span> == <a href='046check_type_by_name.cc.html#L35'>check_or_set_types_by_name</a><span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L260" class="LineNr"> 260 </span>    <span class="Delimiter">(</span>*Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">))(</span>new_recipe_ordinal<span class="Delimiter">);</span>
+<span id="L261" class="LineNr"> 261 </span>  <span class="Delimiter">}</span>
+<span id="L262" class="LineNr"> 262 </span>  new_recipe<span class="Delimiter">.</span>transformed_until = transform_index-<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L263" class="LineNr"> 263 </span>
+<span id="L264" class="LineNr"> 264 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing type-ingredient-aware version of <a href='012transform.cc.html#L99'>transform</a> check_or_set_types_by_name&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L265" class="LineNr"> 265 </span>  <a href='056shape_shifting_recipe.cc.html#L290'>compute_type_names</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">);</span>
+<span id="L266" class="LineNr"> 266 </span>  new_recipe<span class="Delimiter">.</span>transformed_until++<span class="Delimiter">;</span>
+<span id="L267" class="LineNr"> 267 </span>
+<span id="L268" class="LineNr"> 268 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: replacing type ingredients&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L269" class="LineNr"> 269 </span>  <span class="Delimiter">{</span>
+<span id="L270" class="LineNr"> 270 </span>    map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt; mappings<span class="Delimiter">;</span>
+<span id="L271" class="LineNr"> 271 </span>    <span class="Normal">bool</span> error =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L272" class="LineNr"> 272 </span>    <a href='056shape_shifting_recipe.cc.html#L328'>compute_type_ingredient_mappings</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">),</span> inst<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> &amp;error<span class="Delimiter">);</span>
+<span id="L273" class="LineNr"> 273 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!error<span class="Delimiter">)</span> error = <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>mappings<span class="Delimiter">)</span> != <a href='056shape_shifting_recipe.cc.html#L466'>type_ingredient_count_in_header</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">));</span>
+<span id="L274" class="LineNr"> 274 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!error<span class="Delimiter">)</span> replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
+<span id="L275" class="LineNr"> 275 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;::iterator p = mappings<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != mappings<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L276" class="LineNr"> 276 </span>      <span class="Normal">delete</span> p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
+<span id="L277" class="LineNr"> 277 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>error<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L278" class="LineNr"> 278 </span>  <span class="Delimiter">}</span>
+<span id="L279" class="LineNr"> 279 </span>  ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> exemplar<span class="Delimiter">));</span>
+<span id="L280" class="LineNr"> 280 </span>
+<span id="L281" class="LineNr"> 281 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: recording the new variant before recursively calling resolve_ambiguous_calls&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L282" class="LineNr"> 282 </span>  get<span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>new_recipe_ordinal<span class="Delimiter">);</span>
+<span id="L283" class="LineNr"> 283 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9992</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: performing remaining transforms (including resolve_ambiguous_calls)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L284" class="LineNr"> 284 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  transform_index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">);</span>  ++transform_index<span class="Delimiter">)</span>
+<span id="L285" class="LineNr"> 285 </span>    <span class="Delimiter">(</span>*Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>transform_index<span class="Delimiter">))(</span>new_recipe_ordinal<span class="Delimiter">);</span>
+<span id="L286" class="LineNr"> 286 </span>  new_recipe<span class="Delimiter">.</span>transformed_until = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Transform<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L287" class="LineNr"> 287 </span>  <span class="Identifier">return</span> new_recipe<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L288" class="LineNr"> 288 </span><span class="Delimiter">}</span>
+<span id="L289" class="LineNr"> 289 </span>
+<span id="L290" class="LineNr"> 290 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L290'>compute_type_names</a><span class="Delimiter">(</span>recipe&amp; variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L291" class="LineNr"> 291 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- compute type names: &quot;</span> &lt;&lt; variant<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L292" class="LineNr"> 292 </span>  map&lt;string<span class="Delimiter">,</span> type_tree*&gt; type_names<span class="Delimiter">;</span>
+<span id="L293" class="LineNr"> 293 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L294" class="LineNr"> 294 </span>    <a href='056shape_shifting_recipe.cc.html#L307'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L295" class="LineNr"> 295 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L296" class="LineNr"> 296 </span>    <a href='056shape_shifting_recipe.cc.html#L307'>save_or_deduce_type_name</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L297" class="LineNr"> 297 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L298" class="LineNr"> 298 </span>    instruction&amp; inst = variant<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L299" class="LineNr"> 299 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;  <a href='010vm.cc.html#L33'>instruction</a>: &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L300" class="LineNr"> 300 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
+<span id="L301" class="LineNr"> 301 </span>      <a href='056shape_shifting_recipe.cc.html#L307'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
+<span id="L302" class="LineNr"> 302 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
+<span id="L303" class="LineNr"> 303 </span>      <a href='056shape_shifting_recipe.cc.html#L307'>save_or_deduce_type_name</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">),</span> type_names<span class="Delimiter">,</span> variant<span class="Delimiter">,</span> <span class="Constant">&quot; in '&quot;</span> + to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> + <span class="Constant">&quot;'&quot;</span><span class="Delimiter">);</span>
+<span id="L304" class="LineNr"> 304 </span>  <span class="Delimiter">}</span>
+<span id="L305" class="LineNr"> 305 </span><span class="Delimiter">}</span>
+<span id="L306" class="LineNr"> 306 </span>
+<span id="L307" class="LineNr"> 307 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L307'>save_or_deduce_type_name</a><span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> type_tree*&gt;&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; variant<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; context<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L308" class="LineNr"> 308 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    checking &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L309" class="LineNr"> 309 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L310" class="LineNr"> 310 </span>    x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*get<span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L311" class="LineNr"> 311 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9994</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;    deducing type to &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L312" class="LineNr"> 312 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L313" class="LineNr"> 313 </span>  <span class="Delimiter">}</span>
+<span id="L314" class="LineNr"> 314 </span>  <span class="Comment">// Type Check in Type-ingredient-aware check_or_set_types_by_name</span>
+<span id="L315" class="LineNr"> 315 </span>  <span class="Comment">// This is different from check_or_set_types_by_name.</span>
+<span id="L316" class="LineNr"> 316 </span>  <span class="Comment">// We've found it useful in the past for tracking down bugs in</span>
+<span id="L317" class="LineNr"> 317 </span>  <span class="Comment">// specialization.</span>
+<span id="L318" class="LineNr"> 318 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L319" class="LineNr"> 319 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>variant<span class="Delimiter">.</span>original_name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;unknown type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; context &lt;&lt; <span class="Constant">&quot; (check the name for typos)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L320" class="LineNr"> 320 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L321" class="LineNr"> 321 </span>  <span class="Delimiter">}</span>
+<span id="L322" class="LineNr"> 322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L323" class="LineNr"> 323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;offset&quot;</span> || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;variant&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// special-case for container-access instructions</span>
+<span id="L324" class="LineNr"> 324 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>type<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">,</span> x<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L325" class="LineNr"> 325 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;type of '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' is &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L326" class="LineNr"> 326 </span><span class="Delimiter">}</span>
+<span id="L327" class="LineNr"> 327 </span>
+<span id="L328" class="LineNr"> 328 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L328'>compute_type_ingredient_mappings</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L329" class="LineNr"> 329 </span>  <span class="Normal">int</span> limit = min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>
+<span id="L330" class="LineNr"> 330 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; limit<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L331" class="LineNr"> 331 </span>    <span class="Normal">const</span> reagent&amp; exemplar_reagent = exemplar<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L332" class="LineNr"> 332 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L333" class="LineNr"> 333 </span>    canonize_type<span class="Delimiter">(</span>ingredient<span class="Delimiter">);</span>
+<span id="L334" class="LineNr"> 334 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">)</span> &amp;&amp; ingredient<span class="Delimiter">.</span>name == <span class="Constant">&quot;null&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// assume it matches</span>
+<span id="L335" class="LineNr"> 335 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">,</span> ingredient<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
+<span id="L336" class="LineNr"> 336 </span>  <span class="Delimiter">}</span>
+<span id="L337" class="LineNr"> 337 </span>  limit = min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>products<span class="Delimiter">));</span>
+<span id="L338" class="LineNr"> 338 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; limit<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L339" class="LineNr"> 339 </span>    <span class="Normal">const</span> reagent&amp; exemplar_reagent = exemplar<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L340" class="LineNr"> 340 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> product = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L341" class="LineNr"> 341 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>product<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L342" class="LineNr"> 342 </span>    canonize_type<span class="Delimiter">(</span>product<span class="Delimiter">);</span>
+<span id="L343" class="LineNr"> 343 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">,</span> product<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> inst<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
+<span id="L344" class="LineNr"> 344 </span>  <span class="Delimiter">}</span>
+<span id="L345" class="LineNr"> 345 </span><span class="Delimiter">}</span>
+<span id="L346" class="LineNr"> 346 </span>
+<span id="L347" class="LineNr"> 347 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; exemplar_reagent<span class="Delimiter">,</span> reagent&amp; refinement<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; call_instruction<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L348" class="LineNr"> 348 </span>  assert<span class="Delimiter">(</span>refinement<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L349" class="LineNr"> 349 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_reagent<span class="Delimiter">.</span>type<span class="Delimiter">,</span> refinement<span class="Delimiter">.</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
+<span id="L350" class="LineNr"> 350 </span><span class="Delimiter">}</span>
+<span id="L351" class="LineNr"> 351 </span>
+<span id="L352" class="LineNr"> 352 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* exemplar_type<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree* refinement_type<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; exemplar_reagent<span class="Delimiter">,</span> <span class="Normal">const</span> instruction&amp; call_instruction<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">,</span> <span class="Normal">bool</span>* error<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L353" class="LineNr"> 353 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!exemplar_type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L354" class="LineNr"> 354 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!refinement_type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L355" class="LineNr"> 355 </span>    <span class="Comment">// probably a bug in mu</span>
+<span id="L356" class="LineNr"> 356 </span>    <span class="Comment">// todo: make this smarter; only flag an error if exemplar_type contains some *new* type ingredient</span>
+<span id="L357" class="LineNr"> 357 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type ingredient for &quot;</span> &lt;&lt; exemplar_reagent<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L358" class="LineNr"> 358 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  (called from '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>call_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;')</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L359" class="LineNr"> 359 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr"> 360 </span>  <span class="Delimiter">}</span>
+<span id="L361" class="LineNr"> 361 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!exemplar_type<span class="Delimiter">-&gt;</span>atom &amp;&amp; exemplar_type<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; !refinement_type<span class="Delimiter">-&gt;</span>atom &amp;&amp; refinement_type<span class="Delimiter">-&gt;</span>right != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L362" class="LineNr"> 362 </span>    exemplar_type = exemplar_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
+<span id="L363" class="LineNr"> 363 </span>    <a href='003trace.cc.html#L200'>assert_for_now</a><span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L364" class="LineNr"> 364 </span>  <span class="Delimiter">}</span>
+<span id="L365" class="LineNr"> 365 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L366" class="LineNr"> 366 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L367" class="LineNr"> 367 </span>      <span class="Normal">const</span> type_tree* curr_refinement_type = <span class="Constant">NULL</span><span class="Delimiter">;</span>  <span class="Comment">// temporary heap allocation; must always be deleted before it goes out of scope</span>
+<span id="L368" class="LineNr"> 368 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
+<span id="L369" class="LineNr"> 369 </span>        curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">);</span>
+<span id="L370" class="LineNr"> 370 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L371" class="LineNr"> 371 </span>        assert<span class="Delimiter">(</span>!refinement_type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">);</span>
+<span id="L372" class="LineNr"> 372 </span>        curr_refinement_type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">);</span>
+<span id="L373" class="LineNr"> 373 </span>      <span class="Delimiter">}</span>
+<span id="L374" class="LineNr"> 374 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L375" class="LineNr"> 375 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;adding mapping from &quot;</span> &lt;&lt; exemplar_type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>curr_refinement_type<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L376" class="LineNr"> 376 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
+<span id="L377" class="LineNr"> 377 </span>      <span class="Delimiter">}</span>
+<span id="L378" class="LineNr"> 378 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L379" class="LineNr"> 379 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!deeply_equal_type_names<span class="Delimiter">(</span>get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">),</span> curr_refinement_type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L380" class="LineNr"> 380 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;no call found for '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>call_instruction<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L381" class="LineNr"> 381 </span>          *error =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L382" class="LineNr"> 382 </span>          <span class="Normal">delete</span> curr_refinement_type<span class="Delimiter">;</span>
+<span id="L383" class="LineNr"> 383 </span>          <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L384" class="LineNr"> 384 </span>        <span class="Delimiter">}</span>
+<span id="L385" class="LineNr"> 385 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L386" class="LineNr"> 386 </span>          <span class="Normal">delete</span> get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L387" class="LineNr"> 387 </span>          <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> exemplar_type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Normal">new</span> type_tree<span class="Delimiter">(</span>*curr_refinement_type<span class="Delimiter">));</span>
+<span id="L388" class="LineNr"> 388 </span>        <span class="Delimiter">}</span>
+<span id="L389" class="LineNr"> 389 </span>      <span class="Delimiter">}</span>
+<span id="L390" class="LineNr"> 390 </span>      <span class="Normal">delete</span> curr_refinement_type<span class="Delimiter">;</span>
+<span id="L391" class="LineNr"> 391 </span>    <span class="Delimiter">}</span>
+<span id="L392" class="LineNr"> 392 </span>  <span class="Delimiter">}</span>
+<span id="L393" class="LineNr"> 393 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L394" class="LineNr"> 394 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> refinement_type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
+<span id="L395" class="LineNr"> 395 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>exemplar_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> refinement_type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> mappings<span class="Delimiter">,</span> exemplar<span class="Delimiter">,</span> exemplar_reagent<span class="Delimiter">,</span> call_instruction<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">,</span> error<span class="Delimiter">);</span>
+<span id="L396" class="LineNr"> 396 </span>  <span class="Delimiter">}</span>
+<span id="L397" class="LineNr"> 397 </span><span class="Delimiter">}</span>
+<span id="L398" class="LineNr"> 398 </span>
+<span id="L399" class="LineNr"> 399 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>recipe&amp; new_recipe<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L400" class="LineNr"> 400 </span>  <span class="Comment">// update its header</span>
+<span id="L401" class="LineNr"> 401 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>mappings<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L402" class="LineNr"> 402 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L19'>recipe</a> header ingredients&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L403" class="LineNr"> 403 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L404" class="LineNr"> 404 </span>    replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
+<span id="L405" class="LineNr"> 405 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L19'>recipe</a> header products&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L406" class="LineNr"> 406 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L407" class="LineNr"> 407 </span>    replace_type_ingredients<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
+<span id="L408" class="LineNr"> 408 </span>  <span class="Comment">// update its body</span>
+<span id="L409" class="LineNr"> 409 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L410" class="LineNr"> 410 </span>    instruction&amp; inst = new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L411" class="LineNr"> 411 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L412" class="LineNr"> 412 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
+<span id="L413" class="LineNr"> 413 </span>      replace_type_ingredients<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
+<span id="L414" class="LineNr"> 414 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
+<span id="L415" class="LineNr"> 415 </span>      replace_type_ingredients<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> mappings<span class="Delimiter">,</span> new_recipe<span class="Delimiter">);</span>
+<span id="L416" class="LineNr"> 416 </span>    <span class="Comment">// special-case for new: replace type ingredient in first ingredient *value*</span>
+<span id="L417" class="LineNr"> 417 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;new&quot;</span> &amp;&amp; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;literal-string&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L418" class="LineNr"> 418 </span>      type_tree* type = <a href='056shape_shifting_recipe.cc.html#L483'>parse_type_tree</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
+<span id="L419" class="LineNr"> 419 </span>      replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
+<span id="L420" class="LineNr"> 420 </span>      inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name = inspect<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
+<span id="L421" class="LineNr"> 421 </span>      <span class="Normal">delete</span> type<span class="Delimiter">;</span>
+<span id="L422" class="LineNr"> 422 </span>    <span class="Delimiter">}</span>
+<span id="L423" class="LineNr"> 423 </span>  <span class="Delimiter">}</span>
+<span id="L424" class="LineNr"> 424 </span><span class="Delimiter">}</span>
+<span id="L425" class="LineNr"> 425 </span>
+<span id="L426" class="LineNr"> 426 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L427" class="LineNr"> 427 </span>  string before = <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>x<span class="Delimiter">);</span>
+<span id="L428" class="LineNr"> 428 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;replacing in ingredient &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L429" class="LineNr"> 429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L430" class="LineNr"> 430 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;specializing &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>original_name &lt;&lt; <span class="Constant">&quot;: missing type for '&quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L431" class="LineNr"> 431 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr"> 432 </span>  <span class="Delimiter">}</span>
+<span id="L433" class="LineNr"> 433 </span>  replace_type_ingredients<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
+<span id="L434" class="LineNr"> 434 </span><span class="Delimiter">}</span>
+<span id="L435" class="LineNr"> 435 </span>
+<span id="L436" class="LineNr"> 436 </span><span class="Normal">void</span> replace_type_ingredients<span class="Delimiter">(</span>type_tree* type<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">const</span> type_tree*&gt;&amp; mappings<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L437" class="LineNr"> 437 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L438" class="LineNr"> 438 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L439" class="LineNr"> 439 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right == <span class="Constant">NULL</span> &amp;&amp; type<span class="Delimiter">-&gt;</span>left != <span class="Constant">NULL</span> &amp;&amp; type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>atom &amp;&amp; <a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)</span> &amp;&amp; !get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>atom &amp;&amp; get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">)-&gt;</span>right != <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L440" class="LineNr"> 440 </span>      *type = *get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L441" class="LineNr"> 441 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L442" class="LineNr"> 442 </span>    <span class="Delimiter">}</span>
+<span id="L443" class="LineNr"> 443 </span>    replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
+<span id="L444" class="LineNr"> 444 </span>    replace_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> mappings<span class="Delimiter">);</span>
+<span id="L445" class="LineNr"> 445 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L446" class="LineNr"> 446 </span>  <span class="Delimiter">}</span>
+<span id="L447" class="LineNr"> 447 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>  <span class="Comment">// todo: ugly side effect</span>
+<span id="L448" class="LineNr"> 448 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L449" class="LineNr"> 449 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span>
+<span id="L450" class="LineNr"> 450 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L451" class="LineNr"> 451 </span>  <span class="Normal">const</span> type_tree* replacement = get<span class="Delimiter">(</span>mappings<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L452" class="LineNr"> 452 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; type<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot; =&gt; &quot;</span> &lt;&lt; names_to_string<span class="Delimiter">(</span>replacement<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L453" class="LineNr"> 453 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>replacement<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L454" class="LineNr"> 454 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> replacement<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L455" class="LineNr"> 455 </span>      <span class="Comment">// error in program; should be reported elsewhere</span>
+<span id="L456" class="LineNr"> 456 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L457" class="LineNr"> 457 </span>    <span class="Delimiter">}</span>
+<span id="L458" class="LineNr"> 458 </span>    type<span class="Delimiter">-&gt;</span>name = <span class="Delimiter">(</span>replacement<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;literal&quot;</span><span class="Delimiter">)</span> ? <span class="Constant">&quot;number&quot;</span> : replacement<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L459" class="LineNr"> 459 </span>    type<span class="Delimiter">-&gt;</span>value = get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L460" class="LineNr"> 460 </span>  <span class="Delimiter">}</span>
+<span id="L461" class="LineNr"> 461 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L462" class="LineNr"> 462 </span>    *type = *replacement<span class="Delimiter">;</span>
 <span id="L463" class="LineNr"> 463 </span>  <span class="Delimiter">}</span>
-<span id="L464" class="LineNr"> 464 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L465" class="LineNr"> 465 </span>    *type = *replacement<span class="Delimiter">;</span>
-<span id="L466" class="LineNr"> 466 </span>  <span class="Delimiter">}</span>
-<span id="L467" class="LineNr"> 467 </span><span class="Delimiter">}</span>
-<span id="L468" class="LineNr"> 468 </span>
-<span id="L469" class="LineNr"> 469 </span><span class="Normal">int</span> <a href='056shape_shifting_recipe.cc.html#L469'>type_ingredient_count_in_header</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L470" class="LineNr"> 470 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variant<span class="Delimiter">);</span>
-<span id="L471" class="LineNr"> 471 </span>  set&lt;string&gt; type_ingredients<span class="Delimiter">;</span>
-<span id="L472" class="LineNr"> 472 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L473" class="LineNr"> 473 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> type_ingredients<span class="Delimiter">);</span>
-<span id="L474" class="LineNr"> 474 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L475" class="LineNr"> 475 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> type_ingredients<span class="Delimiter">);</span>
-<span id="L476" class="LineNr"> 476 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>type_ingredients<span class="Delimiter">);</span>
-<span id="L477" class="LineNr"> 477 </span><span class="Delimiter">}</span>
-<span id="L478" class="LineNr"> 478 </span>
-<span id="L479" class="LineNr"> 479 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> set&lt;string&gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L480" class="LineNr"> 480 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L481" class="LineNr"> 481 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> out<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
-<span id="L482" class="LineNr"> 482 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L483" class="LineNr"> 483 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L484" class="LineNr"> 484 </span><span class="Delimiter">}</span>
-<span id="L485" class="LineNr"> 485 </span>
-<span id="L486" class="LineNr"> 486 </span>type_tree* <a href='056shape_shifting_recipe.cc.html#L486'>parse_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L487" class="LineNr"> 487 </span>  string_tree* s2 = parse_string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L488" class="LineNr"> 488 </span>  type_tree* result = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>s2<span class="Delimiter">);</span>
-<span id="L489" class="LineNr"> 489 </span>  <span class="Normal">delete</span> s2<span class="Delimiter">;</span>
-<span id="L490" class="LineNr"> 490 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L491" class="LineNr"> 491 </span><span class="Delimiter">}</span>
-<span id="L492" class="LineNr"> 492 </span>
-<span id="L493" class="LineNr"> 493 </span>string inspect<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L494" class="LineNr"> 494 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L495" class="LineNr"> 495 </span>  <a href='056shape_shifting_recipe.cc.html#L499'>dump_inspect</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L496" class="LineNr"> 496 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L497" class="LineNr"> 497 </span><span class="Delimiter">}</span>
-<span id="L498" class="LineNr"> 498 </span>
-<span id="L499" class="LineNr"> 499 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L499'>dump_inspect</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L500" class="LineNr"> 500 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>left &amp;&amp; !x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L501" class="LineNr"> 501 </span>    out &lt;&lt; x<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
-<span id="L502" class="LineNr"> 502 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L503" class="LineNr"> 503 </span>  <span class="Delimiter">}</span>
-<span id="L504" class="LineNr"> 504 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
-<span id="L505" class="LineNr"> 505 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>  curr<span class="Delimiter">;</span>  curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L506" class="LineNr"> 506 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr != x<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L507" class="LineNr"> 507 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
-<span id="L508" class="LineNr"> 508 </span>      <a href='056shape_shifting_recipe.cc.html#L499'>dump_inspect</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
-<span id="L509" class="LineNr"> 509 </span>    <span class="Normal">else</span>
-<span id="L510" class="LineNr"> 510 </span>      out &lt;&lt; curr<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
-<span id="L511" class="LineNr"> 511 </span>  <span class="Delimiter">}</span>
-<span id="L512" class="LineNr"> 512 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
-<span id="L513" class="LineNr"> 513 </span><span class="Delimiter">}</span>
-<span id="L514" class="LineNr"> 514 </span>
-<span id="L515" class="LineNr"> 515 </span><span class="Normal">void</span> ensure_all_concrete_types<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> recipe&amp; new_recipe<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L516" class="LineNr"> 516 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- ensure all concrete types in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L517" class="LineNr"> 517 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L518" class="LineNr"> 518 </span>    ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
-<span id="L519" class="LineNr"> 519 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L520" class="LineNr"> 520 </span>    ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
-<span id="L521" class="LineNr"> 521 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L522" class="LineNr"> 522 </span>    instruction&amp; inst = new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L523" class="LineNr"> 523 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
-<span id="L524" class="LineNr"> 524 </span>      ensure_all_concrete_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
-<span id="L525" class="LineNr"> 525 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
-<span id="L526" class="LineNr"> 526 </span>      ensure_all_concrete_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
-<span id="L527" class="LineNr"> 527 </span>  <span class="Delimiter">}</span>
-<span id="L528" class="LineNr"> 528 </span><span class="Delimiter">}</span>
-<span id="L529" class="LineNr"> 529 </span>
-<span id="L530" class="LineNr"> 530 </span><span class="Normal">void</span> ensure_all_concrete_types<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L531" class="LineNr"> 531 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type || contains_type_ingredient_name<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L532" class="LineNr"> 532 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to map a type to &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L533" class="LineNr"> 533 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;added_by_ensure_all_concrete_types&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// just to prevent crashes later</span>
-<span id="L534" class="LineNr"> 534 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L535" class="LineNr"> 535 </span>  <span class="Delimiter">}</span>
-<span id="L536" class="LineNr"> 536 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L537" class="LineNr"> 537 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to map a type to the unknown &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L538" class="LineNr"> 538 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L539" class="LineNr"> 539 </span>  <span class="Delimiter">}</span>
-<span id="L540" class="LineNr"> 540 </span><span class="Delimiter">}</span>
-<span id="L541" class="LineNr"> 541 </span>
-<span id="L542" class="LineNr"> 542 </span><span class="Delimiter">:(scenario shape_shifting_recipe_2)</span>
-<span id="L543" class="LineNr"> 543 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L544" class="LineNr"> 544 </span>  <span class="Constant">10</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span>
-<span id="L545" class="LineNr"> 545 </span>  <span class="Constant">11</span>:point<span class="Special"> &lt;- </span>foo <span class="Constant">10</span>:point
-<span id="L546" class="LineNr"> 546 </span>]
-<span id="L547" class="LineNr"> 547 </span><span class="Comment"># non-matching shape-shifting variant</span>
-<span id="L548" class="LineNr"> 548 </span><span class="muRecipe">def</span> foo a:_t<span class="Delimiter">,</span> b:_t<span class="muRecipe"> -&gt; </span>result:num [
-<span id="L549" class="LineNr"> 549 </span>  local-scope
-<span id="L550" class="LineNr"> 550 </span>  load-ingredients
-<span id="L551" class="LineNr"> 551 </span>  result<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L552" class="LineNr"> 552 </span>]
-<span id="L553" class="LineNr"> 553 </span><span class="Comment"># matching shape-shifting variant</span>
-<span id="L554" class="LineNr"> 554 </span><span class="muRecipe">def</span> foo a:_t<span class="muRecipe"> -&gt; </span>result:_t [
-<span id="L555" class="LineNr"> 555 </span>  local-scope
-<span id="L556" class="LineNr"> 556 </span>  load-ingredients
-<span id="L557" class="LineNr"> 557 </span>  result<span class="Special"> &lt;- </span>copy a
-<span id="L558" class="LineNr"> 558 </span>]
-<span id="L559" class="LineNr"> 559 </span><span class="traceContains">+mem: storing 14 in location 11</span>
-<span id="L560" class="LineNr"> 560 </span><span class="traceContains">+mem: storing 15 in location 12</span>
-<span id="L561" class="LineNr"> 561 </span>
-<span id="L562" class="LineNr"> 562 </span><span class="Delimiter">:(scenario shape_shifting_recipe_nonroot)</span>
-<span id="L563" class="LineNr"> 563 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L564" class="LineNr"> 564 </span>  <span class="Constant">10</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L565" class="LineNr"> 565 </span>  <span class="Constant">20</span>:point/<span class="Special">raw &lt;- </span>bar <span class="Constant">10</span>:foo:point
-<span id="L566" class="LineNr"> 566 </span>]
-<span id="L567" class="LineNr"> 567 </span><span class="Comment"># shape-shifting recipe with type ingredient following some other type</span>
-<span id="L568" class="LineNr"> 568 </span><span class="muRecipe">def</span> bar a:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
-<span id="L569" class="LineNr"> 569 </span>  local-scope
-<span id="L570" class="LineNr"> 570 </span>  load-ingredients
-<span id="L571" class="LineNr"> 571 </span>  result<span class="Special"> &lt;- </span>get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
-<span id="L572" class="LineNr"> 572 </span>]
-<span id="L573" class="LineNr"> 573 </span><span class="muData">container</span> foo:_t [
-<span id="L574" class="LineNr"> 574 </span>  <span class="Normal">x</span>:_t
-<span id="L575" class="LineNr"> 575 </span>  <span class="Normal">y</span>:num
-<span id="L576" class="LineNr"> 576 </span>]
-<span id="L577" class="LineNr"> 577 </span><span class="traceContains">+mem: storing 14 in location 20</span>
-<span id="L578" class="LineNr"> 578 </span><span class="traceContains">+mem: storing 15 in location 21</span>
-<span id="L579" class="LineNr"> 579 </span>
-<span id="L580" class="LineNr"> 580 </span><span class="Delimiter">:(scenario shape_shifting_recipe_nested)</span>
-<span id="L581" class="LineNr"> 581 </span><span class="muData">container</span> c:_a:_b [
-<span id="L582" class="LineNr"> 582 </span>  <span class="Normal">a</span>:_a
-<span id="L583" class="LineNr"> 583 </span>  <span class="Normal">b</span>:_b
-<span id="L584" class="LineNr"> 584 </span>]
-<span id="L585" class="LineNr"> 585 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L586" class="LineNr"> 586 </span>  <span class="Normal">s</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L587" class="LineNr"> 587 </span>  <span class="Delimiter">{</span>x: <span class="Delimiter">(</span>c <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> array character<span class="Delimiter">)</span> number<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>merge s<span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L588" class="LineNr"> 588 </span>  foo x
-<span id="L589" class="LineNr"> 589 </span>]
-<span id="L590" class="LineNr"> 590 </span><span class="muRecipe">def</span> foo x:c:_bar:_baz [
-<span id="L591" class="LineNr"> 591 </span>  local-scope
-<span id="L592" class="LineNr"> 592 </span>  load-ingredients
-<span id="L593" class="LineNr"> 593 </span>]
-<span id="L594" class="LineNr"> 594 </span><span class="Comment"># no errors</span>
-<span id="L595" class="LineNr"> 595 </span>
-<span id="L596" class="LineNr"> 596 </span><span class="Delimiter">:(scenario shape_shifting_recipe_type_deduction_ignores_offsets)</span>
-<span id="L597" class="LineNr"> 597 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L598" class="LineNr"> 598 </span>  <span class="Constant">10</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
-<span id="L599" class="LineNr"> 599 </span>  <span class="Constant">20</span>:point/<span class="Special">raw &lt;- </span>bar <span class="Constant">10</span>:foo:point
-<span id="L600" class="LineNr"> 600 </span>]
-<span id="L601" class="LineNr"> 601 </span><span class="muRecipe">def</span> bar a:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
-<span id="L602" class="LineNr"> 602 </span>  local-scope
-<span id="L603" class="LineNr"> 603 </span>  load-ingredients
-<span id="L604" class="LineNr"> 604 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
-<span id="L605" class="LineNr"> 605 </span>  result<span class="Special"> &lt;- </span>get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>  <span class="Comment"># shouldn't collide with other variable</span>
-<span id="L606" class="LineNr"> 606 </span>]
-<span id="L607" class="LineNr"> 607 </span><span class="muData">container</span> foo:_t [
-<span id="L608" class="LineNr"> 608 </span>  <span class="Normal">x</span>:_t
-<span id="L609" class="LineNr"> 609 </span>  <span class="Normal">y</span>:num
-<span id="L610" class="LineNr"> 610 </span>]
-<span id="L611" class="LineNr"> 611 </span><span class="traceContains">+mem: storing 14 in location 20</span>
-<span id="L612" class="LineNr"> 612 </span><span class="traceContains">+mem: storing 15 in location 21</span>
-<span id="L613" class="LineNr"> 613 </span>
-<span id="L614" class="LineNr"> 614 </span><span class="Delimiter">:(scenario shape_shifting_recipe_empty)</span>
-<span id="L615" class="LineNr"> 615 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L616" class="LineNr"> 616 </span>  foo <span class="Constant">1</span>
+<span id="L464" class="LineNr"> 464 </span><span class="Delimiter">}</span>
+<span id="L465" class="LineNr"> 465 </span>
+<span id="L466" class="LineNr"> 466 </span><span class="Normal">int</span> <a href='056shape_shifting_recipe.cc.html#L466'>type_ingredient_count_in_header</a><span class="Delimiter">(</span><a href='010vm.cc.html#L14'>recipe_ordinal</a> variant<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L467" class="LineNr"> 467 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> variant<span class="Delimiter">);</span>
+<span id="L468" class="LineNr"> 468 </span>  set&lt;string&gt; type_ingredients<span class="Delimiter">;</span>
+<span id="L469" class="LineNr"> 469 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L470" class="LineNr"> 470 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> type_ingredients<span class="Delimiter">);</span>
+<span id="L471" class="LineNr"> 471 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L472" class="LineNr"> 472 </span>    accumulate_type_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">,</span> type_ingredients<span class="Delimiter">);</span>
+<span id="L473" class="LineNr"> 473 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>type_ingredients<span class="Delimiter">);</span>
+<span id="L474" class="LineNr"> 474 </span><span class="Delimiter">}</span>
+<span id="L475" class="LineNr"> 475 </span>
+<span id="L476" class="LineNr"> 476 </span><span class="Normal">void</span> accumulate_type_ingredients<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">,</span> set&lt;string&gt;&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L477" class="LineNr"> 477 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L478" class="LineNr"> 478 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_type_ingredient_name<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">))</span> out<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">);</span>
+<span id="L479" class="LineNr"> 479 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L480" class="LineNr"> 480 </span>  accumulate_type_ingredients<span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L481" class="LineNr"> 481 </span><span class="Delimiter">}</span>
+<span id="L482" class="LineNr"> 482 </span>
+<span id="L483" class="LineNr"> 483 </span>type_tree* <a href='056shape_shifting_recipe.cc.html#L483'>parse_type_tree</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L484" class="LineNr"> 484 </span>  string_tree* s2 = parse_string_tree<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L485" class="LineNr"> 485 </span>  type_tree* result = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span>s2<span class="Delimiter">);</span>
+<span id="L486" class="LineNr"> 486 </span>  <span class="Normal">delete</span> s2<span class="Delimiter">;</span>
+<span id="L487" class="LineNr"> 487 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L488" class="LineNr"> 488 </span><span class="Delimiter">}</span>
+<span id="L489" class="LineNr"> 489 </span>
+<span id="L490" class="LineNr"> 490 </span>string inspect<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L491" class="LineNr"> 491 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L492" class="LineNr"> 492 </span>  <a href='056shape_shifting_recipe.cc.html#L496'>dump_inspect</a><span class="Delimiter">(</span>x<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L493" class="LineNr"> 493 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L494" class="LineNr"> 494 </span><span class="Delimiter">}</span>
+<span id="L495" class="LineNr"> 495 </span>
+<span id="L496" class="LineNr"> 496 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L496'>dump_inspect</a><span class="Delimiter">(</span><span class="Normal">const</span> type_tree* x<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L497" class="LineNr"> 497 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">-&gt;</span>left &amp;&amp; !x<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L498" class="LineNr"> 498 </span>    out &lt;&lt; x<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L499" class="LineNr"> 499 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L500" class="LineNr"> 500 </span>  <span class="Delimiter">}</span>
+<span id="L501" class="LineNr"> 501 </span>  out &lt;&lt; <span class="Constant">'('</span><span class="Delimiter">;</span>
+<span id="L502" class="LineNr"> 502 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">const</span> type_tree* curr = x<span class="Delimiter">;</span>  curr<span class="Delimiter">;</span>  curr = curr<span class="Delimiter">-&gt;</span>right<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L503" class="LineNr"> 503 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr != x<span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L504" class="LineNr"> 504 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">)</span>
+<span id="L505" class="LineNr"> 505 </span>      <a href='056shape_shifting_recipe.cc.html#L496'>dump_inspect</a><span class="Delimiter">(</span>curr<span class="Delimiter">-&gt;</span>left<span class="Delimiter">,</span> out<span class="Delimiter">);</span>
+<span id="L506" class="LineNr"> 506 </span>    <span class="Normal">else</span>
+<span id="L507" class="LineNr"> 507 </span>      out &lt;&lt; curr<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
+<span id="L508" class="LineNr"> 508 </span>  <span class="Delimiter">}</span>
+<span id="L509" class="LineNr"> 509 </span>  out &lt;&lt; <span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L510" class="LineNr"> 510 </span><span class="Delimiter">}</span>
+<span id="L511" class="LineNr"> 511 </span>
+<span id="L512" class="LineNr"> 512 </span><span class="Normal">void</span> ensure_all_concrete_types<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> recipe&amp; new_recipe<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L513" class="LineNr"> 513 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- ensure all concrete types in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; new_recipe<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L514" class="LineNr"> 514 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L515" class="LineNr"> 515 </span>    ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
+<span id="L516" class="LineNr"> 516 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L517" class="LineNr"> 517 </span>    ensure_all_concrete_types<span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
+<span id="L518" class="LineNr"> 518 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L519" class="LineNr"> 519 </span>    instruction&amp; inst = new_recipe<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L520" class="LineNr"> 520 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
+<span id="L521" class="LineNr"> 521 </span>      ensure_all_concrete_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
+<span id="L522" class="LineNr"> 522 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
+<span id="L523" class="LineNr"> 523 </span>      ensure_all_concrete_types<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> exemplar<span class="Delimiter">);</span>
+<span id="L524" class="LineNr"> 524 </span>  <span class="Delimiter">}</span>
+<span id="L525" class="LineNr"> 525 </span><span class="Delimiter">}</span>
+<span id="L526" class="LineNr"> 526 </span>
+<span id="L527" class="LineNr"> 527 </span><span class="Normal">void</span> ensure_all_concrete_types<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; exemplar<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L528" class="LineNr"> 528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type || contains_type_ingredient_name<span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L529" class="LineNr"> 529 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to map a type to &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L530" class="LineNr"> 530 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;added_by_ensure_all_concrete_types&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>  <span class="Comment">// just to prevent crashes later</span>
+<span id="L531" class="LineNr"> 531 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L532" class="LineNr"> 532 </span>  <span class="Delimiter">}</span>
+<span id="L533" class="LineNr"> 533 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == -<span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L534" class="LineNr"> 534 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>exemplar<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;failed to map a type to the unknown &quot;</span> &lt;&lt; x<span class="Delimiter">.</span>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L535" class="LineNr"> 535 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L536" class="LineNr"> 536 </span>  <span class="Delimiter">}</span>
+<span id="L537" class="LineNr"> 537 </span><span class="Delimiter">}</span>
+<span id="L538" class="LineNr"> 538 </span>
+<span id="L539" class="LineNr"> 539 </span><span class="Delimiter">:(scenario shape_shifting_recipe_2)</span>
+<span id="L540" class="LineNr"> 540 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L541" class="LineNr"> 541 </span>  <span class="Constant">10</span>:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span>
+<span id="L542" class="LineNr"> 542 </span>  <span class="Constant">12</span>:point<span class="Special"> &lt;- </span>foo <span class="Constant">10</span>:point
+<span id="L543" class="LineNr"> 543 </span>]
+<span id="L544" class="LineNr"> 544 </span><span class="Comment"># non-matching shape-shifting variant</span>
+<span id="L545" class="LineNr"> 545 </span><span class="muRecipe">def</span> foo a:_t<span class="Delimiter">,</span> b:_t<span class="muRecipe"> -&gt; </span>result:num [
+<span id="L546" class="LineNr"> 546 </span>  local-scope
+<span id="L547" class="LineNr"> 547 </span>  load-ingredients
+<span id="L548" class="LineNr"> 548 </span>  result<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L549" class="LineNr"> 549 </span>]
+<span id="L550" class="LineNr"> 550 </span><span class="Comment"># matching shape-shifting variant</span>
+<span id="L551" class="LineNr"> 551 </span><span class="muRecipe">def</span> foo a:_t<span class="muRecipe"> -&gt; </span>result:_t [
+<span id="L552" class="LineNr"> 552 </span>  local-scope
+<span id="L553" class="LineNr"> 553 </span>  load-ingredients
+<span id="L554" class="LineNr"> 554 </span>  result<span class="Special"> &lt;- </span>copy a
+<span id="L555" class="LineNr"> 555 </span>]
+<span id="L556" class="LineNr"> 556 </span><span class="traceContains">+mem: storing 14 in location 12</span>
+<span id="L557" class="LineNr"> 557 </span><span class="traceContains">+mem: storing 15 in location 13</span>
+<span id="L558" class="LineNr"> 558 </span>
+<span id="L559" class="LineNr"> 559 </span><span class="Delimiter">:(scenario shape_shifting_recipe_nonroot)</span>
+<span id="L560" class="LineNr"> 560 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L561" class="LineNr"> 561 </span>  <span class="Constant">10</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L562" class="LineNr"> 562 </span>  <span class="Constant">20</span>:point<span class="Special"> &lt;- </span>bar <span class="Constant">10</span>:foo:point
+<span id="L563" class="LineNr"> 563 </span>]
+<span id="L564" class="LineNr"> 564 </span><span class="Comment"># shape-shifting recipe with type ingredient following some other type</span>
+<span id="L565" class="LineNr"> 565 </span><span class="muRecipe">def</span> bar a:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
+<span id="L566" class="LineNr"> 566 </span>  local-scope
+<span id="L567" class="LineNr"> 567 </span>  load-ingredients
+<span id="L568" class="LineNr"> 568 </span>  result<span class="Special"> &lt;- </span>get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
+<span id="L569" class="LineNr"> 569 </span>]
+<span id="L570" class="LineNr"> 570 </span><span class="muData">container</span> foo:_t [
+<span id="L571" class="LineNr"> 571 </span>  <span class="Normal">x</span>:_t
+<span id="L572" class="LineNr"> 572 </span>  <span class="Normal">y</span>:num
+<span id="L573" class="LineNr"> 573 </span>]
+<span id="L574" class="LineNr"> 574 </span><span class="traceContains">+mem: storing 14 in location 20</span>
+<span id="L575" class="LineNr"> 575 </span><span class="traceContains">+mem: storing 15 in location 21</span>
+<span id="L576" class="LineNr"> 576 </span>
+<span id="L577" class="LineNr"> 577 </span><span class="Delimiter">:(scenario shape_shifting_recipe_nested)</span>
+<span id="L578" class="LineNr"> 578 </span><span class="muData">container</span> c:_a:_b [
+<span id="L579" class="LineNr"> 579 </span>  <span class="Normal">a</span>:_a
+<span id="L580" class="LineNr"> 580 </span>  <span class="Normal">b</span>:_b
+<span id="L581" class="LineNr"> 581 </span>]
+<span id="L582" class="LineNr"> 582 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L583" class="LineNr"> 583 </span>  <span class="Normal">s</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L584" class="LineNr"> 584 </span>  <span class="Delimiter">{</span>x: <span class="Delimiter">(</span>c <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> array character<span class="Delimiter">)</span> number<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>merge s<span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L585" class="LineNr"> 585 </span>  foo x
+<span id="L586" class="LineNr"> 586 </span>]
+<span id="L587" class="LineNr"> 587 </span><span class="muRecipe">def</span> foo x:c:_bar:_baz [
+<span id="L588" class="LineNr"> 588 </span>  local-scope
+<span id="L589" class="LineNr"> 589 </span>  load-ingredients
+<span id="L590" class="LineNr"> 590 </span>]
+<span id="L591" class="LineNr"> 591 </span><span class="Comment"># no errors</span>
+<span id="L592" class="LineNr"> 592 </span>
+<span id="L593" class="LineNr"> 593 </span><span class="Delimiter">:(scenario shape_shifting_recipe_type_deduction_ignores_offsets)</span>
+<span id="L594" class="LineNr"> 594 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L595" class="LineNr"> 595 </span>  <span class="Constant">10</span>:foo:point<span class="Special"> &lt;- </span>merge <span class="Constant">14</span><span class="Delimiter">,</span> <span class="Constant">15</span><span class="Delimiter">,</span> <span class="Constant">16</span>
+<span id="L596" class="LineNr"> 596 </span>  <span class="Constant">20</span>:point<span class="Special"> &lt;- </span>bar <span class="Constant">10</span>:foo:point
+<span id="L597" class="LineNr"> 597 </span>]
+<span id="L598" class="LineNr"> 598 </span><span class="muRecipe">def</span> bar a:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
+<span id="L599" class="LineNr"> 599 </span>  local-scope
+<span id="L600" class="LineNr"> 600 </span>  load-ingredients
+<span id="L601" class="LineNr"> 601 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>
+<span id="L602" class="LineNr"> 602 </span>  result<span class="Special"> &lt;- </span>get a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>  <span class="Comment"># shouldn't collide with other variable</span>
+<span id="L603" class="LineNr"> 603 </span>]
+<span id="L604" class="LineNr"> 604 </span><span class="muData">container</span> foo:_t [
+<span id="L605" class="LineNr"> 605 </span>  <span class="Normal">x</span>:_t
+<span id="L606" class="LineNr"> 606 </span>  <span class="Normal">y</span>:num
+<span id="L607" class="LineNr"> 607 </span>]
+<span id="L608" class="LineNr"> 608 </span><span class="traceContains">+mem: storing 14 in location 20</span>
+<span id="L609" class="LineNr"> 609 </span><span class="traceContains">+mem: storing 15 in location 21</span>
+<span id="L610" class="LineNr"> 610 </span>
+<span id="L611" class="LineNr"> 611 </span><span class="Delimiter">:(scenario shape_shifting_recipe_empty)</span>
+<span id="L612" class="LineNr"> 612 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L613" class="LineNr"> 613 </span>  foo <span class="Constant">1</span>
+<span id="L614" class="LineNr"> 614 </span>]
+<span id="L615" class="LineNr"> 615 </span><span class="Comment"># shape-shifting recipe with no body</span>
+<span id="L616" class="LineNr"> 616 </span><span class="muRecipe">def</span> foo a:_t [
 <span id="L617" class="LineNr"> 617 </span>]
-<span id="L618" class="LineNr"> 618 </span><span class="Comment"># shape-shifting recipe with no body</span>
-<span id="L619" class="LineNr"> 619 </span><span class="muRecipe">def</span> foo a:_t [
-<span id="L620" class="LineNr"> 620 </span>]
-<span id="L621" class="LineNr"> 621 </span><span class="Comment"># shouldn't crash</span>
-<span id="L622" class="LineNr"> 622 </span>
-<span id="L623" class="LineNr"> 623 </span><span class="Delimiter">:(scenario shape_shifting_recipe_handles_shape_shifting_new_ingredient)</span>
-<span id="L624" class="LineNr"> 624 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L625" class="LineNr"> 625 </span>  <span class="Constant">1</span>:&amp;:foo:point<span class="Special"> &lt;- </span>bar <span class="Constant">3</span>
-<span id="L626" class="LineNr"> 626 </span>  <span class="Constant">11</span>:foo:point<span class="Special"> &lt;- </span>copy *<span class="Constant">1</span>:&amp;:foo:point
-<span id="L627" class="LineNr"> 627 </span>]
-<span id="L628" class="LineNr"> 628 </span><span class="muData">container</span> foo:_t [
-<span id="L629" class="LineNr"> 629 </span>  <span class="Normal">x</span>:_t
-<span id="L630" class="LineNr"> 630 </span>  <span class="Normal">y</span>:num
-<span id="L631" class="LineNr"> 631 </span>]
-<span id="L632" class="LineNr"> 632 </span><span class="muRecipe">def</span> bar x:num<span class="muRecipe"> -&gt; </span>result:&amp;:foo:_t [
-<span id="L633" class="LineNr"> 633 </span>  local-scope
-<span id="L634" class="LineNr"> 634 </span>  load-ingredients
-<span id="L635" class="LineNr"> 635 </span>  <span class="Comment"># new refers to _t in its ingredient *value*</span>
-<span id="L636" class="LineNr"> 636 </span>  result<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo _t<span class="Delimiter">)</span> : type<span class="Delimiter">}</span>
-<span id="L637" class="LineNr"> 637 </span>]
-<span id="L638" class="LineNr"> 638 </span><span class="traceContains">+mem: storing 0 in location 11</span>
-<span id="L639" class="LineNr"> 639 </span><span class="traceContains">+mem: storing 0 in location 12</span>
-<span id="L640" class="LineNr"> 640 </span><span class="traceContains">+mem: storing 0 in location 13</span>
-<span id="L641" class="LineNr"> 641 </span>
-<span id="L642" class="LineNr"> 642 </span><span class="Delimiter">:(scenario shape_shifting_recipe_handles_shape_shifting_new_ingredient_2)</span>
-<span id="L643" class="LineNr"> 643 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L644" class="LineNr"> 644 </span>  <span class="Constant">1</span>:&amp;:foo:point<span class="Special"> &lt;- </span>bar <span class="Constant">3</span>
-<span id="L645" class="LineNr"> 645 </span>  <span class="Constant">11</span>:foo:point<span class="Special"> &lt;- </span>copy *<span class="Constant">1</span>:&amp;:foo:point
-<span id="L646" class="LineNr"> 646 </span>]
-<span id="L647" class="LineNr"> 647 </span><span class="muRecipe">def</span> bar x:num<span class="muRecipe"> -&gt; </span>result:&amp;:foo:_t [
-<span id="L648" class="LineNr"> 648 </span>  local-scope
-<span id="L649" class="LineNr"> 649 </span>  load-ingredients
-<span id="L650" class="LineNr"> 650 </span>  <span class="Comment"># new refers to _t in its ingredient *value*</span>
-<span id="L651" class="LineNr"> 651 </span>  result<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo _t<span class="Delimiter">)</span> : type<span class="Delimiter">}</span>
-<span id="L652" class="LineNr"> 652 </span>]
-<span id="L653" class="LineNr"> 653 </span><span class="Comment"># container defined after use</span>
-<span id="L654" class="LineNr"> 654 </span><span class="muData">container</span> foo:_t [
-<span id="L655" class="LineNr"> 655 </span>  <span class="Normal">x</span>:_t
-<span id="L656" class="LineNr"> 656 </span>  <span class="Normal">y</span>:num
-<span id="L657" class="LineNr"> 657 </span>]
-<span id="L658" class="LineNr"> 658 </span><span class="traceContains">+mem: storing 0 in location 11</span>
-<span id="L659" class="LineNr"> 659 </span><span class="traceContains">+mem: storing 0 in location 12</span>
-<span id="L660" class="LineNr"> 660 </span><span class="traceContains">+mem: storing 0 in location 13</span>
-<span id="L661" class="LineNr"> 661 </span>
-<span id="L662" class="LineNr"> 662 </span><span class="Delimiter">:(scenario shape_shifting_recipe_called_with_dummy)</span>
-<span id="L663" class="LineNr"> 663 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L664" class="LineNr"> 664 </span>  _<span class="Special"> &lt;- </span>bar <span class="Constant">34</span>
-<span id="L665" class="LineNr"> 665 </span>]
-<span id="L666" class="LineNr"> 666 </span><span class="muRecipe">def</span> bar x:_t<span class="muRecipe"> -&gt; </span>result:&amp;:_t [
-<span id="L667" class="LineNr"> 667 </span>  local-scope
-<span id="L668" class="LineNr"> 668 </span>  load-ingredients
-<span id="L669" class="LineNr"> 669 </span>  result<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L670" class="LineNr"> 670 </span>]
-<span id="L671" class="LineNr"> 671 </span>$error: <span class="Constant">0</span>
-<span id="L672" class="LineNr"> 672 </span>
-<span id="L673" class="LineNr"> 673 </span><span class="Delimiter">:(code)</span>
-<span id="L674" class="LineNr"> 674 </span><span class="Comment">// this one needs a little more fine-grained control</span>
-<span id="L675" class="LineNr"> 675 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L675'>test_shape_shifting_new_ingredient_does_not_pollute_global_namespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L676" class="LineNr"> 676 </span>  <span class="Comment">// if you specialize a shape-shifting recipe that allocates a type-ingredient..</span>
-<span id="L677" class="LineNr"> 677 </span>  <a href='012transform.cc.html#L99'>transform</a><span class="Delimiter">(</span><span class="Constant">&quot;def barz x:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L678" class="LineNr"> 678 </span>            <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L679" class="LineNr"> 679 </span>            <span class="Constant">&quot;  load-ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L680" class="LineNr"> 680 </span>            <span class="Constant">&quot;  y:&amp;:num &lt;- new _elem:type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L681" class="LineNr"> 681 </span>            <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L682" class="LineNr"> 682 </span>            <span class="Constant">&quot;def fooz [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L683" class="LineNr"> 683 </span>            <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L684" class="LineNr"> 684 </span>            <span class="Constant">&quot;  barz 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L685" class="LineNr"> 685 </span>            <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L686" class="LineNr"> 686 </span>  <span class="Comment">// ..and if you then try to load a new shape-shifting container with that</span>
-<span id="L687" class="LineNr"> 687 </span>  <span class="Comment">// type-ingredient</span>
-<span id="L688" class="LineNr"> 688 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L689" class="LineNr"> 689 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L690" class="LineNr"> 690 </span>      <span class="Constant">&quot;  y:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L691" class="LineNr"> 691 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L692" class="LineNr"> 692 </span>  <span class="Comment">// then it should work as usual</span>
-<span id="L693" class="LineNr"> 693 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
-<span id="L694" class="LineNr"> 694 </span>  reagent element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L695" class="LineNr"> 695 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;x&quot;</span><span class="Delimiter">);</span>
-<span id="L696" class="LineNr"> 696 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">);</span>
-<span id="L697" class="LineNr"> 697 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
-<span id="L698" class="LineNr"> 698 </span><span class="Delimiter">}</span>
-<span id="L699" class="LineNr"> 699 </span>
-<span id="L700" class="LineNr"> 700 </span><span class="Comment">//: specializing a type ingredient with a compound type</span>
-<span id="L701" class="LineNr"> 701 </span><span class="Delimiter">:(scenario shape_shifting_recipe_supports_compound_types)</span>
-<span id="L702" class="LineNr"> 702 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L703" class="LineNr"> 703 </span>  <span class="Constant">1</span>:&amp;:point<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">point:type</span>
-<span id="L704" class="LineNr"> 704 </span>  *<span class="Constant">1</span>:&amp;:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *<span class="Constant">1</span>:&amp;:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L705" class="LineNr"> 705 </span>  <span class="Constant">3</span>:&amp;:point<span class="Special"> &lt;- </span>bar <span class="Constant">1</span>:&amp;:point  <span class="Comment"># specialize _t to address:point</span>
-<span id="L706" class="LineNr"> 706 </span>  <span class="Constant">4</span>:point<span class="Special"> &lt;- </span>copy *<span class="Constant">3</span>:&amp;:point
-<span id="L707" class="LineNr"> 707 </span>]
-<span id="L708" class="LineNr"> 708 </span><span class="muRecipe">def</span> bar a:_t<span class="muRecipe"> -&gt; </span>result:_t [
-<span id="L709" class="LineNr"> 709 </span>  local-scope
-<span id="L710" class="LineNr"> 710 </span>  load-ingredients
-<span id="L711" class="LineNr"> 711 </span>  result<span class="Special"> &lt;- </span>copy a
-<span id="L712" class="LineNr"> 712 </span>]
-<span id="L713" class="LineNr"> 713 </span><span class="traceContains">+mem: storing 34 in location 5</span>
-<span id="L714" class="LineNr"> 714 </span>
-<span id="L715" class="LineNr"> 715 </span><span class="Comment">//: specializing a type ingredient with a compound type -- while *inside* another compound type</span>
-<span id="L716" class="LineNr"> 716 </span><span class="Delimiter">:(scenario shape_shifting_recipe_supports_compound_types_2)</span>
-<span id="L717" class="LineNr"> 717 </span><span class="muData">container</span> foo:_t [
-<span id="L718" class="LineNr"> 718 </span>  <span class="Normal">value</span>:_t
-<span id="L719" class="LineNr"> 719 </span>]
-<span id="L720" class="LineNr"> 720 </span><span class="muRecipe">def</span> bar x:&amp;:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
-<span id="L721" class="LineNr"> 721 </span>  local-scope
-<span id="L722" class="LineNr"> 722 </span>  load-ingredients
-<span id="L723" class="LineNr"> 723 </span>  result<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span>
-<span id="L724" class="LineNr"> 724 </span>]
-<span id="L725" class="LineNr"> 725 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L726" class="LineNr"> 726 </span>  <span class="Constant">1</span>:&amp;:foo:&amp;:point<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo <a href='043space.cc.html#L80'>address</a> point<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
-<span id="L727" class="LineNr"> 727 </span>  <span class="Constant">2</span>:&amp;:point<span class="Special"> &lt;- </span>bar <span class="Constant">1</span>:&amp;:foo:&amp;:point
-<span id="L728" class="LineNr"> 728 </span>]
-<span id="L729" class="LineNr"> 729 </span><span class="Comment"># no errors; call to 'bar' successfully specialized</span>
-<span id="L730" class="LineNr"> 730 </span>
-<span id="L731" class="LineNr"> 731 </span><span class="Delimiter">:(scenario shape_shifting_recipe_error)</span>
-<span id="L732" class="LineNr"> 732 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L733" class="LineNr"> 733 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L734" class="LineNr"> 734 </span>  <span class="Normal">a</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
-<span id="L735" class="LineNr"> 735 </span>  <span class="Normal">b</span>:&amp;:num<span class="Special"> &lt;- </span>foo a
-<span id="L736" class="LineNr"> 736 </span>]
-<span id="L737" class="LineNr"> 737 </span><span class="muRecipe">def</span> foo a:_t<span class="muRecipe"> -&gt; </span>b:_t [
-<span id="L738" class="LineNr"> 738 </span>  load-ingredients
-<span id="L739" class="LineNr"> 739 </span>  b<span class="Special"> &lt;- </span>copy a
-<span id="L740" class="LineNr"> 740 </span>]
-<span id="L741" class="LineNr"> 741 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: no call found for 'b:&amp;:num &lt;- foo a'</span>
-<span id="L742" class="LineNr"> 742 </span>
-<span id="L743" class="LineNr"> 743 </span><span class="Delimiter">:(scenario specialize_inside_recipe_without_header)</span>
-<span id="L744" class="LineNr"> 744 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L745" class="LineNr"> 745 </span>  foo <span class="Constant">3</span>
-<span id="L746" class="LineNr"> 746 </span>]
-<span id="L747" class="LineNr"> 747 </span><span class="muRecipe">def</span> foo [
-<span id="L748" class="LineNr"> 748 </span>  local-scope
-<span id="L749" class="LineNr"> 749 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># ensure no header</span>
-<span id="L750" class="LineNr"> 750 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>bar x  <span class="Comment"># call a shape-shifting recipe</span>
-<span id="L751" class="LineNr"> 751 </span>]
-<span id="L752" class="LineNr"> 752 </span><span class="muRecipe">def</span> bar x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
-<span id="L753" class="LineNr"> 753 </span>  local-scope
-<span id="L754" class="LineNr"> 754 </span>  load-ingredients
-<span id="L755" class="LineNr"> 755 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L756" class="LineNr"> 756 </span>]
-<span id="L757" class="LineNr"> 757 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L758" class="LineNr"> 758 </span>
-<span id="L759" class="LineNr"> 759 </span><span class="Delimiter">:(scenario specialize_with_literal)</span>
-<span id="L760" class="LineNr"> 760 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L761" class="LineNr"> 761 </span>  local-scope
-<span id="L762" class="LineNr"> 762 </span>  <span class="Comment"># permit literal to map to number</span>
-<span id="L763" class="LineNr"> 763 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">3</span>
-<span id="L764" class="LineNr"> 764 </span>]
-<span id="L765" class="LineNr"> 765 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
-<span id="L766" class="LineNr"> 766 </span>  local-scope
-<span id="L767" class="LineNr"> 767 </span>  load-ingredients
-<span id="L768" class="LineNr"> 768 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L769" class="LineNr"> 769 </span>]
-<span id="L770" class="LineNr"> 770 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L771" class="LineNr"> 771 </span>
-<span id="L772" class="LineNr"> 772 </span><span class="Delimiter">:(scenario specialize_with_literal_2)</span>
-<span id="L773" class="LineNr"> 773 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L774" class="LineNr"> 774 </span>  local-scope
-<span id="L775" class="LineNr"> 775 </span>  <span class="Comment"># permit literal to map to character</span>
-<span id="L776" class="LineNr"> 776 </span>  <span class="Constant">1</span>:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>foo <span class="Constant">3</span>
-<span id="L777" class="LineNr"> 777 </span>]
-<span id="L778" class="LineNr"> 778 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
-<span id="L779" class="LineNr"> 779 </span>  local-scope
-<span id="L780" class="LineNr"> 780 </span>  load-ingredients
-<span id="L781" class="LineNr"> 781 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L782" class="LineNr"> 782 </span>]
-<span id="L783" class="LineNr"> 783 </span><span class="traceContains">+mem: storing 4 in location 1</span>
-<span id="L784" class="LineNr"> 784 </span>
-<span id="L785" class="LineNr"> 785 </span><span class="Delimiter">:(scenario specialize_with_literal_3)</span>
-<span id="L786" class="LineNr"> 786 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L787" class="LineNr"> 787 </span>  local-scope
-<span id="L788" class="LineNr"> 788 </span>  <span class="Comment"># permit '0' to map to address to shape-shifting type-ingredient</span>
-<span id="L789" class="LineNr"> 789 </span>  <span class="Constant">1</span>:&amp;:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>foo <span class="Constant">0</span>
-<span id="L790" class="LineNr"> 790 </span>]
-<span id="L791" class="LineNr"> 791 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:&amp;:_elem [
-<span id="L792" class="LineNr"> 792 </span>  local-scope
-<span id="L793" class="LineNr"> 793 </span>  load-ingredients
-<span id="L794" class="LineNr"> 794 </span>  y<span class="Special"> &lt;- </span>copy x
-<span id="L795" class="LineNr"> 795 </span>]
-<span id="L796" class="LineNr"> 796 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L797" class="LineNr"> 797 </span>$error: <span class="Constant">0</span>
-<span id="L798" class="LineNr"> 798 </span>
-<span id="L799" class="LineNr"> 799 </span><span class="Delimiter">:(scenario specialize_with_literal_4)</span>
-<span id="L800" class="LineNr"> 800 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L801" class="LineNr"> 801 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L802" class="LineNr"> 802 </span>  local-scope
-<span id="L803" class="LineNr"> 803 </span>  <span class="Comment"># ambiguous call: what's the type of its ingredient?!</span>
-<span id="L804" class="LineNr"> 804 </span>  foo <span class="Constant">0</span>
-<span id="L805" class="LineNr"> 805 </span>]
-<span id="L806" class="LineNr"> 806 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:&amp;:_elem [
-<span id="L807" class="LineNr"> 807 </span>  local-scope
-<span id="L808" class="LineNr"> 808 </span>  load-ingredients
-<span id="L809" class="LineNr"> 809 </span>  y<span class="Special"> &lt;- </span>copy x
-<span id="L810" class="LineNr"> 810 </span>]
-<span id="L811" class="LineNr"> 811 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L32'>instruction</a> 'foo' has no valid specialization</span>
-<span id="L812" class="LineNr"> 812 </span>
-<span id="L813" class="LineNr"> 813 </span><span class="Delimiter">:(scenario specialize_with_literal_5)</span>
-<span id="L814" class="LineNr"> 814 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L815" class="LineNr"> 815 </span>  foo <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>  <span class="Comment"># recipe mapping two variables to literals</span>
-<span id="L816" class="LineNr"> 816 </span>]
-<span id="L817" class="LineNr"> 817 </span><span class="muRecipe">def</span> foo x:_elem<span class="Delimiter">,</span> y:_elem [
-<span id="L818" class="LineNr"> 818 </span>  local-scope
-<span id="L819" class="LineNr"> 819 </span>  load-ingredients
-<span id="L820" class="LineNr"> 820 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>add x<span class="Delimiter">,</span> y
-<span id="L821" class="LineNr"> 821 </span>]
-<span id="L822" class="LineNr"> 822 </span><span class="traceContains">+mem: storing 7 in location 1</span>
-<span id="L823" class="LineNr"> 823 </span>
-<span id="L824" class="LineNr"> 824 </span><span class="Delimiter">:(scenario multiple_shape_shifting_variants)</span>
-<span id="L825" class="LineNr"> 825 </span><span class="Comment"># try to call two different shape-shifting recipes with the same name</span>
-<span id="L826" class="LineNr"> 826 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L827" class="LineNr"> 827 </span>  <span class="Normal">e1</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
-<span id="L828" class="LineNr"> 828 </span>  <span class="Normal">e2</span>:d2:num<span class="Special"> &lt;- </span>merge <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">5</span>
-<span id="L829" class="LineNr"> 829 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo e1
-<span id="L830" class="LineNr"> 830 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>foo e2
-<span id="L831" class="LineNr"> 831 </span>]
-<span id="L832" class="LineNr"> 832 </span><span class="Comment"># the two shape-shifting definitions</span>
-<span id="L833" class="LineNr"> 833 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L834" class="LineNr"> 834 </span>  local-scope
-<span id="L835" class="LineNr"> 835 </span>  load-ingredients
-<span id="L836" class="LineNr"> 836 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L837" class="LineNr"> 837 </span>]
-<span id="L838" class="LineNr"> 838 </span><span class="muRecipe">def</span> foo a:d2:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L839" class="LineNr"> 839 </span>  local-scope
-<span id="L840" class="LineNr"> 840 </span>  load-ingredients
-<span id="L841" class="LineNr"> 841 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L842" class="LineNr"> 842 </span>]
-<span id="L843" class="LineNr"> 843 </span><span class="Comment"># the shape-shifting containers they use</span>
-<span id="L844" class="LineNr"> 844 </span><span class="muData">container</span> d1:_elem [
-<span id="L845" class="LineNr"> 845 </span>  <span class="Normal">x</span>:_elem
-<span id="L846" class="LineNr"> 846 </span>]
-<span id="L847" class="LineNr"> 847 </span><span class="muData">container</span> d2:_elem [
-<span id="L848" class="LineNr"> 848 </span>  <span class="Normal">x</span>:num
-<span id="L849" class="LineNr"> 849 </span>  <span class="Normal">y</span>:_elem
-<span id="L850" class="LineNr"> 850 </span>]
-<span id="L851" class="LineNr"> 851 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L852" class="LineNr"> 852 </span><span class="traceContains">+mem: storing 35 in location 2</span>
-<span id="L853" class="LineNr"> 853 </span>
-<span id="L854" class="LineNr"> 854 </span><span class="Delimiter">:(scenario multiple_shape_shifting_variants_2)</span>
-<span id="L855" class="LineNr"> 855 </span><span class="Comment"># static dispatch between shape-shifting variants, _including pointer lookups_</span>
-<span id="L856" class="LineNr"> 856 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L857" class="LineNr"> 857 </span>  <span class="Normal">e1</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
-<span id="L858" class="LineNr"> 858 </span>  <span class="Normal">e2</span>:&amp;:d2:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>d2 number<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
-<span id="L859" class="LineNr"> 859 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo e1
-<span id="L860" class="LineNr"> 860 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>foo *e2  <span class="Comment"># different from previous scenario</span>
-<span id="L861" class="LineNr"> 861 </span>]
-<span id="L862" class="LineNr"> 862 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L863" class="LineNr"> 863 </span>  local-scope
-<span id="L864" class="LineNr"> 864 </span>  load-ingredients
-<span id="L865" class="LineNr"> 865 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L866" class="LineNr"> 866 </span>]
-<span id="L867" class="LineNr"> 867 </span><span class="muRecipe">def</span> foo a:d2:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L868" class="LineNr"> 868 </span>  local-scope
-<span id="L869" class="LineNr"> 869 </span>  load-ingredients
-<span id="L870" class="LineNr"> 870 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L618" class="LineNr"> 618 </span><span class="Comment"># shouldn't crash</span>
+<span id="L619" class="LineNr"> 619 </span>
+<span id="L620" class="LineNr"> 620 </span><span class="Delimiter">:(scenario shape_shifting_recipe_handles_shape_shifting_new_ingredient)</span>
+<span id="L621" class="LineNr"> 621 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L622" class="LineNr"> 622 </span>  <span class="Constant">1</span>:&amp;:foo:point<span class="Special"> &lt;- </span>bar <span class="Constant">3</span>
+<span id="L623" class="LineNr"> 623 </span>  <span class="Constant">11</span>:foo:point<span class="Special"> &lt;- </span>copy *<span class="Constant">1</span>:&amp;:foo:point
+<span id="L624" class="LineNr"> 624 </span>]
+<span id="L625" class="LineNr"> 625 </span><span class="muData">container</span> foo:_t [
+<span id="L626" class="LineNr"> 626 </span>  <span class="Normal">x</span>:_t
+<span id="L627" class="LineNr"> 627 </span>  <span class="Normal">y</span>:num
+<span id="L628" class="LineNr"> 628 </span>]
+<span id="L629" class="LineNr"> 629 </span><span class="muRecipe">def</span> bar x:num<span class="muRecipe"> -&gt; </span>result:&amp;:foo:_t [
+<span id="L630" class="LineNr"> 630 </span>  local-scope
+<span id="L631" class="LineNr"> 631 </span>  load-ingredients
+<span id="L632" class="LineNr"> 632 </span>  <span class="Comment"># new refers to _t in its ingredient *value*</span>
+<span id="L633" class="LineNr"> 633 </span>  result<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo _t<span class="Delimiter">)</span> : type<span class="Delimiter">}</span>
+<span id="L634" class="LineNr"> 634 </span>]
+<span id="L635" class="LineNr"> 635 </span><span class="traceContains">+mem: storing 0 in location 11</span>
+<span id="L636" class="LineNr"> 636 </span><span class="traceContains">+mem: storing 0 in location 12</span>
+<span id="L637" class="LineNr"> 637 </span><span class="traceContains">+mem: storing 0 in location 13</span>
+<span id="L638" class="LineNr"> 638 </span>
+<span id="L639" class="LineNr"> 639 </span><span class="Delimiter">:(scenario shape_shifting_recipe_handles_shape_shifting_new_ingredient_2)</span>
+<span id="L640" class="LineNr"> 640 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L641" class="LineNr"> 641 </span>  <span class="Constant">1</span>:&amp;:foo:point<span class="Special"> &lt;- </span>bar <span class="Constant">3</span>
+<span id="L642" class="LineNr"> 642 </span>  <span class="Constant">11</span>:foo:point<span class="Special"> &lt;- </span>copy *<span class="Constant">1</span>:&amp;:foo:point
+<span id="L643" class="LineNr"> 643 </span>]
+<span id="L644" class="LineNr"> 644 </span><span class="muRecipe">def</span> bar x:num<span class="muRecipe"> -&gt; </span>result:&amp;:foo:_t [
+<span id="L645" class="LineNr"> 645 </span>  local-scope
+<span id="L646" class="LineNr"> 646 </span>  load-ingredients
+<span id="L647" class="LineNr"> 647 </span>  <span class="Comment"># new refers to _t in its ingredient *value*</span>
+<span id="L648" class="LineNr"> 648 </span>  result<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo _t<span class="Delimiter">)</span> : type<span class="Delimiter">}</span>
+<span id="L649" class="LineNr"> 649 </span>]
+<span id="L650" class="LineNr"> 650 </span><span class="Comment"># container defined after use</span>
+<span id="L651" class="LineNr"> 651 </span><span class="muData">container</span> foo:_t [
+<span id="L652" class="LineNr"> 652 </span>  <span class="Normal">x</span>:_t
+<span id="L653" class="LineNr"> 653 </span>  <span class="Normal">y</span>:num
+<span id="L654" class="LineNr"> 654 </span>]
+<span id="L655" class="LineNr"> 655 </span><span class="traceContains">+mem: storing 0 in location 11</span>
+<span id="L656" class="LineNr"> 656 </span><span class="traceContains">+mem: storing 0 in location 12</span>
+<span id="L657" class="LineNr"> 657 </span><span class="traceContains">+mem: storing 0 in location 13</span>
+<span id="L658" class="LineNr"> 658 </span>
+<span id="L659" class="LineNr"> 659 </span><span class="Delimiter">:(scenario shape_shifting_recipe_called_with_dummy)</span>
+<span id="L660" class="LineNr"> 660 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L661" class="LineNr"> 661 </span>  _<span class="Special"> &lt;- </span>bar <span class="Constant">34</span>
+<span id="L662" class="LineNr"> 662 </span>]
+<span id="L663" class="LineNr"> 663 </span><span class="muRecipe">def</span> bar x:_t<span class="muRecipe"> -&gt; </span>result:&amp;:_t [
+<span id="L664" class="LineNr"> 664 </span>  local-scope
+<span id="L665" class="LineNr"> 665 </span>  load-ingredients
+<span id="L666" class="LineNr"> 666 </span>  result<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L667" class="LineNr"> 667 </span>]
+<span id="L668" class="LineNr"> 668 </span>$error: <span class="Constant">0</span>
+<span id="L669" class="LineNr"> 669 </span>
+<span id="L670" class="LineNr"> 670 </span><span class="Delimiter">:(code)</span>
+<span id="L671" class="LineNr"> 671 </span><span class="Comment">// this one needs a little more fine-grained control</span>
+<span id="L672" class="LineNr"> 672 </span><span class="Normal">void</span> <a href='056shape_shifting_recipe.cc.html#L672'>test_shape_shifting_new_ingredient_does_not_pollute_global_namespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L673" class="LineNr"> 673 </span>  <span class="Comment">// if you specialize a shape-shifting recipe that allocates a type-ingredient..</span>
+<span id="L674" class="LineNr"> 674 </span>  <a href='012transform.cc.html#L99'>transform</a><span class="Delimiter">(</span><span class="Constant">&quot;def barz x:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L675" class="LineNr"> 675 </span>            <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L676" class="LineNr"> 676 </span>            <span class="Constant">&quot;  load-ingredients</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L677" class="LineNr"> 677 </span>            <span class="Constant">&quot;  y:&amp;:num &lt;- new _elem:type</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L678" class="LineNr"> 678 </span>            <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L679" class="LineNr"> 679 </span>            <span class="Constant">&quot;def fooz [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L680" class="LineNr"> 680 </span>            <span class="Constant">&quot;  local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L681" class="LineNr"> 681 </span>            <span class="Constant">&quot;  barz 34</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L682" class="LineNr"> 682 </span>            <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L683" class="LineNr"> 683 </span>  <span class="Comment">// ..and if you then try to load a new shape-shifting container with that</span>
+<span id="L684" class="LineNr"> 684 </span>  <span class="Comment">// type-ingredient</span>
+<span id="L685" class="LineNr"> 685 </span>  run<span class="Delimiter">(</span><span class="Constant">&quot;container foo:_elem [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L686" class="LineNr"> 686 </span>      <span class="Constant">&quot;  x:_elem</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L687" class="LineNr"> 687 </span>      <span class="Constant">&quot;  y:num</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L688" class="LineNr"> 688 </span>      <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L689" class="LineNr"> 689 </span>  <span class="Comment">// then it should work as usual</span>
+<span id="L690" class="LineNr"> 690 </span>  reagent callsite<span class="Delimiter">(</span><span class="Constant">&quot;x:foo:point&quot;</span><span class="Delimiter">);</span>
+<span id="L691" class="LineNr"> 691 </span>  reagent element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>callsite<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L692" class="LineNr"> 692 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;x&quot;</span><span class="Delimiter">);</span>
+<span id="L693" class="LineNr"> 693 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;point&quot;</span><span class="Delimiter">);</span>
+<span id="L694" class="LineNr"> 694 </span>  <a href='002test.cc.html#L24'>CHECK</a><span class="Delimiter">(</span>!element<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>right<span class="Delimiter">);</span>
+<span id="L695" class="LineNr"> 695 </span><span class="Delimiter">}</span>
+<span id="L696" class="LineNr"> 696 </span>
+<span id="L697" class="LineNr"> 697 </span><span class="Comment">//: specializing a type ingredient with a compound type</span>
+<span id="L698" class="LineNr"> 698 </span><span class="Delimiter">:(scenario shape_shifting_recipe_supports_compound_types)</span>
+<span id="L699" class="LineNr"> 699 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L700" class="LineNr"> 700 </span>  <span class="Constant">1</span>:&amp;:point<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">point:type</span>
+<span id="L701" class="LineNr"> 701 </span>  *<span class="Constant">1</span>:&amp;:point<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *<span class="Constant">1</span>:&amp;:point<span class="Delimiter">,</span> <span class="Constant">y:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L702" class="LineNr"> 702 </span>  <span class="Constant">3</span>:&amp;:point<span class="Special"> &lt;- </span>bar <span class="Constant">1</span>:&amp;:point  <span class="Comment"># specialize _t to address:point</span>
+<span id="L703" class="LineNr"> 703 </span>  <span class="Constant">5</span>:point<span class="Special"> &lt;- </span>copy *<span class="Constant">3</span>:&amp;:point
+<span id="L704" class="LineNr"> 704 </span>]
+<span id="L705" class="LineNr"> 705 </span><span class="muRecipe">def</span> bar a:_t<span class="muRecipe"> -&gt; </span>result:_t [
+<span id="L706" class="LineNr"> 706 </span>  local-scope
+<span id="L707" class="LineNr"> 707 </span>  load-ingredients
+<span id="L708" class="LineNr"> 708 </span>  result<span class="Special"> &lt;- </span>copy a
+<span id="L709" class="LineNr"> 709 </span>]
+<span id="L710" class="LineNr"> 710 </span><span class="traceContains">+mem: storing 34 in location 6</span>
+<span id="L711" class="LineNr"> 711 </span>
+<span id="L712" class="LineNr"> 712 </span><span class="Comment">//: specializing a type ingredient with a compound type -- while *inside* another compound type</span>
+<span id="L713" class="LineNr"> 713 </span><span class="Delimiter">:(scenario shape_shifting_recipe_supports_compound_types_2)</span>
+<span id="L714" class="LineNr"> 714 </span><span class="muData">container</span> foo:_t [
+<span id="L715" class="LineNr"> 715 </span>  <span class="Normal">value</span>:_t
+<span id="L716" class="LineNr"> 716 </span>]
+<span id="L717" class="LineNr"> 717 </span><span class="muRecipe">def</span> bar x:&amp;:foo:_t<span class="muRecipe"> -&gt; </span>result:_t [
+<span id="L718" class="LineNr"> 718 </span>  local-scope
+<span id="L719" class="LineNr"> 719 </span>  load-ingredients
+<span id="L720" class="LineNr"> 720 </span>  result<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span>
+<span id="L721" class="LineNr"> 721 </span>]
+<span id="L722" class="LineNr"> 722 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L723" class="LineNr"> 723 </span>  <span class="Constant">1</span>:&amp;:foo:&amp;:point<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>foo <a href='043space.cc.html#L101'>address</a> point<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
+<span id="L724" class="LineNr"> 724 </span>  <span class="Constant">2</span>:&amp;:point<span class="Special"> &lt;- </span>bar <span class="Constant">1</span>:&amp;:foo:&amp;:point
+<span id="L725" class="LineNr"> 725 </span>]
+<span id="L726" class="LineNr"> 726 </span><span class="Comment"># no errors; call to 'bar' successfully specialized</span>
+<span id="L727" class="LineNr"> 727 </span>
+<span id="L728" class="LineNr"> 728 </span><span class="Delimiter">:(scenario shape_shifting_recipe_error)</span>
+<span id="L729" class="LineNr"> 729 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L730" class="LineNr"> 730 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L731" class="LineNr"> 731 </span>  <span class="Normal">a</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">3</span>
+<span id="L732" class="LineNr"> 732 </span>  <span class="Normal">b</span>:&amp;:num<span class="Special"> &lt;- </span>foo a
+<span id="L733" class="LineNr"> 733 </span>]
+<span id="L734" class="LineNr"> 734 </span><span class="muRecipe">def</span> foo a:_t<span class="muRecipe"> -&gt; </span>b:_t [
+<span id="L735" class="LineNr"> 735 </span>  load-ingredients
+<span id="L736" class="LineNr"> 736 </span>  b<span class="Special"> &lt;- </span>copy a
+<span id="L737" class="LineNr"> 737 </span>]
+<span id="L738" class="LineNr"> 738 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: no call found for 'b:&amp;:num &lt;- foo a'</span>
+<span id="L739" class="LineNr"> 739 </span>
+<span id="L740" class="LineNr"> 740 </span><span class="Delimiter">:(scenario specialize_inside_recipe_without_header)</span>
+<span id="L741" class="LineNr"> 741 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L742" class="LineNr"> 742 </span>  foo <span class="Constant">3</span>
+<span id="L743" class="LineNr"> 743 </span>]
+<span id="L744" class="LineNr"> 744 </span><span class="muRecipe">def</span> foo [
+<span id="L745" class="LineNr"> 745 </span>  local-scope
+<span id="L746" class="LineNr"> 746 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># ensure no header</span>
+<span id="L747" class="LineNr"> 747 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>bar x  <span class="Comment"># call a shape-shifting recipe</span>
+<span id="L748" class="LineNr"> 748 </span>]
+<span id="L749" class="LineNr"> 749 </span><span class="muRecipe">def</span> bar x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
+<span id="L750" class="LineNr"> 750 </span>  local-scope
+<span id="L751" class="LineNr"> 751 </span>  load-ingredients
+<span id="L752" class="LineNr"> 752 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L753" class="LineNr"> 753 </span>]
+<span id="L754" class="LineNr"> 754 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L755" class="LineNr"> 755 </span>
+<span id="L756" class="LineNr"> 756 </span><span class="Delimiter">:(scenario specialize_with_literal)</span>
+<span id="L757" class="LineNr"> 757 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L758" class="LineNr"> 758 </span>  local-scope
+<span id="L759" class="LineNr"> 759 </span>  <span class="Comment"># permit literal to map to number</span>
+<span id="L760" class="LineNr"> 760 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo <span class="Constant">3</span>
+<span id="L761" class="LineNr"> 761 </span>]
+<span id="L762" class="LineNr"> 762 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
+<span id="L763" class="LineNr"> 763 </span>  local-scope
+<span id="L764" class="LineNr"> 764 </span>  load-ingredients
+<span id="L765" class="LineNr"> 765 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L766" class="LineNr"> 766 </span>]
+<span id="L767" class="LineNr"> 767 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L768" class="LineNr"> 768 </span>
+<span id="L769" class="LineNr"> 769 </span><span class="Delimiter">:(scenario specialize_with_literal_2)</span>
+<span id="L770" class="LineNr"> 770 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L771" class="LineNr"> 771 </span>  local-scope
+<span id="L772" class="LineNr"> 772 </span>  <span class="Comment"># permit literal to map to character</span>
+<span id="L773" class="LineNr"> 773 </span>  <span class="Constant">1</span>:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>foo <span class="Constant">3</span>
+<span id="L774" class="LineNr"> 774 </span>]
+<span id="L775" class="LineNr"> 775 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:_elem [
+<span id="L776" class="LineNr"> 776 </span>  local-scope
+<span id="L777" class="LineNr"> 777 </span>  load-ingredients
+<span id="L778" class="LineNr"> 778 </span>  y<span class="Special"> &lt;- </span>add x<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L779" class="LineNr"> 779 </span>]
+<span id="L780" class="LineNr"> 780 </span><span class="traceContains">+mem: storing 4 in location 1</span>
+<span id="L781" class="LineNr"> 781 </span>
+<span id="L782" class="LineNr"> 782 </span><span class="Delimiter">:(scenario specialize_with_literal_3)</span>
+<span id="L783" class="LineNr"> 783 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L784" class="LineNr"> 784 </span>  local-scope
+<span id="L785" class="LineNr"> 785 </span>  <span class="Comment"># permit '0' to map to address to shape-shifting type-ingredient</span>
+<span id="L786" class="LineNr"> 786 </span>  <span class="Constant">1</span>:&amp;:<span class="Normal">char</span>/<span class="Special">raw &lt;- </span>foo<span class="Constant"> null</span>
+<span id="L787" class="LineNr"> 787 </span>]
+<span id="L788" class="LineNr"> 788 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:&amp;:_elem [
+<span id="L789" class="LineNr"> 789 </span>  local-scope
+<span id="L790" class="LineNr"> 790 </span>  load-ingredients
+<span id="L791" class="LineNr"> 791 </span>  y<span class="Special"> &lt;- </span>copy x
+<span id="L792" class="LineNr"> 792 </span>]
+<span id="L793" class="LineNr"> 793 </span><span class="traceContains">+mem: storing 0 in location 1</span>
+<span id="L794" class="LineNr"> 794 </span>$error: <span class="Constant">0</span>
+<span id="L795" class="LineNr"> 795 </span>
+<span id="L796" class="LineNr"> 796 </span><span class="Delimiter">:(scenario specialize_with_literal_4)</span>
+<span id="L797" class="LineNr"> 797 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L798" class="LineNr"> 798 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L799" class="LineNr"> 799 </span>  local-scope
+<span id="L800" class="LineNr"> 800 </span>  <span class="Comment"># ambiguous call: what's the type of its ingredient?!</span>
+<span id="L801" class="LineNr"> 801 </span>  foo <span class="Constant">0</span>
+<span id="L802" class="LineNr"> 802 </span>]
+<span id="L803" class="LineNr"> 803 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:&amp;:_elem [
+<span id="L804" class="LineNr"> 804 </span>  local-scope
+<span id="L805" class="LineNr"> 805 </span>  load-ingredients
+<span id="L806" class="LineNr"> 806 </span>  y<span class="Special"> &lt;- </span>copy x
+<span id="L807" class="LineNr"> 807 </span>]
+<span id="L808" class="LineNr"> 808 </span><span class="traceContains">+error: <a href='000organization.cc.html#L113'>main</a>: <a href='010vm.cc.html#L33'>instruction</a> 'foo' has no valid specialization</span>
+<span id="L809" class="LineNr"> 809 </span>
+<span id="L810" class="LineNr"> 810 </span><span class="Delimiter">:(scenario specialize_with_literal_5)</span>
+<span id="L811" class="LineNr"> 811 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L812" class="LineNr"> 812 </span>  foo <span class="Constant">3</span><span class="Delimiter">,</span> <span class="Constant">4</span>  <span class="Comment"># recipe mapping two variables to literals</span>
+<span id="L813" class="LineNr"> 813 </span>]
+<span id="L814" class="LineNr"> 814 </span><span class="muRecipe">def</span> foo x:_elem<span class="Delimiter">,</span> y:_elem [
+<span id="L815" class="LineNr"> 815 </span>  local-scope
+<span id="L816" class="LineNr"> 816 </span>  load-ingredients
+<span id="L817" class="LineNr"> 817 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>add x<span class="Delimiter">,</span> y
+<span id="L818" class="LineNr"> 818 </span>]
+<span id="L819" class="LineNr"> 819 </span><span class="traceContains">+mem: storing 7 in location 1</span>
+<span id="L820" class="LineNr"> 820 </span>
+<span id="L821" class="LineNr"> 821 </span><span class="Delimiter">:(scenario multiple_shape_shifting_variants)</span>
+<span id="L822" class="LineNr"> 822 </span><span class="Comment"># try to call two different shape-shifting recipes with the same name</span>
+<span id="L823" class="LineNr"> 823 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L824" class="LineNr"> 824 </span>  <span class="Normal">e1</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
+<span id="L825" class="LineNr"> 825 </span>  <span class="Normal">e2</span>:d2:num<span class="Special"> &lt;- </span>merge <span class="Constant">4</span><span class="Delimiter">,</span> <span class="Constant">5</span>
+<span id="L826" class="LineNr"> 826 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo e1
+<span id="L827" class="LineNr"> 827 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>foo e2
+<span id="L828" class="LineNr"> 828 </span>]
+<span id="L829" class="LineNr"> 829 </span><span class="Comment"># the two shape-shifting definitions</span>
+<span id="L830" class="LineNr"> 830 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L831" class="LineNr"> 831 </span>  local-scope
+<span id="L832" class="LineNr"> 832 </span>  load-ingredients
+<span id="L833" class="LineNr"> 833 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L834" class="LineNr"> 834 </span>]
+<span id="L835" class="LineNr"> 835 </span><span class="muRecipe">def</span> foo a:d2:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L836" class="LineNr"> 836 </span>  local-scope
+<span id="L837" class="LineNr"> 837 </span>  load-ingredients
+<span id="L838" class="LineNr"> 838 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L839" class="LineNr"> 839 </span>]
+<span id="L840" class="LineNr"> 840 </span><span class="Comment"># the shape-shifting containers they use</span>
+<span id="L841" class="LineNr"> 841 </span><span class="muData">container</span> d1:_elem [
+<span id="L842" class="LineNr"> 842 </span>  <span class="Normal">x</span>:_elem
+<span id="L843" class="LineNr"> 843 </span>]
+<span id="L844" class="LineNr"> 844 </span><span class="muData">container</span> d2:_elem [
+<span id="L845" class="LineNr"> 845 </span>  <span class="Normal">x</span>:num
+<span id="L846" class="LineNr"> 846 </span>  <span class="Normal">y</span>:_elem
+<span id="L847" class="LineNr"> 847 </span>]
+<span id="L848" class="LineNr"> 848 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L849" class="LineNr"> 849 </span><span class="traceContains">+mem: storing 35 in location 2</span>
+<span id="L850" class="LineNr"> 850 </span>
+<span id="L851" class="LineNr"> 851 </span><span class="Delimiter">:(scenario multiple_shape_shifting_variants_2)</span>
+<span id="L852" class="LineNr"> 852 </span><span class="Comment"># static dispatch between shape-shifting variants, _including pointer lookups_</span>
+<span id="L853" class="LineNr"> 853 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L854" class="LineNr"> 854 </span>  <span class="Normal">e1</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
+<span id="L855" class="LineNr"> 855 </span>  <span class="Normal">e2</span>:&amp;:d2:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span>d2 number<span class="Delimiter">)</span>: type<span class="Delimiter">}</span>
+<span id="L856" class="LineNr"> 856 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>foo e1
+<span id="L857" class="LineNr"> 857 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>foo *e2  <span class="Comment"># different from previous scenario</span>
+<span id="L858" class="LineNr"> 858 </span>]
+<span id="L859" class="LineNr"> 859 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L860" class="LineNr"> 860 </span>  local-scope
+<span id="L861" class="LineNr"> 861 </span>  load-ingredients
+<span id="L862" class="LineNr"> 862 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L863" class="LineNr"> 863 </span>]
+<span id="L864" class="LineNr"> 864 </span><span class="muRecipe">def</span> foo a:d2:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L865" class="LineNr"> 865 </span>  local-scope
+<span id="L866" class="LineNr"> 866 </span>  load-ingredients
+<span id="L867" class="LineNr"> 867 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L868" class="LineNr"> 868 </span>]
+<span id="L869" class="LineNr"> 869 </span><span class="muData">container</span> d1:_elem [
+<span id="L870" class="LineNr"> 870 </span>  <span class="Normal">x</span>:_elem
 <span id="L871" class="LineNr"> 871 </span>]
-<span id="L872" class="LineNr"> 872 </span><span class="muData">container</span> d1:_elem [
-<span id="L873" class="LineNr"> 873 </span>  <span class="Normal">x</span>:_elem
-<span id="L874" class="LineNr"> 874 </span>]
-<span id="L875" class="LineNr"> 875 </span><span class="muData">container</span> d2:_elem [
-<span id="L876" class="LineNr"> 876 </span>  <span class="Normal">x</span>:num
-<span id="L877" class="LineNr"> 877 </span>  <span class="Normal">y</span>:_elem
-<span id="L878" class="LineNr"> 878 </span>]
-<span id="L879" class="LineNr"> 879 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L880" class="LineNr"> 880 </span><span class="traceContains">+mem: storing 35 in location 2</span>
-<span id="L881" class="LineNr"> 881 </span>
-<span id="L882" class="LineNr"> 882 </span><span class="Delimiter">:(scenario missing_type_in_shape_shifting_recipe)</span>
-<span id="L883" class="LineNr"> 883 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L884" class="LineNr"> 884 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L885" class="LineNr"> 885 </span>  <span class="Normal">a</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
-<span id="L886" class="LineNr"> 886 </span>  foo a
-<span id="L887" class="LineNr"> 887 </span>]
-<span id="L888" class="LineNr"> 888 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L889" class="LineNr"> 889 </span>  local-scope
-<span id="L890" class="LineNr"> 890 </span>  load-ingredients
-<span id="L891" class="LineNr"> 891 </span>  copy e  <span class="Comment"># no such variable</span>
-<span id="L892" class="LineNr"> 892 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L872" class="LineNr"> 872 </span><span class="muData">container</span> d2:_elem [
+<span id="L873" class="LineNr"> 873 </span>  <span class="Normal">x</span>:num
+<span id="L874" class="LineNr"> 874 </span>  <span class="Normal">y</span>:_elem
+<span id="L875" class="LineNr"> 875 </span>]
+<span id="L876" class="LineNr"> 876 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L877" class="LineNr"> 877 </span><span class="traceContains">+mem: storing 35 in location 2</span>
+<span id="L878" class="LineNr"> 878 </span>
+<span id="L879" class="LineNr"> 879 </span><span class="Delimiter">:(scenario missing_type_in_shape_shifting_recipe)</span>
+<span id="L880" class="LineNr"> 880 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L881" class="LineNr"> 881 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L882" class="LineNr"> 882 </span>  <span class="Normal">a</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
+<span id="L883" class="LineNr"> 883 </span>  foo a
+<span id="L884" class="LineNr"> 884 </span>]
+<span id="L885" class="LineNr"> 885 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L886" class="LineNr"> 886 </span>  local-scope
+<span id="L887" class="LineNr"> 887 </span>  load-ingredients
+<span id="L888" class="LineNr"> 888 </span>  copy e  <span class="Comment"># no such variable</span>
+<span id="L889" class="LineNr"> 889 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L890" class="LineNr"> 890 </span>]
+<span id="L891" class="LineNr"> 891 </span><span class="muData">container</span> d1:_elem [
+<span id="L892" class="LineNr"> 892 </span>  <span class="Normal">x</span>:_elem
 <span id="L893" class="LineNr"> 893 </span>]
-<span id="L894" class="LineNr"> 894 </span><span class="muData">container</span> d1:_elem [
-<span id="L895" class="LineNr"> 895 </span>  <span class="Normal">x</span>:_elem
-<span id="L896" class="LineNr"> 896 </span>]
-<span id="L897" class="LineNr"> 897 </span><span class="traceContains">+error: foo: unknown type for 'e' in 'copy e' (check the name for typos)</span>
-<span id="L898" class="LineNr"> 898 </span><span class="traceContains">+error: specializing foo: missing type for 'e'</span>
-<span id="L899" class="LineNr"> 899 </span><span class="Comment"># and it doesn't crash</span>
-<span id="L900" class="LineNr"> 900 </span>
-<span id="L901" class="LineNr"> 901 </span><span class="Delimiter">:(scenario missing_type_in_shape_shifting_recipe_2)</span>
-<span id="L902" class="LineNr"> 902 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L903" class="LineNr"> 903 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L904" class="LineNr"> 904 </span>  <span class="Normal">a</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
-<span id="L905" class="LineNr"> 905 </span>  foo a
-<span id="L906" class="LineNr"> 906 </span>]
-<span id="L907" class="LineNr"> 907 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
-<span id="L908" class="LineNr"> 908 </span>  local-scope
-<span id="L909" class="LineNr"> 909 </span>  load-ingredients
-<span id="L910" class="LineNr"> 910 </span>  get e<span class="Delimiter">,</span> <span class="Constant">x:offset</span>  <span class="Comment"># unknown variable in a 'get', which does some extra checking</span>
-<span id="L911" class="LineNr"> 911 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L894" class="LineNr"> 894 </span><span class="traceContains">+error: foo: unknown type for 'e' in 'copy e' (check the name for typos)</span>
+<span id="L895" class="LineNr"> 895 </span><span class="traceContains">+error: specializing foo: missing type for 'e'</span>
+<span id="L896" class="LineNr"> 896 </span><span class="Comment"># and it doesn't crash</span>
+<span id="L897" class="LineNr"> 897 </span>
+<span id="L898" class="LineNr"> 898 </span><span class="Delimiter">:(scenario missing_type_in_shape_shifting_recipe_2)</span>
+<span id="L899" class="LineNr"> 899 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L900" class="LineNr"> 900 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L901" class="LineNr"> 901 </span>  <span class="Normal">a</span>:d1:num<span class="Special"> &lt;- </span>merge <span class="Constant">3</span>
+<span id="L902" class="LineNr"> 902 </span>  foo a
+<span id="L903" class="LineNr"> 903 </span>]
+<span id="L904" class="LineNr"> 904 </span><span class="muRecipe">def</span> foo a:d1:_elem<span class="muRecipe"> -&gt; </span>b:num [
+<span id="L905" class="LineNr"> 905 </span>  local-scope
+<span id="L906" class="LineNr"> 906 </span>  load-ingredients
+<span id="L907" class="LineNr"> 907 </span>  get e<span class="Delimiter">,</span> <span class="Constant">x:offset</span>  <span class="Comment"># unknown variable in a 'get', which does some extra checking</span>
+<span id="L908" class="LineNr"> 908 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L909" class="LineNr"> 909 </span>]
+<span id="L910" class="LineNr"> 910 </span><span class="muData">container</span> d1:_elem [
+<span id="L911" class="LineNr"> 911 </span>  <span class="Normal">x</span>:_elem
 <span id="L912" class="LineNr"> 912 </span>]
-<span id="L913" class="LineNr"> 913 </span><span class="muData">container</span> d1:_elem [
-<span id="L914" class="LineNr"> 914 </span>  <span class="Normal">x</span>:_elem
-<span id="L915" class="LineNr"> 915 </span>]
-<span id="L916" class="LineNr"> 916 </span><span class="traceContains">+error: foo: unknown type for 'e' in 'get e, x:offset' (check the name for typos)</span>
-<span id="L917" class="LineNr"> 917 </span><span class="traceContains">+error: specializing foo: missing type for 'e'</span>
-<span id="L918" class="LineNr"> 918 </span><span class="Comment"># and it doesn't crash</span>
-<span id="L919" class="LineNr"> 919 </span>
-<span id="L920" class="LineNr"> 920 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L921" class="LineNr"> 921 </span><span class="Delimiter">:(scenario specialize_recursive_shape_shifting_recipe)</span>
-<span id="L922" class="LineNr"> 922 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L923" class="LineNr"> 923 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L924" class="LineNr"> 924 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:num
-<span id="L925" class="LineNr"> 925 </span>]
-<span id="L926" class="LineNr"> 926 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L927" class="LineNr"> 927 </span>  local-scope
-<span id="L928" class="LineNr"> 928 </span>  load-ingredients
-<span id="L929" class="LineNr"> 929 </span>  <span class="Delimiter">{</span>
-<span id="L930" class="LineNr"> 930 </span>    <span class="Identifier">break</span>
-<span id="L931" class="LineNr"> 931 </span>    <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>foo x
-<span id="L932" class="LineNr"> 932 </span>  <span class="Delimiter">}</span>
-<span id="L933" class="LineNr"> 933 </span>  <span class="Identifier">return</span> y
-<span id="L934" class="LineNr"> 934 </span>]
-<span id="L935" class="LineNr"> 935 </span><span class="traceContains">+transform: new specialization: foo_2</span>
-<span id="L936" class="LineNr"> 936 </span><span class="Comment"># transform terminates</span>
-<span id="L937" class="LineNr"> 937 </span>
-<span id="L938" class="LineNr"> 938 </span><span class="Delimiter">:(scenarios run)</span>
-<span id="L939" class="LineNr"> 939 </span><span class="Delimiter">:(scenario specialize_most_similar_variant)</span>
-<span id="L940" class="LineNr"> 940 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L941" class="LineNr"> 941 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
-<span id="L942" class="LineNr"> 942 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:&amp;:num
-<span id="L943" class="LineNr"> 943 </span>]
-<span id="L944" class="LineNr"> 944 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L945" class="LineNr"> 945 </span>  local-scope
-<span id="L946" class="LineNr"> 946 </span>  load-ingredients
-<span id="L947" class="LineNr"> 947 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L948" class="LineNr"> 948 </span>]
-<span id="L949" class="LineNr"> 949 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L950" class="LineNr"> 950 </span>  local-scope
-<span id="L951" class="LineNr"> 951 </span>  load-ingredients
-<span id="L952" class="LineNr"> 952 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L953" class="LineNr"> 953 </span>]
-<span id="L954" class="LineNr"> 954 </span><span class="traceContains">+mem: storing 35 in location 2</span>
-<span id="L955" class="LineNr"> 955 </span>
-<span id="L956" class="LineNr"> 956 </span><span class="Delimiter">:(scenario specialize_most_similar_variant_2)</span>
-<span id="L957" class="LineNr"> 957 </span><span class="Comment"># version with headers padded with lots of unrelated concrete types</span>
-<span id="L958" class="LineNr"> 958 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L959" class="LineNr"> 959 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
-<span id="L960" class="LineNr"> 960 </span>  <span class="Constant">2</span>:&amp;:@:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L961" class="LineNr"> 961 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">2</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">1</span>:num
-<span id="L962" class="LineNr"> 962 </span>]
-<span id="L963" class="LineNr"> 963 </span><span class="Comment"># variant with concrete type</span>
-<span id="L964" class="LineNr"> 964 </span><span class="muRecipe">def</span> foo dummy:&amp;:@:num<span class="Delimiter">,</span> x:num<span class="muRecipe"> -&gt; </span>y:num<span class="Delimiter">,</span> dummy:&amp;:@:num [
-<span id="L965" class="LineNr"> 965 </span>  local-scope
-<span id="L966" class="LineNr"> 966 </span>  load-ingredients
-<span id="L967" class="LineNr"> 967 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L968" class="LineNr"> 968 </span>]
-<span id="L969" class="LineNr"> 969 </span><span class="Comment"># shape-shifting variant</span>
-<span id="L970" class="LineNr"> 970 </span><span class="muRecipe">def</span> foo dummy:&amp;:@:num<span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>y:num<span class="Delimiter">,</span> dummy:&amp;:@:num [
-<span id="L971" class="LineNr"> 971 </span>  local-scope
-<span id="L972" class="LineNr"> 972 </span>  load-ingredients
-<span id="L973" class="LineNr"> 973 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L974" class="LineNr"> 974 </span>]
-<span id="L975" class="LineNr"> 975 </span><span class="Comment"># prefer the concrete variant</span>
-<span id="L976" class="LineNr"> 976 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L977" class="LineNr"> 977 </span>
-<span id="L978" class="LineNr"> 978 </span><span class="Delimiter">:(scenario specialize_most_similar_variant_3)</span>
-<span id="L979" class="LineNr"> 979 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L980" class="LineNr"> 980 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L981" class="LineNr"> 981 </span>  foo <span class="Constant">1</span>:text
+<span id="L913" class="LineNr"> 913 </span><span class="traceContains">+error: foo: unknown type for 'e' in 'get e, x:offset' (check the name for typos)</span>
+<span id="L914" class="LineNr"> 914 </span><span class="traceContains">+error: specializing foo: missing type for 'e'</span>
+<span id="L915" class="LineNr"> 915 </span><span class="Comment"># and it doesn't crash</span>
+<span id="L916" class="LineNr"> 916 </span>
+<span id="L917" class="LineNr"> 917 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L918" class="LineNr"> 918 </span><span class="Delimiter">:(scenario specialize_recursive_shape_shifting_recipe)</span>
+<span id="L919" class="LineNr"> 919 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L920" class="LineNr"> 920 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L921" class="LineNr"> 921 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:num
+<span id="L922" class="LineNr"> 922 </span>]
+<span id="L923" class="LineNr"> 923 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L924" class="LineNr"> 924 </span>  local-scope
+<span id="L925" class="LineNr"> 925 </span>  load-ingredients
+<span id="L926" class="LineNr"> 926 </span>  <span class="Delimiter">{</span>
+<span id="L927" class="LineNr"> 927 </span>    <span class="Identifier">break</span>
+<span id="L928" class="LineNr"> 928 </span>    <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>foo x
+<span id="L929" class="LineNr"> 929 </span>  <span class="Delimiter">}</span>
+<span id="L930" class="LineNr"> 930 </span>  <span class="Identifier">return</span> y
+<span id="L931" class="LineNr"> 931 </span>]
+<span id="L932" class="LineNr"> 932 </span><span class="traceContains">+transform: new specialization: foo_2</span>
+<span id="L933" class="LineNr"> 933 </span><span class="Comment"># transform terminates</span>
+<span id="L934" class="LineNr"> 934 </span>
+<span id="L935" class="LineNr"> 935 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L936" class="LineNr"> 936 </span><span class="Delimiter">:(scenario specialize_most_similar_variant)</span>
+<span id="L937" class="LineNr"> 937 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L938" class="LineNr"> 938 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">number:type</span>
+<span id="L939" class="LineNr"> 939 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">1</span>:&amp;:num
+<span id="L940" class="LineNr"> 940 </span>]
+<span id="L941" class="LineNr"> 941 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L942" class="LineNr"> 942 </span>  local-scope
+<span id="L943" class="LineNr"> 943 </span>  load-ingredients
+<span id="L944" class="LineNr"> 944 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L945" class="LineNr"> 945 </span>]
+<span id="L946" class="LineNr"> 946 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L947" class="LineNr"> 947 </span>  local-scope
+<span id="L948" class="LineNr"> 948 </span>  load-ingredients
+<span id="L949" class="LineNr"> 949 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L950" class="LineNr"> 950 </span>]
+<span id="L951" class="LineNr"> 951 </span><span class="traceContains">+mem: storing 35 in location 10</span>
+<span id="L952" class="LineNr"> 952 </span>
+<span id="L953" class="LineNr"> 953 </span><span class="Delimiter">:(scenario specialize_most_similar_variant_2)</span>
+<span id="L954" class="LineNr"> 954 </span><span class="Comment"># version with headers padded with lots of unrelated concrete types</span>
+<span id="L955" class="LineNr"> 955 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L956" class="LineNr"> 956 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">23</span>
+<span id="L957" class="LineNr"> 957 </span>  <span class="Constant">2</span>:&amp;:@:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L958" class="LineNr"> 958 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">2</span>:&amp;:@:num<span class="Delimiter">,</span> <span class="Constant">1</span>:num
+<span id="L959" class="LineNr"> 959 </span>]
+<span id="L960" class="LineNr"> 960 </span><span class="Comment"># variant with concrete type</span>
+<span id="L961" class="LineNr"> 961 </span><span class="muRecipe">def</span> foo dummy:&amp;:@:num<span class="Delimiter">,</span> x:num<span class="muRecipe"> -&gt; </span>y:num<span class="Delimiter">,</span> dummy:&amp;:@:num [
+<span id="L962" class="LineNr"> 962 </span>  local-scope
+<span id="L963" class="LineNr"> 963 </span>  load-ingredients
+<span id="L964" class="LineNr"> 964 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L965" class="LineNr"> 965 </span>]
+<span id="L966" class="LineNr"> 966 </span><span class="Comment"># shape-shifting variant</span>
+<span id="L967" class="LineNr"> 967 </span><span class="muRecipe">def</span> foo dummy:&amp;:@:num<span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>y:num<span class="Delimiter">,</span> dummy:&amp;:@:num [
+<span id="L968" class="LineNr"> 968 </span>  local-scope
+<span id="L969" class="LineNr"> 969 </span>  load-ingredients
+<span id="L970" class="LineNr"> 970 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L971" class="LineNr"> 971 </span>]
+<span id="L972" class="LineNr"> 972 </span><span class="Comment"># prefer the concrete variant</span>
+<span id="L973" class="LineNr"> 973 </span><span class="traceContains">+mem: storing 34 in location 4</span>
+<span id="L974" class="LineNr"> 974 </span>
+<span id="L975" class="LineNr"> 975 </span><span class="Delimiter">:(scenario specialize_most_similar_variant_3)</span>
+<span id="L976" class="LineNr"> 976 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L977" class="LineNr"> 977 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
+<span id="L978" class="LineNr"> 978 </span>  foo <span class="Constant">1</span>:text
+<span id="L979" class="LineNr"> 979 </span>]
+<span id="L980" class="LineNr"> 980 </span><span class="muRecipe">def</span> foo x:text [
+<span id="L981" class="LineNr"> 981 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L982" class="LineNr"> 982 </span>]
-<span id="L983" class="LineNr"> 983 </span><span class="muRecipe">def</span> foo x:text [
-<span id="L984" class="LineNr"> 984 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L983" class="LineNr"> 983 </span><span class="muRecipe">def</span> foo x:&amp;:_elem [
+<span id="L984" class="LineNr"> 984 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
 <span id="L985" class="LineNr"> 985 </span>]
-<span id="L986" class="LineNr"> 986 </span><span class="muRecipe">def</span> foo x:&amp;:_elem [
-<span id="L987" class="LineNr"> 987 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L988" class="LineNr"> 988 </span>]
-<span id="L989" class="LineNr"> 989 </span><span class="Comment"># make sure the more precise version was used</span>
-<span id="L990" class="LineNr"> 990 </span><span class="traceContains">+mem: storing 34 in location 2</span>
-<span id="L991" class="LineNr"> 991 </span>
-<span id="L992" class="LineNr"> 992 </span><span class="Delimiter">:(scenario specialize_literal_as_number)</span>
-<span id="L993" class="LineNr"> 993 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L994" class="LineNr"> 994 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">23</span>
-<span id="L995" class="LineNr"> 995 </span>]
-<span id="L996" class="LineNr"> 996 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L997" class="LineNr"> 997 </span>  local-scope
-<span id="L998" class="LineNr"> 998 </span>  load-ingredients
-<span id="L999" class="LineNr"> 999 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L1000" class="LineNr">1000 </span>]
-<span id="L1001" class="LineNr">1001 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
-<span id="L1002" class="LineNr">1002 </span>  local-scope
-<span id="L1003" class="LineNr">1003 </span>  load-ingredients
-<span id="L1004" class="LineNr">1004 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L1005" class="LineNr">1005 </span>]
-<span id="L1006" class="LineNr">1006 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L1007" class="LineNr">1007 </span>
-<span id="L1008" class="LineNr">1008 </span><span class="Delimiter">:(scenario specialize_literal_as_number_2)</span>
-<span id="L1009" class="LineNr">1009 </span><span class="Comment"># version calling with literal</span>
-<span id="L1010" class="LineNr">1010 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1011" class="LineNr">1011 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">0</span>
-<span id="L1012" class="LineNr">1012 </span>]
-<span id="L1013" class="LineNr">1013 </span><span class="Comment"># variant with concrete type</span>
-<span id="L1014" class="LineNr">1014 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L1015" class="LineNr">1015 </span>  local-scope
-<span id="L1016" class="LineNr">1016 </span>  load-ingredients
-<span id="L1017" class="LineNr">1017 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L1018" class="LineNr">1018 </span>]
-<span id="L1019" class="LineNr">1019 </span><span class="Comment"># shape-shifting variant</span>
-<span id="L1020" class="LineNr">1020 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L1021" class="LineNr">1021 </span>  local-scope
-<span id="L1022" class="LineNr">1022 </span>  load-ingredients
-<span id="L1023" class="LineNr">1023 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L1024" class="LineNr">1024 </span>]
-<span id="L1025" class="LineNr">1025 </span><span class="Comment"># prefer the concrete variant, ignore concrete types in scoring the shape-shifting variant</span>
-<span id="L1026" class="LineNr">1026 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L1027" class="LineNr">1027 </span>
-<span id="L1028" class="LineNr">1028 </span><span class="Delimiter">:(scenario specialize_literal_as_address)</span>
-<span id="L1029" class="LineNr">1029 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1030" class="LineNr">1030 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">0</span>
-<span id="L1031" class="LineNr">1031 </span>]
-<span id="L1032" class="LineNr">1032 </span><span class="Comment"># variant with concrete address type</span>
-<span id="L1033" class="LineNr">1033 </span><span class="muRecipe">def</span> foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L1034" class="LineNr">1034 </span>  local-scope
-<span id="L1035" class="LineNr">1035 </span>  load-ingredients
-<span id="L1036" class="LineNr">1036 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
-<span id="L1037" class="LineNr">1037 </span>]
-<span id="L1038" class="LineNr">1038 </span><span class="Comment"># shape-shifting variant</span>
-<span id="L1039" class="LineNr">1039 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
-<span id="L1040" class="LineNr">1040 </span>  local-scope
-<span id="L1041" class="LineNr">1041 </span>  load-ingredients
-<span id="L1042" class="LineNr">1042 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
-<span id="L1043" class="LineNr">1043 </span>]
-<span id="L1044" class="LineNr">1044 </span><span class="Comment"># prefer the concrete variant, ignore concrete types in scoring the shape-shifting variant</span>
-<span id="L1045" class="LineNr">1045 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L1046" class="LineNr">1046 </span>
-<span id="L1047" class="LineNr">1047 </span><span class="Delimiter">:(scenario missing_type_during_specialization)</span>
-<span id="L1048" class="LineNr">1048 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L1049" class="LineNr">1049 </span><span class="Comment"># define a shape-shifting recipe</span>
-<span id="L1050" class="LineNr">1050 </span><span class="muRecipe">def</span> foo a:_elem [
-<span id="L1051" class="LineNr">1051 </span>]
-<span id="L1052" class="LineNr">1052 </span><span class="Comment"># define a container with field 'z'</span>
-<span id="L1053" class="LineNr">1053 </span><span class="muData">container</span> foo2 [
-<span id="L1054" class="LineNr">1054 </span>  <span class="Normal">z</span>:num
-<span id="L1055" class="LineNr">1055 </span>]
-<span id="L1056" class="LineNr">1056 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1057" class="LineNr">1057 </span>  local-scope
-<span id="L1058" class="LineNr">1058 </span>  <span class="Normal">x</span>:foo2<span class="Special"> &lt;- </span>merge <span class="Constant">34</span>
-<span id="L1059" class="LineNr">1059 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>get x<span class="Delimiter">,</span> z:offse  <span class="Comment"># typo in 'offset'</span>
-<span id="L1060" class="LineNr">1060 </span><span class="PreProc">  </span><span class="Comment"># define a variable with the same name 'z'</span>
-<span id="L1061" class="LineNr">1061 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L1062" class="LineNr">1062 </span>  <span class="Comment"># trigger specialization of the shape-shifting recipe</span>
-<span id="L1063" class="LineNr">1063 </span>  foo z
-<span id="L1064" class="LineNr">1064 </span>]
-<span id="L1065" class="LineNr">1065 </span><span class="Comment"># shouldn't crash</span>
-<span id="L1066" class="LineNr">1066 </span>
-<span id="L1067" class="LineNr">1067 </span><span class="Delimiter">:(scenario missing_type_during_specialization2)</span>
-<span id="L1068" class="LineNr">1068 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L1069" class="LineNr">1069 </span><span class="Comment"># define a shape-shifting recipe</span>
-<span id="L1070" class="LineNr">1070 </span><span class="muRecipe">def</span> foo a:_elem [
-<span id="L1071" class="LineNr">1071 </span>]
-<span id="L1072" class="LineNr">1072 </span><span class="Comment"># define a container with field 'z'</span>
-<span id="L1073" class="LineNr">1073 </span><span class="muData">container</span> foo2 [
-<span id="L1074" class="LineNr">1074 </span>  <span class="Normal">z</span>:num
-<span id="L1075" class="LineNr">1075 </span>]
-<span id="L1076" class="LineNr">1076 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1077" class="LineNr">1077 </span>  local-scope
-<span id="L1078" class="LineNr">1078 </span>  <span class="Normal">x</span>:foo2<span class="Special"> &lt;- </span>merge <span class="Constant">34</span>
-<span id="L1079" class="LineNr">1079 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>get x<span class="Delimiter">,</span> z:offse  <span class="Comment"># typo in 'offset'</span>
-<span id="L1080" class="LineNr">1080 </span><span class="PreProc">  </span><span class="Comment"># define a variable with the same name 'z'</span>
-<span id="L1081" class="LineNr">1081 </span>  <span class="Normal">z</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L1082" class="LineNr">1082 </span>  <span class="Comment"># trigger specialization of the shape-shifting recipe</span>
-<span id="L1083" class="LineNr">1083 </span>  foo *z
-<span id="L1084" class="LineNr">1084 </span>]
-<span id="L1085" class="LineNr">1085 </span><span class="Comment"># shouldn't crash</span>
-<span id="L1086" class="LineNr">1086 </span>
-<span id="L1087" class="LineNr">1087 </span><span class="Delimiter">:(scenario tangle_shape_shifting_recipe)</span>
-<span id="L1088" class="LineNr">1088 </span><span class="Comment"># shape-shifting recipe</span>
-<span id="L1089" class="LineNr">1089 </span><span class="muRecipe">def</span> foo a:_elem [
-<span id="L1090" class="LineNr">1090 </span>  local-scope
-<span id="L1091" class="LineNr">1091 </span>  load-ingredients
-<span id="L1092" class="LineNr">1092 </span>  &lt;label1&gt;
-<span id="L1093" class="LineNr">1093 </span>]
-<span id="L1094" class="LineNr">1094 </span><span class="Comment"># tangle some code that refers to the type ingredient</span>
-<span id="L1095" class="LineNr">1095 </span><span class="muRecipe">after</span> &lt;label1&gt; [
-<span id="L1096" class="LineNr">1096 </span>  <span class="Normal">b</span>:_elem<span class="Special"> &lt;- </span>copy a
-<span id="L1097" class="LineNr">1097 </span>]
-<span id="L1098" class="LineNr">1098 </span><span class="Comment"># trigger specialization</span>
-<span id="L1099" class="LineNr">1099 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1100" class="LineNr">1100 </span>  local-scope
-<span id="L1101" class="LineNr">1101 </span>  foo <span class="Constant">34</span>
-<span id="L1102" class="LineNr">1102 </span>]
-<span id="L1103" class="LineNr">1103 </span>$error: <span class="Constant">0</span>
-<span id="L1104" class="LineNr">1104 </span>
-<span id="L1105" class="LineNr">1105 </span><span class="Delimiter">:(scenario tangle_shape_shifting_recipe_with_type_abbreviation)</span>
-<span id="L1106" class="LineNr">1106 </span><span class="Comment"># shape-shifting recipe</span>
-<span id="L1107" class="LineNr">1107 </span><span class="muRecipe">def</span> foo a:_elem [
-<span id="L1108" class="LineNr">1108 </span>  local-scope
-<span id="L1109" class="LineNr">1109 </span>  load-ingredients
-<span id="L1110" class="LineNr">1110 </span>  &lt;label1&gt;
-<span id="L1111" class="LineNr">1111 </span>]
-<span id="L1112" class="LineNr">1112 </span><span class="Comment"># tangle some code that refers to the type ingredient</span>
-<span id="L1113" class="LineNr">1113 </span><span class="muRecipe">after</span> &lt;label1&gt; [
-<span id="L1114" class="LineNr">1114 </span>  <span class="Normal">b</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># type abbreviation</span>
-<span id="L1115" class="LineNr">1115 </span>]
-<span id="L1116" class="LineNr">1116 </span><span class="Comment"># trigger specialization</span>
-<span id="L1117" class="LineNr">1117 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1118" class="LineNr">1118 </span>  local-scope
-<span id="L1119" class="LineNr">1119 </span>  foo <span class="Constant">34</span>
-<span id="L1120" class="LineNr">1120 </span>]
-<span id="L1121" class="LineNr">1121 </span>$error: <span class="Constant">0</span>
-<span id="L1122" class="LineNr">1122 </span>
-<span id="L1123" class="LineNr">1123 </span><span class="Delimiter">:(scenario shape_shifting_recipe_coexists_with_primitive)</span>
-<span id="L1124" class="LineNr">1124 </span><span class="Comment"># recipe overloading a primitive with a generic type</span>
-<span id="L1125" class="LineNr">1125 </span><span class="muRecipe">def</span> add a:&amp;:foo:_elem [
-<span id="L1126" class="LineNr">1126 </span>  assert <span class="Constant">0</span><span class="Delimiter">,</span> [should <span class="Normal">not</span> get here]
-<span id="L1127" class="LineNr">1127 </span>]
-<span id="L1128" class="LineNr">1128 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1129" class="LineNr">1129 </span>  <span class="Comment"># call primitive add with literal 0</span>
-<span id="L1130" class="LineNr">1130 </span>  add <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span>
-<span id="L1131" class="LineNr">1131 </span>]
-<span id="L1132" class="LineNr">1132 </span>$error: <span class="Constant">0</span>
-<span id="L1133" class="LineNr">1133 </span>
-<span id="L1134" class="LineNr">1134 </span><span class="Delimiter">:(scenario specialization_heuristic_test_1)</span>
-<span id="L1135" class="LineNr">1135 </span><span class="Comment"># modeled on the 'buffer' container in text.mu</span>
-<span id="L1136" class="LineNr">1136 </span><span class="muData">container</span> foo_buffer:_elem [
-<span id="L1137" class="LineNr">1137 </span>  <span class="Normal">x</span>:num
+<span id="L986" class="LineNr"> 986 </span><span class="Comment"># make sure the more precise version was used</span>
+<span id="L987" class="LineNr"> 987 </span><span class="traceContains">+mem: storing 34 in location 10</span>
+<span id="L988" class="LineNr"> 988 </span>
+<span id="L989" class="LineNr"> 989 </span><span class="Delimiter">:(scenario specialize_literal_as_number)</span>
+<span id="L990" class="LineNr"> 990 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L991" class="LineNr"> 991 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">23</span>
+<span id="L992" class="LineNr"> 992 </span>]
+<span id="L993" class="LineNr"> 993 </span><span class="muRecipe">def</span> foo x:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L994" class="LineNr"> 994 </span>  local-scope
+<span id="L995" class="LineNr"> 995 </span>  load-ingredients
+<span id="L996" class="LineNr"> 996 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L997" class="LineNr"> 997 </span>]
+<span id="L998" class="LineNr"> 998 </span><span class="muRecipe">def</span> foo x:<span class="Normal">char</span><span class="muRecipe"> -&gt; </span>y:num [
+<span id="L999" class="LineNr"> 999 </span>  local-scope
+<span id="L1000" class="LineNr">1000 </span>  load-ingredients
+<span id="L1001" class="LineNr">1001 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L1002" class="LineNr">1002 </span>]
+<span id="L1003" class="LineNr">1003 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L1004" class="LineNr">1004 </span>
+<span id="L1005" class="LineNr">1005 </span><span class="Delimiter">:(scenario specialize_literal_as_number_2)</span>
+<span id="L1006" class="LineNr">1006 </span><span class="Comment"># version calling with literal</span>
+<span id="L1007" class="LineNr">1007 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1008" class="LineNr">1008 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo <span class="Constant">0</span>
+<span id="L1009" class="LineNr">1009 </span>]
+<span id="L1010" class="LineNr">1010 </span><span class="Comment"># variant with concrete type</span>
+<span id="L1011" class="LineNr">1011 </span><span class="muRecipe">def</span> foo x:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L1012" class="LineNr">1012 </span>  local-scope
+<span id="L1013" class="LineNr">1013 </span>  load-ingredients
+<span id="L1014" class="LineNr">1014 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L1015" class="LineNr">1015 </span>]
+<span id="L1016" class="LineNr">1016 </span><span class="Comment"># shape-shifting variant</span>
+<span id="L1017" class="LineNr">1017 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L1018" class="LineNr">1018 </span>  local-scope
+<span id="L1019" class="LineNr">1019 </span>  load-ingredients
+<span id="L1020" class="LineNr">1020 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L1021" class="LineNr">1021 </span>]
+<span id="L1022" class="LineNr">1022 </span><span class="Comment"># prefer the concrete variant, ignore concrete types in scoring the shape-shifting variant</span>
+<span id="L1023" class="LineNr">1023 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L1024" class="LineNr">1024 </span>
+<span id="L1025" class="LineNr">1025 </span><span class="Delimiter">:(scenario specialize_literal_as_address)</span>
+<span id="L1026" class="LineNr">1026 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1027" class="LineNr">1027 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>foo<span class="Constant"> null</span>
+<span id="L1028" class="LineNr">1028 </span>]
+<span id="L1029" class="LineNr">1029 </span><span class="Comment"># variant with concrete address type</span>
+<span id="L1030" class="LineNr">1030 </span><span class="muRecipe">def</span> foo x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L1031" class="LineNr">1031 </span>  local-scope
+<span id="L1032" class="LineNr">1032 </span>  load-ingredients
+<span id="L1033" class="LineNr">1033 </span>  <span class="Identifier">return</span> <span class="Constant">34</span>
+<span id="L1034" class="LineNr">1034 </span>]
+<span id="L1035" class="LineNr">1035 </span><span class="Comment"># shape-shifting variant</span>
+<span id="L1036" class="LineNr">1036 </span><span class="muRecipe">def</span> foo x:&amp;:_elem<span class="muRecipe"> -&gt; </span>y:num [
+<span id="L1037" class="LineNr">1037 </span>  local-scope
+<span id="L1038" class="LineNr">1038 </span>  load-ingredients
+<span id="L1039" class="LineNr">1039 </span>  <span class="Identifier">return</span> <span class="Constant">35</span>
+<span id="L1040" class="LineNr">1040 </span>]
+<span id="L1041" class="LineNr">1041 </span><span class="Comment"># prefer the concrete variant, ignore concrete types in scoring the shape-shifting variant</span>
+<span id="L1042" class="LineNr">1042 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L1043" class="LineNr">1043 </span>
+<span id="L1044" class="LineNr">1044 </span><span class="Delimiter">:(scenario missing_type_during_specialization)</span>
+<span id="L1045" class="LineNr">1045 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L1046" class="LineNr">1046 </span><span class="Comment"># define a shape-shifting recipe</span>
+<span id="L1047" class="LineNr">1047 </span><span class="muRecipe">def</span> foo a:_elem [
+<span id="L1048" class="LineNr">1048 </span>]
+<span id="L1049" class="LineNr">1049 </span><span class="Comment"># define a container with field 'z'</span>
+<span id="L1050" class="LineNr">1050 </span><span class="muData">container</span> foo2 [
+<span id="L1051" class="LineNr">1051 </span>  <span class="Normal">z</span>:num
+<span id="L1052" class="LineNr">1052 </span>]
+<span id="L1053" class="LineNr">1053 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1054" class="LineNr">1054 </span>  local-scope
+<span id="L1055" class="LineNr">1055 </span>  <span class="Normal">x</span>:foo2<span class="Special"> &lt;- </span>merge <span class="Constant">34</span>
+<span id="L1056" class="LineNr">1056 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>get x<span class="Delimiter">,</span> z:offse  <span class="Comment"># typo in 'offset'</span>
+<span id="L1057" class="LineNr">1057 </span><span class="PreProc">  </span><span class="Comment"># define a variable with the same name 'z'</span>
+<span id="L1058" class="LineNr">1058 </span>  <span class="Normal">z</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L1059" class="LineNr">1059 </span>  <span class="Comment"># trigger specialization of the shape-shifting recipe</span>
+<span id="L1060" class="LineNr">1060 </span>  foo z
+<span id="L1061" class="LineNr">1061 </span>]
+<span id="L1062" class="LineNr">1062 </span><span class="Comment"># shouldn't crash</span>
+<span id="L1063" class="LineNr">1063 </span>
+<span id="L1064" class="LineNr">1064 </span><span class="Delimiter">:(scenario missing_type_during_specialization2)</span>
+<span id="L1065" class="LineNr">1065 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L1066" class="LineNr">1066 </span><span class="Comment"># define a shape-shifting recipe</span>
+<span id="L1067" class="LineNr">1067 </span><span class="muRecipe">def</span> foo a:_elem [
+<span id="L1068" class="LineNr">1068 </span>]
+<span id="L1069" class="LineNr">1069 </span><span class="Comment"># define a container with field 'z'</span>
+<span id="L1070" class="LineNr">1070 </span><span class="muData">container</span> foo2 [
+<span id="L1071" class="LineNr">1071 </span>  <span class="Normal">z</span>:num
+<span id="L1072" class="LineNr">1072 </span>]
+<span id="L1073" class="LineNr">1073 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1074" class="LineNr">1074 </span>  local-scope
+<span id="L1075" class="LineNr">1075 </span>  <span class="Normal">x</span>:foo2<span class="Special"> &lt;- </span>merge <span class="Constant">34</span>
+<span id="L1076" class="LineNr">1076 </span>  <span class="Normal">y</span>:num<span class="Special"> &lt;- </span>get x<span class="Delimiter">,</span> z:offse  <span class="Comment"># typo in 'offset'</span>
+<span id="L1077" class="LineNr">1077 </span><span class="PreProc">  </span><span class="Comment"># define a variable with the same name 'z'</span>
+<span id="L1078" class="LineNr">1078 </span>  <span class="Normal">z</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L1079" class="LineNr">1079 </span>  <span class="Comment"># trigger specialization of the shape-shifting recipe</span>
+<span id="L1080" class="LineNr">1080 </span>  foo *z
+<span id="L1081" class="LineNr">1081 </span>]
+<span id="L1082" class="LineNr">1082 </span><span class="Comment"># shouldn't crash</span>
+<span id="L1083" class="LineNr">1083 </span>
+<span id="L1084" class="LineNr">1084 </span><span class="Delimiter">:(scenario tangle_shape_shifting_recipe)</span>
+<span id="L1085" class="LineNr">1085 </span><span class="Comment"># shape-shifting recipe</span>
+<span id="L1086" class="LineNr">1086 </span><span class="muRecipe">def</span> foo a:_elem [
+<span id="L1087" class="LineNr">1087 </span>  local-scope
+<span id="L1088" class="LineNr">1088 </span>  load-ingredients
+<span id="L1089" class="LineNr">1089 </span>  &lt;label1&gt;
+<span id="L1090" class="LineNr">1090 </span>]
+<span id="L1091" class="LineNr">1091 </span><span class="Comment"># tangle some code that refers to the type ingredient</span>
+<span id="L1092" class="LineNr">1092 </span><span class="muRecipe">after</span> &lt;label1&gt; [
+<span id="L1093" class="LineNr">1093 </span>  <span class="Normal">b</span>:_elem<span class="Special"> &lt;- </span>copy a
+<span id="L1094" class="LineNr">1094 </span>]
+<span id="L1095" class="LineNr">1095 </span><span class="Comment"># trigger specialization</span>
+<span id="L1096" class="LineNr">1096 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1097" class="LineNr">1097 </span>  local-scope
+<span id="L1098" class="LineNr">1098 </span>  foo <span class="Constant">34</span>
+<span id="L1099" class="LineNr">1099 </span>]
+<span id="L1100" class="LineNr">1100 </span>$error: <span class="Constant">0</span>
+<span id="L1101" class="LineNr">1101 </span>
+<span id="L1102" class="LineNr">1102 </span><span class="Delimiter">:(scenario tangle_shape_shifting_recipe_with_type_abbreviation)</span>
+<span id="L1103" class="LineNr">1103 </span><span class="Comment"># shape-shifting recipe</span>
+<span id="L1104" class="LineNr">1104 </span><span class="muRecipe">def</span> foo a:_elem [
+<span id="L1105" class="LineNr">1105 </span>  local-scope
+<span id="L1106" class="LineNr">1106 </span>  load-ingredients
+<span id="L1107" class="LineNr">1107 </span>  &lt;label1&gt;
+<span id="L1108" class="LineNr">1108 </span>]
+<span id="L1109" class="LineNr">1109 </span><span class="Comment"># tangle some code that refers to the type ingredient</span>
+<span id="L1110" class="LineNr">1110 </span><span class="muRecipe">after</span> &lt;label1&gt; [
+<span id="L1111" class="LineNr">1111 </span>  <span class="Normal">b</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>copy<span class="Constant"> false</span>  <span class="Comment"># type abbreviation</span>
+<span id="L1112" class="LineNr">1112 </span>]
+<span id="L1113" class="LineNr">1113 </span><span class="Comment"># trigger specialization</span>
+<span id="L1114" class="LineNr">1114 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1115" class="LineNr">1115 </span>  local-scope
+<span id="L1116" class="LineNr">1116 </span>  foo <span class="Constant">34</span>
+<span id="L1117" class="LineNr">1117 </span>]
+<span id="L1118" class="LineNr">1118 </span>$error: <span class="Constant">0</span>
+<span id="L1119" class="LineNr">1119 </span>
+<span id="L1120" class="LineNr">1120 </span><span class="Delimiter">:(scenario shape_shifting_recipe_coexists_with_primitive)</span>
+<span id="L1121" class="LineNr">1121 </span><span class="Comment"># recipe overloading a primitive with a generic type</span>
+<span id="L1122" class="LineNr">1122 </span><span class="muRecipe">def</span> add a:&amp;:foo:_elem [
+<span id="L1123" class="LineNr">1123 </span>  assert <span class="Constant">0</span><span class="Delimiter">,</span> [should <span class="Normal">not</span> get here]
+<span id="L1124" class="LineNr">1124 </span>]
+<span id="L1125" class="LineNr">1125 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1126" class="LineNr">1126 </span>  <span class="Comment"># call primitive add with literal 0</span>
+<span id="L1127" class="LineNr">1127 </span>  add <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">0</span>
+<span id="L1128" class="LineNr">1128 </span>]
+<span id="L1129" class="LineNr">1129 </span>$error: <span class="Constant">0</span>
+<span id="L1130" class="LineNr">1130 </span>
+<span id="L1131" class="LineNr">1131 </span><span class="Delimiter">:(scenario specialization_heuristic_test_1)</span>
+<span id="L1132" class="LineNr">1132 </span><span class="Comment"># modeled on the 'buffer' container in text.mu</span>
+<span id="L1133" class="LineNr">1133 </span><span class="muData">container</span> foo_buffer:_elem [
+<span id="L1134" class="LineNr">1134 </span>  <span class="Normal">x</span>:num
+<span id="L1135" class="LineNr">1135 </span>]
+<span id="L1136" class="LineNr">1136 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L1137" class="LineNr">1137 </span>  append <span class="Constant">1</span>:&amp;:foo_buffer:<span class="Normal">char</span>/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">2</span>:text/<span class="Special">raw</span>
 <span id="L1138" class="LineNr">1138 </span>]
-<span id="L1139" class="LineNr">1139 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L1140" class="LineNr">1140 </span>  append <span class="Constant">1</span>:&amp;:foo_buffer:<span class="Normal">char</span>/<span class="Special">raw</span><span class="Delimiter">,</span> <span class="Constant">2</span>:text/<span class="Special">raw</span>
-<span id="L1141" class="LineNr">1141 </span>]
-<span id="L1142" class="LineNr">1142 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:_elem<span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:_elem [
-<span id="L1143" class="LineNr">1143 </span>  local-scope
-<span id="L1144" class="LineNr">1144 </span>  load-ingredients
-<span id="L1145" class="LineNr">1145 </span>  stash <span class="Constant">34</span>
-<span id="L1146" class="LineNr">1146 </span>]
-<span id="L1147" class="LineNr">1147 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:<span class="Normal">char</span><span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:<span class="Normal">char</span> [
-<span id="L1148" class="LineNr">1148 </span>  local-scope
-<span id="L1149" class="LineNr">1149 </span>  load-ingredients
-<span id="L1150" class="LineNr">1150 </span>  stash <span class="Constant">35</span>
-<span id="L1151" class="LineNr">1151 </span>]
-<span id="L1152" class="LineNr">1152 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:_elem<span class="Delimiter">,</span> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:_elem [
-<span id="L1153" class="LineNr">1153 </span>  local-scope
-<span id="L1154" class="LineNr">1154 </span>  load-ingredients
-<span id="L1155" class="LineNr">1155 </span>  stash <span class="Constant">36</span>
-<span id="L1156" class="LineNr">1156 </span>]
-<span id="L1157" class="LineNr">1157 </span><span class="traceContains">+app: 36</span>
+<span id="L1139" class="LineNr">1139 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:_elem<span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:_elem [
+<span id="L1140" class="LineNr">1140 </span>  local-scope
+<span id="L1141" class="LineNr">1141 </span>  load-ingredients
+<span id="L1142" class="LineNr">1142 </span>  stash <span class="Constant">34</span>
+<span id="L1143" class="LineNr">1143 </span>]
+<span id="L1144" class="LineNr">1144 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:<span class="Normal">char</span><span class="Delimiter">,</span> x:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:<span class="Normal">char</span> [
+<span id="L1145" class="LineNr">1145 </span>  local-scope
+<span id="L1146" class="LineNr">1146 </span>  load-ingredients
+<span id="L1147" class="LineNr">1147 </span>  stash <span class="Constant">35</span>
+<span id="L1148" class="LineNr">1148 </span>]
+<span id="L1149" class="LineNr">1149 </span><span class="muRecipe">def</span> append buf:&amp;:foo_buffer:_elem<span class="Delimiter">,</span> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>buf:&amp;:foo_buffer:_elem [
+<span id="L1150" class="LineNr">1150 </span>  local-scope
+<span id="L1151" class="LineNr">1151 </span>  load-ingredients
+<span id="L1152" class="LineNr">1152 </span>  stash <span class="Constant">36</span>
+<span id="L1153" class="LineNr">1153 </span>]
+<span id="L1154" class="LineNr">1154 </span><span class="traceContains">+app: 36</span>
 </pre>
 </body>
 </html>
diff --git a/html/057immutable.cc.html b/html/057immutable.cc.html
index f0ea4e20..1bf26363 100644
--- a/html/057immutable.cc.html
+++ b/html/057immutable.cc.html
@@ -141,7 +141,7 @@ if ('onhashchange' in window) {
 <span id="L78" class="LineNr"> 78 </span>  load-ingredients
 <span id="L79" class="LineNr"> 79 </span>  *x<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L80" class="LineNr"> 80 </span>]
-<span id="L81" class="LineNr"> 81 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L32'>instruction</a> '*x &lt;- copy 34' because it's an ingredient of recipe foo but not also a product</span>
+<span id="L81" class="LineNr"> 81 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L33'>instruction</a> '*x &lt;- copy 34' because it's an ingredient of recipe foo but not also a product</span>
 <span id="L82" class="LineNr"> 82 </span>
 <span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(scenario cannot_modify_immutable_containers)</span>
 <span id="L84" class="LineNr"> 84 </span><span class="Special">% Hide_errors = true;</span>
@@ -161,7 +161,7 @@ if ('onhashchange' in window) {
 <span id="L98" class="LineNr"> 98 </span>  <span class="Comment"># It also makes the rules easier to reason about. If it's just an ingredient, just don't try to change it.</span>
 <span id="L99" class="LineNr"> 99 </span>  y<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> y<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">37</span>
 <span id="L100" class="LineNr">100 </span>]
-<span id="L101" class="LineNr">101 </span><span class="traceContains">+error: foo: cannot modify 'y' in <a href='010vm.cc.html#L32'>instruction</a> 'y &lt;- put y, x:offset, 37' because that would modify 'x' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
+<span id="L101" class="LineNr">101 </span><span class="traceContains">+error: foo: cannot modify 'y' in <a href='010vm.cc.html#L33'>instruction</a> 'y &lt;- put y, x:offset, 37' because that would modify 'x' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
 <span id="L102" class="LineNr">102 </span>
 <span id="L103" class="LineNr">103 </span><span class="Delimiter">:(scenario can_modify_immutable_pointers)</span>
 <span id="L104" class="LineNr">104 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
@@ -173,7 +173,7 @@ if ('onhashchange' in window) {
 <span id="L110" class="LineNr">110 </span>  local-scope
 <span id="L111" class="LineNr">111 </span>  load-ingredients
 <span id="L112" class="LineNr">112 </span>  <span class="Comment"># modify the address, not the payload</span>
-<span id="L113" class="LineNr">113 </span>  x<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L113" class="LineNr">113 </span>  x<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
 <span id="L114" class="LineNr">114 </span>]
 <span id="L115" class="LineNr">115 </span>$error: <span class="Constant">0</span>
 <span id="L116" class="LineNr">116 </span>
@@ -193,7 +193,7 @@ if ('onhashchange' in window) {
 <span id="L130" class="LineNr">130 </span>  <span class="Comment"># this could be ok, but we're not going to try to be that smart</span>
 <span id="L131" class="LineNr">131 </span>  *x<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
 <span id="L132" class="LineNr">132 </span>]
-<span id="L133" class="LineNr">133 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L32'>instruction</a> '*x &lt;- copy 34' because it's an ingredient of recipe foo but not also a product</span>
+<span id="L133" class="LineNr">133 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L33'>instruction</a> '*x &lt;- copy 34' because it's an ingredient of recipe foo but not also a product</span>
 <span id="L134" class="LineNr">134 </span>
 <span id="L135" class="LineNr">135 </span><span class="Delimiter">:(scenario cannot_call_mutating_recipes_on_immutable_ingredients)</span>
 <span id="L136" class="LineNr">136 </span><span class="Special">% Hide_errors = true;</span>
@@ -213,7 +213,7 @@ if ('onhashchange' in window) {
 <span id="L150" class="LineNr">150 </span>  <span class="Comment"># p could be modified here, but it doesn't have to be, it's already marked</span>
 <span id="L151" class="LineNr">151 </span>  <span class="Comment"># mutable in the header</span>
 <span id="L152" class="LineNr">152 </span>]
-<span id="L153" class="LineNr">153 </span><span class="traceContains">+error: foo: cannot modify 'p' in <a href='010vm.cc.html#L32'>instruction</a> 'bar p' because it's an ingredient of recipe foo but not also a product</span>
+<span id="L153" class="LineNr">153 </span><span class="traceContains">+error: foo: cannot modify 'p' in <a href='010vm.cc.html#L33'>instruction</a> 'bar p' because it's an ingredient of recipe foo but not also a product</span>
 <span id="L154" class="LineNr">154 </span>
 <span id="L155" class="LineNr">155 </span><span class="Delimiter">:(scenario cannot_modify_copies_of_immutable_ingredients)</span>
 <span id="L156" class="LineNr">156 </span><span class="Special">% Hide_errors = true;</span>
@@ -228,7 +228,7 @@ if ('onhashchange' in window) {
 <span id="L165" class="LineNr">165 </span>  <span class="Normal">q</span>:&amp;:point<span class="Special"> &lt;- </span>copy p
 <span id="L166" class="LineNr">166 </span>  *q<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *q<span class="Delimiter">,</span> <span class="Constant">x:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
 <span id="L167" class="LineNr">167 </span>]
-<span id="L168" class="LineNr">168 </span><span class="traceContains">+error: foo: cannot modify 'q' in <a href='010vm.cc.html#L32'>instruction</a> '*q &lt;- put *q, x:offset, 34' because that would modify p which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
+<span id="L168" class="LineNr">168 </span><span class="traceContains">+error: foo: cannot modify 'q' in <a href='010vm.cc.html#L33'>instruction</a> '*q &lt;- put *q, x:offset, 34' because that would modify p which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
 <span id="L169" class="LineNr">169 </span>
 <span id="L170" class="LineNr">170 </span><span class="Delimiter">:(scenario can_modify_copies_of_mutable_ingredients)</span>
 <span id="L171" class="LineNr">171 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
@@ -258,7 +258,7 @@ if ('onhashchange' in window) {
 <span id="L195" class="LineNr">195 </span>  <span class="Normal">x</span>:&amp;:@:num<span class="Special"> &lt;- </span>get *a<span class="Delimiter">,</span> <span class="Constant">x:offset</span>  <span class="Comment"># just a regular get of the container</span>
 <span id="L196" class="LineNr">196 </span>  *x<span class="Special"> &lt;- </span>put-index *x<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>  <span class="Comment"># but then a put-index on the result</span>
 <span id="L197" class="LineNr">197 </span>]
-<span id="L198" class="LineNr">198 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L32'>instruction</a> '*x &lt;- put-index *x, 0, 34' because that would modify a which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
+<span id="L198" class="LineNr">198 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L33'>instruction</a> '*x &lt;- put-index *x, 0, 34' because that would modify a which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
 <span id="L199" class="LineNr">199 </span>
 <span id="L200" class="LineNr">200 </span><span class="Delimiter">:(scenario cannot_modify_address_inside_immutable_ingredients_2)</span>
 <span id="L201" class="LineNr">201 </span><span class="muData">container</span> foo [
@@ -270,7 +270,7 @@ if ('onhashchange' in window) {
 <span id="L207" class="LineNr">207 </span><span class="muRecipe">def</span> foo a:&amp;:foo [
 <span id="L208" class="LineNr">208 </span>  local-scope
 <span id="L209" class="LineNr">209 </span>  load-ingredients
-<span id="L210" class="LineNr">210 </span>  <span class="Normal">b</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">0</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Normal">b</span>:foo<span class="Special"> &lt;- </span>merge<span class="Constant"> null</span>
 <span id="L211" class="LineNr">211 </span>  <span class="Comment"># modify b, completely unrelated to immutable ingredient a</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Normal">x</span>:&amp;:@:num<span class="Special"> &lt;- </span>get b<span class="Delimiter">,</span> <span class="Constant">x:offset</span>
 <span id="L213" class="LineNr">213 </span>  *x<span class="Special"> &lt;- </span>put-index *x<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span>
@@ -288,7 +288,7 @@ if ('onhashchange' in window) {
 <span id="L225" class="LineNr">225 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>index *a<span class="Delimiter">,</span> <span class="Constant">0</span>  <span class="Comment"># just a regular index of the array</span>
 <span id="L226" class="LineNr">226 </span>  *x<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>  <span class="Comment"># but then modify the result</span>
 <span id="L227" class="LineNr">227 </span>]
-<span id="L228" class="LineNr">228 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L32'>instruction</a> '*x &lt;- copy 34' because that would modify a which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
+<span id="L228" class="LineNr">228 </span><span class="traceContains">+error: foo: cannot modify 'x' in <a href='010vm.cc.html#L33'>instruction</a> '*x &lt;- copy 34' because that would modify a which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
 <span id="L229" class="LineNr">229 </span>
 <span id="L230" class="LineNr">230 </span><span class="Delimiter">:(scenario cannot_modify_address_inside_immutable_ingredients_4)</span>
 <span id="L231" class="LineNr">231 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
@@ -297,7 +297,7 @@ if ('onhashchange' in window) {
 <span id="L234" class="LineNr">234 </span><span class="muRecipe">def</span> foo a:&amp;:@:&amp;:num [
 <span id="L235" class="LineNr">235 </span>  local-scope
 <span id="L236" class="LineNr">236 </span>  load-ingredients
-<span id="L237" class="LineNr">237 </span>  <span class="Normal">b</span>:&amp;:@:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span>: type<span class="Delimiter">},</span> <span class="Constant">3</span>
+<span id="L237" class="LineNr">237 </span>  <span class="Normal">b</span>:&amp;:@:&amp;:num<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Delimiter">{(</span><a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">)</span>: type<span class="Delimiter">},</span> <span class="Constant">3</span>
 <span id="L238" class="LineNr">238 </span>  <span class="Comment"># modify b, completely unrelated to immutable ingredient a</span>
 <span id="L239" class="LineNr">239 </span>  <span class="Normal">x</span>:&amp;:num<span class="Special"> &lt;- </span>index *b<span class="Delimiter">,</span> <span class="Constant">0</span>
 <span id="L240" class="LineNr">240 </span>  *x<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
@@ -374,7 +374,7 @@ if ('onhashchange' in window) {
 <span id="L311" class="LineNr">311 </span>  load-ingredients
 <span id="L312" class="LineNr">312 </span>  <span class="Normal">p</span>:&amp;:point<span class="Special"> &lt;- </span>next-ingredient  <span class="Comment"># optional ingredient; assumed to be mutable</span>
 <span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span><span class="traceContains">+error: foo: cannot modify 'p' in <a href='010vm.cc.html#L32'>instruction</a> 'bar p' because it's an ingredient of recipe foo but not also a product</span>
+<span id="L314" class="LineNr">314 </span><span class="traceContains">+error: foo: cannot modify 'p' in <a href='010vm.cc.html#L33'>instruction</a> 'bar p' because it's an ingredient of recipe foo but not also a product</span>
 <span id="L315" class="LineNr">315 </span>
 <span id="L316" class="LineNr">316 </span><span class="Comment">//: when checking for immutable ingredients, remember to take space into account</span>
 <span id="L317" class="LineNr">317 </span><span class="Delimiter">:(scenario check_space_of_reagents_in_immutability_checks)</span>
@@ -407,30 +407,30 @@ if ('onhashchange' in window) {
 <span id="L344" class="LineNr">344 </span>  <span class="Comment">//   b) we never call 'put' or 'put-index' on it, and</span>
 <span id="L345" class="LineNr">345 </span>  <span class="Comment">//   c) any non-primitive recipe calls in the body aren't returning it as a product</span>
 <span id="L346" class="LineNr">346 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L347" class="LineNr">347 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check mutability of ingredients in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L347" class="LineNr">347 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check mutability of ingredients in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L348" class="LineNr">348 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!caller<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// skip check for old-style recipes calling next-ingredient directly</span>
 <span id="L349" class="LineNr">349 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L350" class="LineNr">350 </span>    <span class="Normal">const</span> reagent&amp; current_ingredient = caller<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L351" class="LineNr">351 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='057immutable.cc.html#L522'>is_present_in_products</a><span class="Delimiter">(</span>caller<span class="Delimiter">,</span> current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// not expected to be immutable</span>
+<span id="L351" class="LineNr">351 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='057immutable.cc.html#L536'>is_present_in_products</a><span class="Delimiter">(</span>caller<span class="Delimiter">,</span> current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// not expected to be immutable</span>
 <span id="L352" class="LineNr">352 </span>    <span class="Comment">// End Immutable Ingredients Special-cases</span>
-<span id="L353" class="LineNr">353 </span>    set&lt;reagent&gt; immutable_vars<span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>    set&lt;reagent<span class="Delimiter">,</span> name_and_space_lt&gt; immutable_vars<span class="Delimiter">;</span>
 <span id="L354" class="LineNr">354 </span>    immutable_vars<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">);</span>
 <span id="L355" class="LineNr">355 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L356" class="LineNr">356 </span>      <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L357" class="LineNr">357 </span>      <a href='057immutable.cc.html#L464'>check_immutable_ingredient_in_instruction</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> immutable_vars<span class="Delimiter">,</span> current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
+<span id="L357" class="LineNr">357 </span>      <a href='057immutable.cc.html#L478'>check_immutable_ingredient_in_instruction</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> immutable_vars<span class="Delimiter">,</span> current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">,</span> caller<span class="Delimiter">);</span>
 <span id="L358" class="LineNr">358 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation == INDEX &amp;&amp; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span> &amp;&amp; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>name == current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L359" class="LineNr">359 </span>      <a href='057immutable.cc.html#L364'>update_aliases</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> immutable_vars<span class="Delimiter">);</span>
 <span id="L360" class="LineNr">360 </span>    <span class="Delimiter">}</span>
 <span id="L361" class="LineNr">361 </span>  <span class="Delimiter">}</span>
 <span id="L362" class="LineNr">362 </span><span class="Delimiter">}</span>
 <span id="L363" class="LineNr">363 </span>
-<span id="L364" class="LineNr">364 </span><span class="Normal">void</span> <a href='057immutable.cc.html#L364'>update_aliases</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> set&lt;reagent&gt;&amp; current_ingredient_and_aliases<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L365" class="LineNr">365 </span>  set&lt;<span class="Normal">int</span>&gt; current_ingredient_indices = <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> current_ingredient_and_aliases<span class="Delimiter">);</span>
+<span id="L364" class="LineNr">364 </span><span class="Normal">void</span> <a href='057immutable.cc.html#L364'>update_aliases</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> set&lt;reagent<span class="Delimiter">,</span> name_and_space_lt&gt;&amp; current_ingredient_and_aliases<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L365" class="LineNr">365 </span>  set&lt;<span class="Normal">int</span>&gt; current_ingredient_indices = <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> current_ingredient_and_aliases<span class="Delimiter">);</span>
 <span id="L366" class="LineNr">366 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L367" class="LineNr">367 </span>    <span class="Comment">// primitive recipe</span>
 <span id="L368" class="LineNr">368 </span>    <span class="Normal">switch</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L369" class="LineNr">369 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L195'>COPY</a>:
-<span id="L370" class="LineNr">370 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = current_ingredient_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != current_ingredient_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L369" class="LineNr">369 </span>      <span class="Normal">case</span> <a href='010vm.cc.html#L196'>COPY</a>:
+<span id="L370" class="LineNr">370 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = current_ingredient_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != current_ingredient_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
 <span id="L371" class="LineNr">371 </span>          current_ingredient_and_aliases<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>*p<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
 <span id="L372" class="LineNr">372 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L373" class="LineNr">373 </span>      <span class="Normal">case</span> GET:
@@ -448,17 +448,17 @@ if ('onhashchange' in window) {
 <span id="L385" class="LineNr">385 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L386" class="LineNr">386 </span>    <span class="Comment">// defined recipe</span>
 <span id="L387" class="LineNr">387 </span>    set&lt;<span class="Normal">int</span>&gt; contained_in_product_indices = <a href='057immutable.cc.html#L395'>scan_contained_in_product_indices</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> current_ingredient_indices<span class="Delimiter">);</span>
-<span id="L388" class="LineNr">388 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = contained_in_product_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != contained_in_product_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L388" class="LineNr">388 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = contained_in_product_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != contained_in_product_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L389" class="LineNr">389 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>*p &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">))</span>
 <span id="L390" class="LineNr">390 </span>        current_ingredient_and_aliases<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
 <span id="L391" class="LineNr">391 </span>    <span class="Delimiter">}</span>
 <span id="L392" class="LineNr">392 </span>  <span class="Delimiter">}</span>
 <span id="L393" class="LineNr">393 </span><span class="Delimiter">}</span>
 <span id="L394" class="LineNr">394 </span>
-<span id="L395" class="LineNr">395 </span>set&lt;<span class="Normal">int</span>&gt; <a href='057immutable.cc.html#L395'>scan_contained_in_product_indices</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> set&lt;<span class="Normal">int</span>&gt;&amp; <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L396" class="LineNr">396 </span>  set&lt;reagent&gt; selected_ingredients<span class="Delimiter">;</span>
+<span id="L395" class="LineNr">395 </span>set&lt;<span class="Normal">int</span>&gt; <a href='057immutable.cc.html#L395'>scan_contained_in_product_indices</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> set&lt;<span class="Normal">int</span>&gt;&amp; <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L396" class="LineNr">396 </span>  set&lt;reagent<span class="Delimiter">,</span> name_and_space_lt&gt; selected_ingredients<span class="Delimiter">;</span>
 <span id="L397" class="LineNr">397 </span>  <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">);</span>
-<span id="L398" class="LineNr">398 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L399" class="LineNr">399 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*p &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// optional immutable ingredient</span>
 <span id="L400" class="LineNr">400 </span>    selected_ingredients<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>*p<span class="Delimiter">));</span>
 <span id="L401" class="LineNr">401 </span>  <span class="Delimiter">}</span>
@@ -466,7 +466,7 @@ if ('onhashchange' in window) {
 <span id="L403" class="LineNr">403 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L404" class="LineNr">404 </span>    <span class="Normal">const</span> reagent&amp; current_product = callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L405" class="LineNr">405 </span>    <span class="Normal">const</span> string_tree* contained_in_name = property<span class="Delimiter">(</span>current_product<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">);</span>
-<span id="L406" class="LineNr">406 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contained_in_name &amp;&amp; selected_ingredients<span class="Delimiter">.</span>find<span class="Delimiter">(</span>contained_in_name<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> != selected_ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span>
+<span id="L406" class="LineNr">406 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contained_in_name &amp;&amp; selected_ingredients<span class="Delimiter">.</span>find<span class="Delimiter">(</span>contained_in_name<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> != selected_ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span>
 <span id="L407" class="LineNr">407 </span>      result<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L408" class="LineNr">408 </span>  <span class="Delimiter">}</span>
 <span id="L409" class="LineNr">409 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
@@ -476,205 +476,219 @@ if ('onhashchange' in window) {
 <span id="L413" class="LineNr">413 </span>  <span class="Identifier">return</span> is_mu_container<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L414" class="LineNr">414 </span><span class="Delimiter">}</span>
 <span id="L415" class="LineNr">415 </span><span class="Normal">bool</span> is_mu_container<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L416" class="LineNr">416 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L416" class="LineNr">416 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L417" class="LineNr">417 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
 <span id="L418" class="LineNr">418 </span>    <span class="Identifier">return</span> is_mu_container<span class="Delimiter">(</span>get_base_type<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L419" class="LineNr">419 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L420" class="LineNr">420 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
 <span id="L421" class="LineNr">421 </span>  type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L422" class="LineNr">422 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">;</span>
+<span id="L422" class="LineNr">422 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">;</span>
 <span id="L423" class="LineNr">423 </span><span class="Delimiter">}</span>
 <span id="L424" class="LineNr">424 </span>
 <span id="L425" class="LineNr">425 </span><span class="Normal">bool</span> is_mu_exclusive_container<span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L426" class="LineNr">426 </span>  <span class="Identifier">return</span> is_mu_exclusive_container<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L427" class="LineNr">427 </span><span class="Delimiter">}</span>
 <span id="L428" class="LineNr">428 </span><span class="Normal">bool</span> is_mu_exclusive_container<span class="Delimiter">(</span><span class="Normal">const</span> type_tree* type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L429" class="LineNr">429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L430" class="LineNr">430 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span>
 <span id="L431" class="LineNr">431 </span>    <span class="Identifier">return</span> is_mu_exclusive_container<span class="Delimiter">(</span>get_base_type<span class="Delimiter">(</span>type<span class="Delimiter">));</span>
-<span id="L432" class="LineNr">432 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L433" class="LineNr">433 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
+<span id="L432" class="LineNr">432 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L433" class="LineNr">433 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
 <span id="L434" class="LineNr">434 </span>  type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L435" class="LineNr">435 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L180'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Identifier">return</span> info<span class="Delimiter">.</span>kind == <a href='010vm.cc.html#L181'>EXCLUSIVE_CONTAINER</a><span class="Delimiter">;</span>
 <span id="L436" class="LineNr">436 </span><span class="Delimiter">}</span>
 <span id="L437" class="LineNr">437 </span>
-<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L439" class="LineNr">439 </span><span class="Delimiter">:(scenario immutability_infects_contained_in_variables)</span>
-<span id="L440" class="LineNr">440 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L441" class="LineNr">441 </span><span class="muData">container</span> test-list [
-<span id="L442" class="LineNr">442 </span>  <span class="Normal">value</span>:num
-<span id="L443" class="LineNr">443 </span>  <span class="Normal">next</span>:&amp;:test-list
-<span id="L444" class="LineNr">444 </span>]
-<span id="L445" class="LineNr">445 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L446" class="LineNr">446 </span>  local-scope
-<span id="L447" class="LineNr">447 </span>  <span class="Normal">p</span>:&amp;:test-list<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">test-list:type</span>
-<span id="L448" class="LineNr">448 </span>  foo p
-<span id="L449" class="LineNr">449 </span>]
-<span id="L450" class="LineNr">450 </span><span class="muRecipe">def</span> foo p:&amp;:test-list [  <span class="Comment"># p is immutable</span>
-<span id="L451" class="LineNr">451 </span>  local-scope
-<span id="L452" class="LineNr">452 </span>  load-ingredients
-<span id="L453" class="LineNr">453 </span>  <span class="Normal">p2</span>:&amp;:test-list<span class="Special"> &lt;- </span>test-next p  <span class="Comment"># p2 is immutable</span>
-<span id="L454" class="LineNr">454 </span>  *p2<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *p2<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L455" class="LineNr">455 </span>]
-<span id="L456" class="LineNr">456 </span><span class="muRecipe">def</span> test-next x:&amp;:test-list<span class="muRecipe"> -&gt; </span>y:&amp;:test-list/contained-in:x [
-<span id="L457" class="LineNr">457 </span>  local-scope
-<span id="L458" class="LineNr">458 </span>  load-ingredients
-<span id="L459" class="LineNr">459 </span>  y<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">next:offset</span>
-<span id="L460" class="LineNr">460 </span>]
-<span id="L461" class="LineNr">461 </span><span class="traceContains">+error: foo: cannot modify 'p2' in <a href='010vm.cc.html#L32'>instruction</a> '*p2 &lt;- put *p2, value:offset, 34' because that would modify p which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
-<span id="L462" class="LineNr">462 </span>
-<span id="L463" class="LineNr">463 </span><span class="Delimiter">:(code)</span>
-<span id="L464" class="LineNr">464 </span><span class="Normal">void</span> <a href='057immutable.cc.html#L464'>check_immutable_ingredient_in_instruction</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;reagent&gt;&amp; current_ingredient_and_aliases<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; original_ingredient_name<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L465" class="LineNr">465 </span>  <span class="Comment">// first check if the instruction is directly modifying something it shouldn't</span>
-<span id="L466" class="LineNr">466 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L467" class="LineNr">467 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">)</span>
-<span id="L468" class="LineNr">468 </span>        &amp;&amp; current_ingredient_and_aliases<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != current_ingredient_and_aliases<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L469" class="LineNr">469 </span>      string current_product_name = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
-<span id="L470" class="LineNr">470 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>current_product_name == original_ingredient_name<span class="Delimiter">)</span>
-<span id="L471" class="LineNr">471 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_product_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L472" class="LineNr">472 </span>      <span class="Normal">else</span>
-<span id="L473" class="LineNr">473 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_product_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify &quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot; which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L474" class="LineNr">474 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L475" class="LineNr">475 </span>    <span class="Delimiter">}</span>
-<span id="L476" class="LineNr">476 </span>  <span class="Delimiter">}</span>
-<span id="L477" class="LineNr">477 </span>  <span class="Comment">// check if there's any indirect modification going on</span>
-<span id="L478" class="LineNr">478 </span>  set&lt;<span class="Normal">int</span>&gt; current_ingredient_indices = <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> current_ingredient_and_aliases<span class="Delimiter">);</span>
-<span id="L479" class="LineNr">479 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_indices<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// ingredient not found in call</span>
-<span id="L480" class="LineNr">480 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = current_ingredient_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != current_ingredient_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L481" class="LineNr">481 </span>    <span class="Normal">const</span> <span class="Normal">int</span> current_ingredient_index = *p<span class="Delimiter">;</span>
-<span id="L482" class="LineNr">482 </span>    reagent current_ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>current_ingredient_index<span class="Delimiter">);</span>
-<span id="L483" class="LineNr">483 </span>    canonize_type<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">);</span>
-<span id="L484" class="LineNr">484 </span>    <span class="Normal">const</span> string&amp; current_ingredient_name = current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L485" class="LineNr">485 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L486" class="LineNr">486 </span>      <span class="Comment">// primitive recipe</span>
-<span id="L487" class="LineNr">487 </span>      <span class="Comment">// we got here only because we got an instruction with an implicit product, and the instruction didn't explicitly spell it out</span>
-<span id="L488" class="LineNr">488 </span>      <span class="Comment">//    put x, y:offset, z</span>
-<span id="L489" class="LineNr">489 </span>      <span class="Comment">// instead of</span>
-<span id="L490" class="LineNr">490 </span>      <span class="Comment">//    x &lt;- put x, y:offset, z</span>
-<span id="L491" class="LineNr">491 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation == PUT || inst<span class="Delimiter">.</span>operation == PUT_INDEX<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L492" class="LineNr">492 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_index == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L493" class="LineNr">493 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_name == original_ingredient_name<span class="Delimiter">)</span>
-<span id="L494" class="LineNr">494 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L495" class="LineNr">495 </span>          <span class="Normal">else</span>
-<span id="L496" class="LineNr">496 </span>            <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify '&quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot;' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L497" class="LineNr">497 </span>        <span class="Delimiter">}</span>
-<span id="L498" class="LineNr">498 </span>      <span class="Delimiter">}</span>
-<span id="L499" class="LineNr">499 </span>    <span class="Delimiter">}</span>
-<span id="L500" class="LineNr">500 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L501" class="LineNr">501 </span>      <span class="Comment">// defined recipe</span>
-<span id="L502" class="LineNr">502 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='057immutable.cc.html#L512'>is_modified_in_recipe</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">,</span> current_ingredient_index<span class="Delimiter">,</span> caller<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L503" class="LineNr">503 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_name == original_ingredient_name<span class="Delimiter">)</span>
-<span id="L504" class="LineNr">504 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L505" class="LineNr">505 </span>        <span class="Normal">else</span>
-<span id="L506" class="LineNr">506 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L32'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify '&quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot;' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L507" class="LineNr">507 </span>      <span class="Delimiter">}</span>
-<span id="L508" class="LineNr">508 </span>    <span class="Delimiter">}</span>
-<span id="L509" class="LineNr">509 </span>  <span class="Delimiter">}</span>
-<span id="L510" class="LineNr">510 </span><span class="Delimiter">}</span>
-<span id="L511" class="LineNr">511 </span>
-<span id="L512" class="LineNr">512 </span><span class="Normal">bool</span> <a href='057immutable.cc.html#L512'>is_modified_in_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L513" class="LineNr">513 </span>  <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L514" class="LineNr">514 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L515" class="LineNr">515 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't check mutability of ingredients in recipe &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; because it uses 'next-ingredient' directly, rather than a recipe header.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L516" class="LineNr">516 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L517" class="LineNr">517 </span>  <span class="Delimiter">}</span>
-<span id="L518" class="LineNr">518 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>  <span class="Comment">// optional immutable ingredient</span>
-<span id="L519" class="LineNr">519 </span>  <span class="Identifier">return</span> <a href='057immutable.cc.html#L522'>is_present_in_products</a><span class="Delimiter">(</span>callee<span class="Delimiter">,</span> callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
-<span id="L520" class="LineNr">520 </span><span class="Delimiter">}</span>
-<span id="L521" class="LineNr">521 </span>
-<span id="L522" class="LineNr">522 </span><span class="Normal">bool</span> <a href='057immutable.cc.html#L522'>is_present_in_products</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; callee<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; ingredient_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L523" class="LineNr">523 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L524" class="LineNr">524 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == ingredient_name<span class="Delimiter">)</span>
-<span id="L525" class="LineNr">525 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L526" class="LineNr">526 </span>  <span class="Delimiter">}</span>
-<span id="L527" class="LineNr">527 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L528" class="LineNr">528 </span><span class="Delimiter">}</span>
-<span id="L529" class="LineNr">529 </span>
-<span id="L530" class="LineNr">530 </span>set&lt;<span class="Normal">int</span>&gt; <a href='057immutable.cc.html#L530'>ingredient_indices</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;reagent&gt;&amp; ingredient_names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L531" class="LineNr">531 </span>  set&lt;<span class="Normal">int</span>&gt; result<span class="Delimiter">;</span>
-<span id="L532" class="LineNr">532 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L533" class="LineNr">533 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L534" class="LineNr">534 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != ingredient_names<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span>
-<span id="L535" class="LineNr">535 </span>      result<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L536" class="LineNr">536 </span>  <span class="Delimiter">}</span>
-<span id="L537" class="LineNr">537 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L538" class="LineNr">538 </span><span class="Delimiter">}</span>
-<span id="L539" class="LineNr">539 </span>
-<span id="L540" class="LineNr">540 </span><span class="Comment">//: Sometimes you want to pass in two addresses, one pointing inside the</span>
-<span id="L541" class="LineNr">541 </span><span class="Comment">//: other. For example, you want to delete a node from a linked list. You</span>
-<span id="L542" class="LineNr">542 </span><span class="Comment">//: can't pass both pointers back out, because if a caller tries to make both</span>
-<span id="L543" class="LineNr">543 </span><span class="Comment">//: identical then you can't tell which value will be written on the way out.</span>
-<span id="L544" class="LineNr">544 </span><span class="Comment">//:</span>
-<span id="L545" class="LineNr">545 </span><span class="Comment">//: Experimental solution: just tell Mu that one points inside the other.</span>
-<span id="L546" class="LineNr">546 </span><span class="Comment">//: This way we can return just one pointer as high up as necessary to capture</span>
-<span id="L547" class="LineNr">547 </span><span class="Comment">//: all modifications performed by a recipe.</span>
-<span id="L548" class="LineNr">548 </span><span class="Comment">//:</span>
-<span id="L549" class="LineNr">549 </span><span class="Comment">//: We'll see if we end up wanting to abuse /contained-in for other reasons.</span>
-<span id="L550" class="LineNr">550 </span>
-<span id="L551" class="LineNr">551 </span><span class="Delimiter">:(scenarios transform)</span>
-<span id="L552" class="LineNr">552 </span><span class="Delimiter">:(scenario can_modify_contained_in_addresses)</span>
-<span id="L553" class="LineNr">553 </span><span class="muData">container</span> test-list [
-<span id="L554" class="LineNr">554 </span>  <span class="Normal">value</span>:num
-<span id="L555" class="LineNr">555 </span>  <span class="Normal">next</span>:&amp;:test-list
-<span id="L556" class="LineNr">556 </span>]
-<span id="L557" class="LineNr">557 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L558" class="LineNr">558 </span>  local-scope
-<span id="L559" class="LineNr">559 </span>  <span class="Normal">p</span>:&amp;:test-list<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">test-list:type</span>
-<span id="L560" class="LineNr">560 </span>  foo p
-<span id="L561" class="LineNr">561 </span>]
-<span id="L562" class="LineNr">562 </span><span class="muRecipe">def</span> foo p:&amp;:test-list<span class="muRecipe"> -&gt; </span>p:&amp;:test-list [
-<span id="L563" class="LineNr">563 </span>  local-scope
-<span id="L564" class="LineNr">564 </span>  load-ingredients
-<span id="L565" class="LineNr">565 </span>  <span class="Normal">p2</span>:&amp;:test-list<span class="Special"> &lt;- </span>test-next p
-<span id="L566" class="LineNr">566 </span>  p<span class="Special"> &lt;- </span>test-remove p2<span class="Delimiter">,</span> p
-<span id="L567" class="LineNr">567 </span>]
-<span id="L568" class="LineNr">568 </span><span class="muRecipe">def</span> test-next x:&amp;:test-list<span class="muRecipe"> -&gt; </span>y:&amp;:test-list [
-<span id="L569" class="LineNr">569 </span>  local-scope
-<span id="L570" class="LineNr">570 </span>  load-ingredients
-<span id="L571" class="LineNr">571 </span>  y<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">next:offset</span>
-<span id="L572" class="LineNr">572 </span>]
-<span id="L573" class="LineNr">573 </span><span class="muRecipe">def</span> test-remove x:&amp;:test-list/contained-in:from<span class="Delimiter">,</span> from:&amp;:test-list<span class="muRecipe"> -&gt; </span>from:&amp;:test-list [
-<span id="L574" class="LineNr">574 </span>  local-scope
-<span id="L575" class="LineNr">575 </span>  load-ingredients
-<span id="L576" class="LineNr">576 </span>  *x<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>  <span class="Comment"># can modify x</span>
-<span id="L577" class="LineNr">577 </span>]
-<span id="L578" class="LineNr">578 </span>$error: <span class="Constant">0</span>
-<span id="L579" class="LineNr">579 </span>
-<span id="L580" class="LineNr">580 </span><span class="Delimiter">:(before &quot;End Immutable Ingredients Special-cases&quot;)</span>
-<span id="L581" class="LineNr">581 </span><span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L582" class="LineNr">582 </span>  <span class="Normal">const</span> string_tree* tmp = property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">);</span>
-<span id="L583" class="LineNr">583 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp<span class="Delimiter">-&gt;</span>atom
-<span id="L584" class="LineNr">584 </span>      || <span class="Delimiter">(</span>!is_present_in_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span>
-<span id="L585" class="LineNr">585 </span>          &amp;&amp; !is_present_in_products<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L586" class="LineNr">586 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;/contained-in can only point to another ingredient or product, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L587" class="LineNr">587 </span>  <span class="Delimiter">}</span>
-<span id="L588" class="LineNr">588 </span>  <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L589" class="LineNr">589 </span><span class="Delimiter">}</span>
-<span id="L590" class="LineNr">590 </span>
-<span id="L591" class="LineNr">591 </span><span class="Delimiter">:(scenario contained_in_product)</span>
-<span id="L592" class="LineNr">592 </span><span class="muData">container</span> test-list [
-<span id="L593" class="LineNr">593 </span>  <span class="Normal">value</span>:num
-<span id="L594" class="LineNr">594 </span>  <span class="Normal">next</span>:&amp;:test-list
-<span id="L595" class="LineNr">595 </span>]
-<span id="L596" class="LineNr">596 </span><span class="muRecipe">def</span> foo x:&amp;:test-list/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:test-list [
-<span id="L597" class="LineNr">597 </span>  local-scope
-<span id="L598" class="LineNr">598 </span>  load-ingredients
-<span id="L599" class="LineNr">599 </span>  result<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L600" class="LineNr">600 </span>]
-<span id="L601" class="LineNr">601 </span>$error: <span class="Constant">0</span>
-<span id="L602" class="LineNr">602 </span>
-<span id="L603" class="LineNr">603 </span><span class="Delimiter">:(scenario contained_in_is_mutable)</span>
-<span id="L604" class="LineNr">604 </span><span class="muData">container</span> test-list [
-<span id="L605" class="LineNr">605 </span>  <span class="Normal">value</span>:num
-<span id="L606" class="LineNr">606 </span>  <span class="Normal">next</span>:&amp;:test-list
-<span id="L607" class="LineNr">607 </span>]
-<span id="L608" class="LineNr">608 </span><span class="muRecipe">def</span> foo x:&amp;:test-list/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:test-list [
-<span id="L609" class="LineNr">609 </span>  local-scope
-<span id="L610" class="LineNr">610 </span>  load-ingredients
-<span id="L611" class="LineNr">611 </span>  result<span class="Special"> &lt;- </span>copy x
-<span id="L612" class="LineNr">612 </span>  <a href='001help.cc.html#L221'>put</a> *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
-<span id="L613" class="LineNr">613 </span>]
-<span id="L614" class="LineNr">614 </span>$error: <span class="Constant">0</span>
+<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L439" class="LineNr">439 </span><span class="Comment">// reagent comparison -- only in the context of a single recipe</span>
+<span id="L440" class="LineNr">440 </span><span class="Normal">struct</span> <a href='057immutable.cc.html#L440'>name_and_space_lt</a> <span class="Delimiter">{</span>
+<span id="L441" class="LineNr">441 </span>  <span class="Normal">bool</span> <span class="Normal">operator</span><span class="Delimiter">()(</span><span class="Normal">const</span> reagent&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; b<span class="Delimiter">)</span> <span class="Normal">const</span><span class="Delimiter">;</span>
+<span id="L442" class="LineNr">442 </span><span class="Delimiter">};</span>
+<span id="L443" class="LineNr">443 </span><span class="Delimiter">:(code)</span>
+<span id="L444" class="LineNr">444 </span><span class="Normal">bool</span> <a href='057immutable.cc.html#L440'>name_and_space_lt</a>::<span class="Normal">operator</span><span class="Delimiter">()(</span><span class="Normal">const</span> reagent&amp; a<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; b<span class="Delimiter">)</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L445" class="LineNr">445 </span>  <span class="Normal">int</span> aspace = <span class="Constant">0</span><span class="Delimiter">,</span> bspace = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L446" class="LineNr">446 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>a<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> aspace = to_integer<span class="Delimiter">(</span>property<span class="Delimiter">(</span>a<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L447" class="LineNr">447 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>b<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">))</span> bspace = to_integer<span class="Delimiter">(</span>property<span class="Delimiter">(</span>b<span class="Delimiter">,</span> <span class="Constant">&quot;space&quot;</span><span class="Delimiter">)-&gt;</span>value<span class="Delimiter">);</span>
+<span id="L448" class="LineNr">448 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>aspace != bspace<span class="Delimiter">)</span> <span class="Identifier">return</span> aspace &lt; bspace<span class="Delimiter">;</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Identifier">return</span> a<span class="Delimiter">.</span>name &lt; b<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L450" class="LineNr">450 </span><span class="Delimiter">}</span>
+<span id="L451" class="LineNr">451 </span>
+<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L453" class="LineNr">453 </span><span class="Delimiter">:(scenario immutability_infects_contained_in_variables)</span>
+<span id="L454" class="LineNr">454 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L455" class="LineNr">455 </span><span class="muData">container</span> test-list [
+<span id="L456" class="LineNr">456 </span>  <span class="Normal">value</span>:num
+<span id="L457" class="LineNr">457 </span>  <span class="Normal">next</span>:&amp;:test-list
+<span id="L458" class="LineNr">458 </span>]
+<span id="L459" class="LineNr">459 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L460" class="LineNr">460 </span>  local-scope
+<span id="L461" class="LineNr">461 </span>  <span class="Normal">p</span>:&amp;:test-list<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">test-list:type</span>
+<span id="L462" class="LineNr">462 </span>  foo p
+<span id="L463" class="LineNr">463 </span>]
+<span id="L464" class="LineNr">464 </span><span class="muRecipe">def</span> foo p:&amp;:test-list [  <span class="Comment"># p is immutable</span>
+<span id="L465" class="LineNr">465 </span>  local-scope
+<span id="L466" class="LineNr">466 </span>  load-ingredients
+<span id="L467" class="LineNr">467 </span>  <span class="Normal">p2</span>:&amp;:test-list<span class="Special"> &lt;- </span>test-next p  <span class="Comment"># p2 is immutable</span>
+<span id="L468" class="LineNr">468 </span>  *p2<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *p2<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L469" class="LineNr">469 </span>]
+<span id="L470" class="LineNr">470 </span><span class="muRecipe">def</span> test-next x:&amp;:test-list<span class="muRecipe"> -&gt; </span>y:&amp;:test-list/contained-in:x [
+<span id="L471" class="LineNr">471 </span>  local-scope
+<span id="L472" class="LineNr">472 </span>  load-ingredients
+<span id="L473" class="LineNr">473 </span>  y<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">next:offset</span>
+<span id="L474" class="LineNr">474 </span>]
+<span id="L475" class="LineNr">475 </span><span class="traceContains">+error: foo: cannot modify 'p2' in <a href='010vm.cc.html#L33'>instruction</a> '*p2 &lt;- put *p2, value:offset, 34' because that would modify p which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> foo but not also a product</span>
+<span id="L476" class="LineNr">476 </span>
+<span id="L477" class="LineNr">477 </span><span class="Delimiter">:(code)</span>
+<span id="L478" class="LineNr">478 </span><span class="Normal">void</span> <a href='057immutable.cc.html#L478'>check_immutable_ingredient_in_instruction</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;reagent<span class="Delimiter">,</span> name_and_space_lt&gt;&amp; current_ingredient_and_aliases<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; original_ingredient_name<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L479" class="LineNr">479 </span>  <span class="Comment">// first check if the instruction is directly modifying something it shouldn't</span>
+<span id="L480" class="LineNr">480 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L481" class="LineNr">481 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> <span class="Constant">&quot;lookup&quot;</span><span class="Delimiter">)</span>
+<span id="L482" class="LineNr">482 </span>        &amp;&amp; current_ingredient_and_aliases<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != current_ingredient_and_aliases<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L483" class="LineNr">483 </span>      string current_product_name = inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
+<span id="L484" class="LineNr">484 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>current_product_name == original_ingredient_name<span class="Delimiter">)</span>
+<span id="L485" class="LineNr">485 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_product_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L486" class="LineNr">486 </span>      <span class="Normal">else</span>
+<span id="L487" class="LineNr">487 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_product_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify &quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot; which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L488" class="LineNr">488 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L489" class="LineNr">489 </span>    <span class="Delimiter">}</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Delimiter">}</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Comment">// check if there's any indirect modification going on</span>
+<span id="L492" class="LineNr">492 </span>  set&lt;<span class="Normal">int</span>&gt; current_ingredient_indices = <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> current_ingredient_and_aliases<span class="Delimiter">);</span>
+<span id="L493" class="LineNr">493 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_indices<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// ingredient not found in call</span>
+<span id="L494" class="LineNr">494 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>set&lt;<span class="Normal">int</span>&gt;::iterator p = current_ingredient_indices<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != current_ingredient_indices<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L495" class="LineNr">495 </span>    <span class="Normal">const</span> <span class="Normal">int</span> current_ingredient_index = *p<span class="Delimiter">;</span>
+<span id="L496" class="LineNr">496 </span>    reagent current_ingredient = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>current_ingredient_index<span class="Delimiter">);</span>
+<span id="L497" class="LineNr">497 </span>    canonize_type<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">);</span>
+<span id="L498" class="LineNr">498 </span>    <span class="Normal">const</span> string&amp; current_ingredient_name = current_ingredient<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
+<span id="L499" class="LineNr">499 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L500" class="LineNr">500 </span>      <span class="Comment">// primitive recipe</span>
+<span id="L501" class="LineNr">501 </span>      <span class="Comment">// we got here only because we got an instruction with an implicit product, and the instruction didn't explicitly spell it out</span>
+<span id="L502" class="LineNr">502 </span>      <span class="Comment">//    put x, y:offset, z</span>
+<span id="L503" class="LineNr">503 </span>      <span class="Comment">// instead of</span>
+<span id="L504" class="LineNr">504 </span>      <span class="Comment">//    x &lt;- put x, y:offset, z</span>
+<span id="L505" class="LineNr">505 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation == PUT || inst<span class="Delimiter">.</span>operation == PUT_INDEX<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L506" class="LineNr">506 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_index == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L507" class="LineNr">507 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_name == original_ingredient_name<span class="Delimiter">)</span>
+<span id="L508" class="LineNr">508 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L509" class="LineNr">509 </span>          <span class="Normal">else</span>
+<span id="L510" class="LineNr">510 </span>            <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify '&quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot;' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L511" class="LineNr">511 </span>        <span class="Delimiter">}</span>
+<span id="L512" class="LineNr">512 </span>      <span class="Delimiter">}</span>
+<span id="L513" class="LineNr">513 </span>    <span class="Delimiter">}</span>
+<span id="L514" class="LineNr">514 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L515" class="LineNr">515 </span>      <span class="Comment">// defined recipe</span>
+<span id="L516" class="LineNr">516 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='057immutable.cc.html#L526'>is_modified_in_recipe</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">,</span> current_ingredient_index<span class="Delimiter">,</span> caller<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L517" class="LineNr">517 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>current_ingredient_name == original_ingredient_name<span class="Delimiter">)</span>
+<span id="L518" class="LineNr">518 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because it's an ingredient of recipe &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L519" class="LineNr">519 </span>        <span class="Normal">else</span>
+<span id="L520" class="LineNr">520 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;cannot modify '&quot;</span> &lt;&lt; current_ingredient_name &lt;&lt; <span class="Constant">&quot;' in <a href='010vm.cc.html#L33'>instruction</a> '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' because that would modify '&quot;</span> &lt;&lt; original_ingredient_name &lt;&lt; <span class="Constant">&quot;' which is an ingredient of <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; but not also a product</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L521" class="LineNr">521 </span>      <span class="Delimiter">}</span>
+<span id="L522" class="LineNr">522 </span>    <span class="Delimiter">}</span>
+<span id="L523" class="LineNr">523 </span>  <span class="Delimiter">}</span>
+<span id="L524" class="LineNr">524 </span><span class="Delimiter">}</span>
+<span id="L525" class="LineNr">525 </span>
+<span id="L526" class="LineNr">526 </span><span class="Normal">bool</span> <a href='057immutable.cc.html#L526'>is_modified_in_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> ingredient_index<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L527" class="LineNr">527 </span>  <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L528" class="LineNr">528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L529" class="LineNr">529 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;can't check mutability of ingredients in recipe &quot;</span> &lt;&lt; callee<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; because it uses 'next-ingredient' directly, rather than a recipe header.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L530" class="LineNr">530 </span>    <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>  <span class="Delimiter">}</span>
+<span id="L532" class="LineNr">532 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_index &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// optional immutable ingredient</span>
+<span id="L533" class="LineNr">533 </span>  <span class="Identifier">return</span> <a href='057immutable.cc.html#L536'>is_present_in_products</a><span class="Delimiter">(</span>callee<span class="Delimiter">,</span> callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>ingredient_index<span class="Delimiter">).</span>name<span class="Delimiter">);</span>
+<span id="L534" class="LineNr">534 </span><span class="Delimiter">}</span>
+<span id="L535" class="LineNr">535 </span>
+<span id="L536" class="LineNr">536 </span><span class="Normal">bool</span> <a href='057immutable.cc.html#L536'>is_present_in_products</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; callee<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; ingredient_name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L537" class="LineNr">537 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L538" class="LineNr">538 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>callee<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name == ingredient_name<span class="Delimiter">)</span>
+<span id="L539" class="LineNr">539 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L540" class="LineNr">540 </span>  <span class="Delimiter">}</span>
+<span id="L541" class="LineNr">541 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L542" class="LineNr">542 </span><span class="Delimiter">}</span>
+<span id="L543" class="LineNr">543 </span>
+<span id="L544" class="LineNr">544 </span>set&lt;<span class="Normal">int</span>&gt; <a href='057immutable.cc.html#L544'>ingredient_indices</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> set&lt;reagent<span class="Delimiter">,</span> name_and_space_lt&gt;&amp; ingredient_names<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L545" class="LineNr">545 </span>  set&lt;<span class="Normal">int</span>&gt; result<span class="Delimiter">;</span>
+<span id="L546" class="LineNr">546 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L547" class="LineNr">547 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>is_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L548" class="LineNr">548 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>ingredient_names<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != ingredient_names<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span>
+<span id="L549" class="LineNr">549 </span>      result<span class="Delimiter">.</span>insert<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L550" class="LineNr">550 </span>  <span class="Delimiter">}</span>
+<span id="L551" class="LineNr">551 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L552" class="LineNr">552 </span><span class="Delimiter">}</span>
+<span id="L553" class="LineNr">553 </span>
+<span id="L554" class="LineNr">554 </span><span class="Comment">//: Sometimes you want to pass in two addresses, one pointing inside the</span>
+<span id="L555" class="LineNr">555 </span><span class="Comment">//: other. For example, you want to delete a node from a linked list. You</span>
+<span id="L556" class="LineNr">556 </span><span class="Comment">//: can't pass both pointers back out, because if a caller tries to make both</span>
+<span id="L557" class="LineNr">557 </span><span class="Comment">//: identical then you can't tell which value will be written on the way out.</span>
+<span id="L558" class="LineNr">558 </span><span class="Comment">//:</span>
+<span id="L559" class="LineNr">559 </span><span class="Comment">//: Experimental solution: just tell Mu that one points inside the other.</span>
+<span id="L560" class="LineNr">560 </span><span class="Comment">//: This way we can return just one pointer as high up as necessary to capture</span>
+<span id="L561" class="LineNr">561 </span><span class="Comment">//: all modifications performed by a recipe.</span>
+<span id="L562" class="LineNr">562 </span><span class="Comment">//:</span>
+<span id="L563" class="LineNr">563 </span><span class="Comment">//: We'll see if we end up wanting to abuse /contained-in for other reasons.</span>
+<span id="L564" class="LineNr">564 </span>
+<span id="L565" class="LineNr">565 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L566" class="LineNr">566 </span><span class="Delimiter">:(scenario can_modify_contained_in_addresses)</span>
+<span id="L567" class="LineNr">567 </span><span class="muData">container</span> test-list [
+<span id="L568" class="LineNr">568 </span>  <span class="Normal">value</span>:num
+<span id="L569" class="LineNr">569 </span>  <span class="Normal">next</span>:&amp;:test-list
+<span id="L570" class="LineNr">570 </span>]
+<span id="L571" class="LineNr">571 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L572" class="LineNr">572 </span>  local-scope
+<span id="L573" class="LineNr">573 </span>  <span class="Normal">p</span>:&amp;:test-list<span class="Special"> &lt;- </span><span class="Normal">new</span> <span class="Constant">test-list:type</span>
+<span id="L574" class="LineNr">574 </span>  foo p
+<span id="L575" class="LineNr">575 </span>]
+<span id="L576" class="LineNr">576 </span><span class="muRecipe">def</span> foo p:&amp;:test-list<span class="muRecipe"> -&gt; </span>p:&amp;:test-list [
+<span id="L577" class="LineNr">577 </span>  local-scope
+<span id="L578" class="LineNr">578 </span>  load-ingredients
+<span id="L579" class="LineNr">579 </span>  <span class="Normal">p2</span>:&amp;:test-list<span class="Special"> &lt;- </span>test-next p
+<span id="L580" class="LineNr">580 </span>  p<span class="Special"> &lt;- </span>test-remove p2<span class="Delimiter">,</span> p
+<span id="L581" class="LineNr">581 </span>]
+<span id="L582" class="LineNr">582 </span><span class="muRecipe">def</span> test-next x:&amp;:test-list<span class="muRecipe"> -&gt; </span>y:&amp;:test-list [
+<span id="L583" class="LineNr">583 </span>  local-scope
+<span id="L584" class="LineNr">584 </span>  load-ingredients
+<span id="L585" class="LineNr">585 </span>  y<span class="Special"> &lt;- </span>get *x<span class="Delimiter">,</span> <span class="Constant">next:offset</span>
+<span id="L586" class="LineNr">586 </span>]
+<span id="L587" class="LineNr">587 </span><span class="muRecipe">def</span> test-remove x:&amp;:test-list/contained-in:from<span class="Delimiter">,</span> from:&amp;:test-list<span class="muRecipe"> -&gt; </span>from:&amp;:test-list [
+<span id="L588" class="LineNr">588 </span>  local-scope
+<span id="L589" class="LineNr">589 </span>  load-ingredients
+<span id="L590" class="LineNr">590 </span>  *x<span class="Special"> &lt;- </span><a href='001help.cc.html#L221'>put</a> *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>  <span class="Comment"># can modify x</span>
+<span id="L591" class="LineNr">591 </span>]
+<span id="L592" class="LineNr">592 </span>$error: <span class="Constant">0</span>
+<span id="L593" class="LineNr">593 </span>
+<span id="L594" class="LineNr">594 </span><span class="Delimiter">:(before &quot;End Immutable Ingredients Special-cases&quot;)</span>
+<span id="L595" class="LineNr">595 </span><span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L596" class="LineNr">596 </span>  <span class="Normal">const</span> string_tree* tmp = property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">);</span>
+<span id="L597" class="LineNr">597 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!tmp<span class="Delimiter">-&gt;</span>atom
+<span id="L598" class="LineNr">598 </span>      || <span class="Delimiter">(</span>!is_present_in_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span>
+<span id="L599" class="LineNr">599 </span>          &amp;&amp; !is_present_in_products<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> tmp<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L600" class="LineNr">600 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;/contained-in can only point to another ingredient or product, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>property<span class="Delimiter">(</span>current_ingredient<span class="Delimiter">,</span> <span class="Constant">&quot;contained-in&quot;</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L601" class="LineNr">601 </span>  <span class="Delimiter">}</span>
+<span id="L602" class="LineNr">602 </span>  <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L603" class="LineNr">603 </span><span class="Delimiter">}</span>
+<span id="L604" class="LineNr">604 </span>
+<span id="L605" class="LineNr">605 </span><span class="Delimiter">:(scenario contained_in_product)</span>
+<span id="L606" class="LineNr">606 </span><span class="muData">container</span> test-list [
+<span id="L607" class="LineNr">607 </span>  <span class="Normal">value</span>:num
+<span id="L608" class="LineNr">608 </span>  <span class="Normal">next</span>:&amp;:test-list
+<span id="L609" class="LineNr">609 </span>]
+<span id="L610" class="LineNr">610 </span><span class="muRecipe">def</span> foo x:&amp;:test-list/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:test-list [
+<span id="L611" class="LineNr">611 </span>  local-scope
+<span id="L612" class="LineNr">612 </span>  load-ingredients
+<span id="L613" class="LineNr">613 </span>  result<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L614" class="LineNr">614 </span>]
+<span id="L615" class="LineNr">615 </span>$error: <span class="Constant">0</span>
+<span id="L616" class="LineNr">616 </span>
+<span id="L617" class="LineNr">617 </span><span class="Delimiter">:(scenario contained_in_is_mutable)</span>
+<span id="L618" class="LineNr">618 </span><span class="muData">container</span> test-list [
+<span id="L619" class="LineNr">619 </span>  <span class="Normal">value</span>:num
+<span id="L620" class="LineNr">620 </span>  <span class="Normal">next</span>:&amp;:test-list
+<span id="L621" class="LineNr">621 </span>]
+<span id="L622" class="LineNr">622 </span><span class="muRecipe">def</span> foo x:&amp;:test-list/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:test-list [
+<span id="L623" class="LineNr">623 </span>  local-scope
+<span id="L624" class="LineNr">624 </span>  load-ingredients
+<span id="L625" class="LineNr">625 </span>  result<span class="Special"> &lt;- </span>copy x
+<span id="L626" class="LineNr">626 </span>  <a href='001help.cc.html#L221'>put</a> *x<span class="Delimiter">,</span> <span class="Constant">value:offset</span><span class="Delimiter">,</span> <span class="Constant">34</span>
+<span id="L627" class="LineNr">627 </span>]
+<span id="L628" class="LineNr">628 </span>$error: <span class="Constant">0</span>
 </pre>
 </body>
 </html>
diff --git a/html/058to_text.cc.html b/html/058to_text.cc.html
index 572c9f77..00e9fe49 100644
--- a/html/058to_text.cc.html
+++ b/html/058to_text.cc.html
@@ -68,7 +68,7 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr"> 9 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L10" class="LineNr">10 </span><span class="Normal">case</span> TO_TEXT: <span class="Delimiter">{</span>
 <span id="L11" class="LineNr">11 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L12" class="LineNr">12 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'to-text' requires a single ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L12" class="LineNr">12 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'to-text' requires a single ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L13" class="LineNr">13 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L14" class="LineNr">14 </span>  <span class="Delimiter">}</span>
 <span id="L15" class="LineNr">15 </span>  <span class="Comment">// can handle any type</span>
@@ -77,9 +77,10 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr">18 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L19" class="LineNr">19 </span><span class="Normal">case</span> TO_TEXT: <span class="Delimiter">{</span>
 <span id="L20" class="LineNr">20 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L21" class="LineNr">21 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>inspect<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> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))));</span>
-<span id="L22" class="LineNr">22 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L23" class="LineNr">23 </span><span class="Delimiter">}</span>
+<span id="L21" class="LineNr">21 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L22" class="LineNr">22 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>inspect<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> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))));</span>
+<span id="L23" class="LineNr">23 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L24" class="LineNr">24 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/059to_text.mu.html b/html/059to_text.mu.html
index 0cc17996..1076b050 100644
--- a/html/059to_text.mu.html
+++ b/html/059to_text.mu.html
@@ -16,12 +16,12 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/060rewrite_literal_string.cc.html b/html/060rewrite_literal_string.cc.html
index b1dee8b4..44235735 100644
--- a/html/060rewrite_literal_string.cc.html
+++ b/html/060rewrite_literal_string.cc.html
@@ -74,66 +74,67 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr">13 </span>
 <span id="L14" class="LineNr">14 </span><span class="Delimiter">:(before &quot;End Instruction Inserting/Deleting Transforms&quot;)</span>
 <span id="L15" class="LineNr">15 </span><a href='060rewrite_literal_string.cc.html#L21'>initialize_transform_rewrite_literal_string_to_text</a><span class="Delimiter">();</span>
-<span id="L16" class="LineNr">16 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L38'>rewrite_literal_string_to_text</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
+<span id="L16" class="LineNr">16 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L39'>rewrite_literal_string_to_text</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
 <span id="L17" class="LineNr">17 </span>
 <span id="L18" class="LineNr">18 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
 <span id="L19" class="LineNr">19 </span>set&lt;string&gt; recipes_taking_literal_strings<span class="Delimiter">;</span>
 <span id="L20" class="LineNr">20 </span><span class="Delimiter">:(code)</span>
 <span id="L21" class="LineNr">21 </span><span class="Normal">void</span> <a href='060rewrite_literal_string.cc.html#L21'>initialize_transform_rewrite_literal_string_to_text</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L22" class="LineNr">22 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$print&quot;</span><span class="Delimiter">);</span>
-<span id="L23" class="LineNr">23 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$dump-trace&quot;</span><span class="Delimiter">);</span>
-<span id="L24" class="LineNr">24 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$system&quot;</span><span class="Delimiter">);</span>
-<span id="L25" class="LineNr">25 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">);</span>
-<span id="L26" class="LineNr">26 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;stash&quot;</span><span class="Delimiter">);</span>
-<span id="L27" class="LineNr">27 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">);</span>
-<span id="L28" class="LineNr">28 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">);</span>
-<span id="L29" class="LineNr">29 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;memory-should-contain&quot;</span><span class="Delimiter">);</span>
-<span id="L30" class="LineNr">30 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace-should-contain&quot;</span><span class="Delimiter">);</span>
-<span id="L31" class="LineNr">31 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace-should-not-contain&quot;</span><span class="Delimiter">);</span>
-<span id="L32" class="LineNr">32 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label&quot;</span><span class="Delimiter">);</span>
-<span id="L33" class="LineNr">33 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label-greater-than&quot;</span><span class="Delimiter">);</span>
-<span id="L34" class="LineNr">34 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label-lesser-than&quot;</span><span class="Delimiter">);</span>
-<span id="L35" class="LineNr">35 </span>  <span class="Comment">// End initialize_transform_rewrite_literal_string_to_text()</span>
-<span id="L36" class="LineNr">36 </span><span class="Delimiter">}</span>
-<span id="L37" class="LineNr">37 </span>
-<span id="L38" class="LineNr">38 </span><span class="Normal">void</span> <a href='060rewrite_literal_string.cc.html#L38'>rewrite_literal_string_to_text</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L39" class="LineNr">39 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L40" class="LineNr">40 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- rewrite literal strings in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L41" class="LineNr">41 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L64'>contains_numeric_locations</a><span class="Delimiter">(</span>caller<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L42" class="LineNr">42 </span>  vector&lt;instruction&gt; new_instructions<span class="Delimiter">;</span>
-<span id="L43" class="LineNr">43 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L44" class="LineNr">44 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L45" class="LineNr">45 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>recipes_taking_literal_strings<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">)</span> == recipes_taking_literal_strings<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr">46 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr">47 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L48" class="LineNr">48 </span>        <a href='010vm.cc.html#L32'>instruction</a> def<span class="Delimiter">;</span>
-<span id="L49" class="LineNr">49 </span>        ostringstream ingredient_name<span class="Delimiter">;</span>
-<span id="L50" class="LineNr">50 </span>        ingredient_name &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:text&quot;</span><span class="Delimiter">;</span>
-<span id="L51" class="LineNr">51 </span>        def<span class="Delimiter">.</span>name = <span class="Constant">&quot;new&quot;</span><span class="Delimiter">;</span>
-<span id="L52" class="LineNr">52 </span>        def<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">));</span>
-<span id="L53" class="LineNr">53 </span>        def<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">()));</span>
-<span id="L54" class="LineNr">54 </span>        new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>def<span class="Delimiter">);</span>
-<span id="L55" class="LineNr">55 </span>        inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">).</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  <span class="Comment">// reclaim old memory</span>
-<span id="L56" class="LineNr">56 </span>        inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> = reagent<span class="Delimiter">(</span>ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
-<span id="L57" class="LineNr">57 </span>      <span class="Delimiter">}</span>
-<span id="L58" class="LineNr">58 </span>    <span class="Delimiter">}</span>
-<span id="L59" class="LineNr">59 </span>    new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
-<span id="L60" class="LineNr">60 </span>  <span class="Delimiter">}</span>
-<span id="L61" class="LineNr">61 </span>  caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_instructions<span class="Delimiter">);</span>
-<span id="L62" class="LineNr">62 </span><span class="Delimiter">}</span>
-<span id="L63" class="LineNr">63 </span>
-<span id="L64" class="LineNr">64 </span><span class="Normal">bool</span> <a href='060rewrite_literal_string.cc.html#L64'>contains_numeric_locations</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr">65 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L66" class="LineNr">66 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L67" class="LineNr">67 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
-<span id="L68" class="LineNr">68 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L146'>is_numeric_location</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">)))</span>
-<span id="L69" class="LineNr">69 </span>        <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L70" class="LineNr">70 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
-<span id="L71" class="LineNr">71 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L146'>is_numeric_location</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">)))</span>
-<span id="L72" class="LineNr">72 </span>        <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L73" class="LineNr">73 </span>  <span class="Delimiter">}</span>
-<span id="L74" class="LineNr">74 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L75" class="LineNr">75 </span><span class="Delimiter">}</span>
+<span id="L22" class="LineNr">22 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;assert&quot;</span><span class="Delimiter">);</span>
+<span id="L23" class="LineNr">23 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$print&quot;</span><span class="Delimiter">);</span>
+<span id="L24" class="LineNr">24 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$dump-trace&quot;</span><span class="Delimiter">);</span>
+<span id="L25" class="LineNr">25 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;$system&quot;</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr">26 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">);</span>
+<span id="L27" class="LineNr">27 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;stash&quot;</span><span class="Delimiter">);</span>
+<span id="L28" class="LineNr">28 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;new&quot;</span><span class="Delimiter">);</span>
+<span id="L29" class="LineNr">29 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">);</span>
+<span id="L30" class="LineNr">30 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;memory-should-contain&quot;</span><span class="Delimiter">);</span>
+<span id="L31" class="LineNr">31 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace-should-contain&quot;</span><span class="Delimiter">);</span>
+<span id="L32" class="LineNr">32 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;trace-should-not-contain&quot;</span><span class="Delimiter">);</span>
+<span id="L33" class="LineNr">33 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label&quot;</span><span class="Delimiter">);</span>
+<span id="L34" class="LineNr">34 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label-greater-than&quot;</span><span class="Delimiter">);</span>
+<span id="L35" class="LineNr">35 </span>  recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;check-trace-count-for-label-lesser-than&quot;</span><span class="Delimiter">);</span>
+<span id="L36" class="LineNr">36 </span>  <span class="Comment">// End initialize_transform_rewrite_literal_string_to_text()</span>
+<span id="L37" class="LineNr">37 </span><span class="Delimiter">}</span>
+<span id="L38" class="LineNr">38 </span>
+<span id="L39" class="LineNr">39 </span><span class="Normal">void</span> <a href='060rewrite_literal_string.cc.html#L39'>rewrite_literal_string_to_text</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L40" class="LineNr">40 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L41" class="LineNr">41 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- rewrite literal strings in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L42" class="LineNr">42 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L65'>contains_numeric_locations</a><span class="Delimiter">(</span>caller<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L43" class="LineNr">43 </span>  vector&lt;instruction&gt; new_instructions<span class="Delimiter">;</span>
+<span id="L44" class="LineNr">44 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L45" class="LineNr">45 </span>    instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L46" class="LineNr">46 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>recipes_taking_literal_strings<span class="Delimiter">.</span>find<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name<span class="Delimiter">)</span> == recipes_taking_literal_strings<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L47" class="LineNr">47 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L48" class="LineNr">48 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr">49 </span>        <a href='010vm.cc.html#L33'>instruction</a> def<span class="Delimiter">;</span>
+<span id="L50" class="LineNr">50 </span>        ostringstream ingredient_name<span class="Delimiter">;</span>
+<span id="L51" class="LineNr">51 </span>        ingredient_name &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:text&quot;</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr">52 </span>        def<span class="Delimiter">.</span>name = <span class="Constant">&quot;new&quot;</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr">53 </span>        def<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">));</span>
+<span id="L54" class="LineNr">54 </span>        def<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">()));</span>
+<span id="L55" class="LineNr">55 </span>        new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>def<span class="Delimiter">);</span>
+<span id="L56" class="LineNr">56 </span>        inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">).</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  <span class="Comment">// reclaim old memory</span>
+<span id="L57" class="LineNr">57 </span>        inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> = reagent<span class="Delimiter">(</span>ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
+<span id="L58" class="LineNr">58 </span>      <span class="Delimiter">}</span>
+<span id="L59" class="LineNr">59 </span>    <span class="Delimiter">}</span>
+<span id="L60" class="LineNr">60 </span>    new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L61" class="LineNr">61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr">62 </span>  caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_instructions<span class="Delimiter">);</span>
+<span id="L63" class="LineNr">63 </span><span class="Delimiter">}</span>
+<span id="L64" class="LineNr">64 </span>
+<span id="L65" class="LineNr">65 </span><span class="Normal">bool</span> <a href='060rewrite_literal_string.cc.html#L65'>contains_numeric_locations</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr">66 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L67" class="LineNr">67 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L68" class="LineNr">68 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> in = <span class="Constant">0</span><span class="Delimiter">;</span>  in &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++in<span class="Delimiter">)</span>
+<span id="L69" class="LineNr">69 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L157'>is_numeric_location</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>in<span class="Delimiter">)))</span>
+<span id="L70" class="LineNr">70 </span>        <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L71" class="LineNr">71 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> out = <span class="Constant">0</span><span class="Delimiter">;</span>  out &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++out<span class="Delimiter">)</span>
+<span id="L72" class="LineNr">72 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='042name.cc.html#L157'>is_numeric_location</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>out<span class="Delimiter">)))</span>
+<span id="L73" class="LineNr">73 </span>        <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L74" class="LineNr">74 </span>  <span class="Delimiter">}</span>
+<span id="L75" class="LineNr">75 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L76" class="LineNr">76 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/061text.mu.html b/html/061text.mu.html
index d069e621..2c115a45 100644
--- a/html/061text.mu.html
+++ b/html/061text.mu.html
@@ -15,16 +15,16 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
+.muData { color: #ffff00; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -64,17 +64,17 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr">   3 </span><span class="muRecipe">def</span> equal a:text, b:text<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L4" class="LineNr">   4 </span>  <span class="Constant">local-scope</span>
 <span id="L5" class="LineNr">   5 </span>  <span class="Constant">load-inputs</span>
-<span id="L6" class="LineNr">   6 </span>  an:num, bn:num <span class="Special">&lt;-</span> copy a, b
+<span id="L6" class="LineNr">   6 </span>  an:num, bn:num <span class="Special">&lt;-</span> deaddress a, b
 <span id="L7" class="LineNr">   7 </span>  address-equal?:boolean <span class="Special">&lt;-</span> equal an, bn
-<span id="L8" class="LineNr">   8 </span>  <span class="muControl">return-if</span> address-equal?, <span class="Constant">1/true</span>
-<span id="L9" class="LineNr">   9 </span>  <span class="muControl">return-unless</span> a, <span class="Constant">0/false</span>
-<span id="L10" class="LineNr">  10 </span>  <span class="muControl">return-unless</span> b, <span class="Constant">0/false</span>
+<span id="L8" class="LineNr">   8 </span>  <span class="muControl">return-if</span> address-equal?,<span class="Constant"> true</span>
+<span id="L9" class="LineNr">   9 </span>  <span class="muControl">return-unless</span> a,<span class="Constant"> false</span>
+<span id="L10" class="LineNr">  10 </span>  <span class="muControl">return-unless</span> b,<span class="Constant"> false</span>
 <span id="L11" class="LineNr">  11 </span>  a-len:num <span class="Special">&lt;-</span> length *a
 <span id="L12" class="LineNr">  12 </span>  b-len:num <span class="Special">&lt;-</span> length *b
 <span id="L13" class="LineNr">  13 </span>  <span class="Comment"># compare lengths</span>
 <span id="L14" class="LineNr">  14 </span>  trace<span class="Constant"> 99</span>, <span class="Constant">[text-equal]</span>, <span class="Constant">[comparing lengths]</span>
 <span id="L15" class="LineNr">  15 </span>  length-equal?:bool <span class="Special">&lt;-</span> equal a-len, b-len
-<span id="L16" class="LineNr">  16 </span>  <span class="muControl">return-unless</span> length-equal?, <span class="Constant">0/false</span>
+<span id="L16" class="LineNr">  16 </span>  <span class="muControl">return-unless</span> length-equal?,<span class="Constant"> false</span>
 <span id="L17" class="LineNr">  17 </span>  <span class="Comment"># compare each corresponding character</span>
 <span id="L18" class="LineNr">  18 </span>  trace<span class="Constant"> 99</span>, <span class="Constant">[text-equal]</span>, <span class="Constant">[comparing characters]</span>
 <span id="L19" class="LineNr">  19 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -84,11 +84,11 @@ if ('onhashchange' in window) {
 <span id="L23" class="LineNr">  23 </span>    a2:char <span class="Special">&lt;-</span> index *a, i
 <span id="L24" class="LineNr">  24 </span>    b2:char <span class="Special">&lt;-</span> index *b, i
 <span id="L25" class="LineNr">  25 </span>    chars-match?:bool <span class="Special">&lt;-</span> equal a2, b2
-<span id="L26" class="LineNr">  26 </span>    <span class="muControl">return-unless</span> chars-match?, <span class="Constant">0/false</span>
+<span id="L26" class="LineNr">  26 </span>    <span class="muControl">return-unless</span> chars-match?,<span class="Constant"> false</span>
 <span id="L27" class="LineNr">  27 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
 <span id="L28" class="LineNr">  28 </span>   <span class="muControl"> loop</span>
 <span id="L29" class="LineNr">  29 </span>  <span class="Delimiter">}</span>
-<span id="L30" class="LineNr">  30 </span> <span class="muControl"> return</span> <span class="Constant">1/true</span>
+<span id="L30" class="LineNr">  30 </span> <span class="muControl"> return</span><span class="Constant"> true</span>
 <span id="L31" class="LineNr">  31 </span>]
 <span id="L32" class="LineNr">  32 </span>
 <span id="L33" class="LineNr">  33 </span><span class="muScenario">scenario</span> text-equal-reflexive [
@@ -147,10 +147,10 @@ if ('onhashchange' in window) {
 <span id="L86" class="LineNr">  86 </span><span class="muScenario">scenario</span> text-equal-with-null [
 <span id="L87" class="LineNr">  87 </span>  <span class="Constant">local-scope</span>
 <span id="L88" class="LineNr">  88 </span>  x:text <span class="Special">&lt;-</span> new <span class="Constant">[abcd]</span>
-<span id="L89" class="LineNr">  89 </span>  y:text <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L89" class="LineNr">  89 </span>  y:text <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L90" class="LineNr">  90 </span>  run [
-<span id="L91" class="LineNr">  91 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal x,<span class="Constant"> 0</span>
-<span id="L92" class="LineNr">  92 </span>    11:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal<span class="Constant"> 0</span>, x
+<span id="L91" class="LineNr">  91 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal x,<span class="Constant"> null</span>
+<span id="L92" class="LineNr">  92 </span>    11:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal<span class="Constant"> null</span>, x
 <span id="L93" class="LineNr">  93 </span>    12:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal x, y
 <span id="L94" class="LineNr">  94 </span>    13:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal y, x
 <span id="L95" class="LineNr">  95 </span>    14:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal y, y
@@ -400,7 +400,7 @@ if ('onhashchange' in window) {
 <span id="L339" class="LineNr"> 339 </span>  <span class="Constant">local-scope</span>
 <span id="L340" class="LineNr"> 340 </span>  <span class="Constant">load-inputs</span>
 <span id="L341" class="LineNr"> 341 </span>  <span class="Comment"># propagate null buffer</span>
-<span id="L342" class="LineNr"> 342 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
+<span id="L342" class="LineNr"> 342 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> null</span>
 <span id="L343" class="LineNr"> 343 </span>  len:num <span class="Special">&lt;-</span> get *in, <span class="Constant">length:offset</span>
 <span id="L344" class="LineNr"> 344 </span>  s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
 <span id="L345" class="LineNr"> 345 </span>  <span class="Comment"># we can't just return s because it is usually the wrong length</span>
@@ -419,7 +419,7 @@ if ('onhashchange' in window) {
 <span id="L358" class="LineNr"> 358 </span><span class="muRecipe">def</span> <a href='061text.mu.html#L358'>blank?</a> x:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L359" class="LineNr"> 359 </span>  <span class="Constant">local-scope</span>
 <span id="L360" class="LineNr"> 360 </span>  <span class="Constant">load-inputs</span>
-<span id="L361" class="LineNr"> 361 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">1/true</span>
+<span id="L361" class="LineNr"> 361 </span>  <span class="muControl">return-unless</span> x,<span class="Constant"> true</span>
 <span id="L362" class="LineNr"> 362 </span>  len:num <span class="Special">&lt;-</span> length *x
 <span id="L363" class="LineNr"> 363 </span>  result <span class="Special">&lt;-</span> equal len,<span class="Constant"> 0</span>
 <span id="L364" class="LineNr"> 364 </span>]
@@ -467,7 +467,7 @@ if ('onhashchange' in window) {
 <span id="L406" class="LineNr"> 406 </span>
 <span id="L407" class="LineNr"> 407 </span><span class="muScenario">scenario</span> text-append-null [
 <span id="L408" class="LineNr"> 408 </span>  <span class="Constant">local-scope</span>
-<span id="L409" class="LineNr"> 409 </span>  x:text <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L409" class="LineNr"> 409 </span>  x:text <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L410" class="LineNr"> 410 </span>  y:text <span class="Special">&lt;-</span> new <span class="Constant">[ world!]</span>
 <span id="L411" class="LineNr"> 411 </span>  run [
 <span id="L412" class="LineNr"> 412 </span>    z:text <span class="Special">&lt;-</span> append x, y
@@ -481,7 +481,7 @@ if ('onhashchange' in window) {
 <span id="L420" class="LineNr"> 420 </span><span class="muScenario">scenario</span> text-append-null-2 [
 <span id="L421" class="LineNr"> 421 </span>  <span class="Constant">local-scope</span>
 <span id="L422" class="LineNr"> 422 </span>  x:text <span class="Special">&lt;-</span> new <span class="Constant">[hello,]</span>
-<span id="L423" class="LineNr"> 423 </span>  y:text <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L423" class="LineNr"> 423 </span>  y:text <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L424" class="LineNr"> 424 </span>  run [
 <span id="L425" class="LineNr"> 425 </span>    z:text <span class="Special">&lt;-</span> append x, y
 <span id="L426" class="LineNr"> 426 </span>    10:@:char/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *z
@@ -1058,7 +1058,7 @@ if ('onhashchange' in window) {
 <span id="L997" class="LineNr"> 997 </span>  x:num <span class="Special">&lt;-</span> length *text
 <span id="L998" class="LineNr"> 998 </span>  x <span class="Special">&lt;-</span> subtract x, pattern-len
 <span id="L999" class="LineNr"> 999 </span>  enough-room?:bool <span class="Special">&lt;-</span> lesser-or-equal idx, x
-<span id="L1000" class="LineNr">1000 </span>  <span class="muControl">return-unless</span> enough-room?, <span class="Constant">0/not-found</span>
+<span id="L1000" class="LineNr">1000 </span>  <span class="muControl">return-unless</span> enough-room?,<span class="Constant"> false/not-found</span>
 <span id="L1001" class="LineNr">1001 </span>  <span class="Comment"># check each character of pattern</span>
 <span id="L1002" class="LineNr">1002 </span>  pattern-idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L1003" class="LineNr">1003 </span>  <span class="Delimiter">{</span>
@@ -1067,12 +1067,12 @@ if ('onhashchange' in window) {
 <span id="L1006" class="LineNr">1006 </span>    c:char <span class="Special">&lt;-</span> index *text, idx
 <span id="L1007" class="LineNr">1007 </span>    exp:char <span class="Special">&lt;-</span> index *pattern, pattern-idx
 <span id="L1008" class="LineNr">1008 </span>    match?:bool <span class="Special">&lt;-</span> equal c, exp
-<span id="L1009" class="LineNr">1009 </span>    <span class="muControl">return-unless</span> match?, <span class="Constant">0/not-found</span>
+<span id="L1009" class="LineNr">1009 </span>    <span class="muControl">return-unless</span> match?,<span class="Constant"> false/not-found</span>
 <span id="L1010" class="LineNr">1010 </span>    idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
 <span id="L1011" class="LineNr">1011 </span>    pattern-idx <span class="Special">&lt;-</span> add pattern-idx,<span class="Constant"> 1</span>
 <span id="L1012" class="LineNr">1012 </span>   <span class="muControl"> loop</span>
 <span id="L1013" class="LineNr">1013 </span>  <span class="Delimiter">}</span>
-<span id="L1014" class="LineNr">1014 </span> <span class="muControl"> return</span> <span class="Constant">1/found</span>
+<span id="L1014" class="LineNr">1014 </span> <span class="muControl"> return</span><span class="Constant"> true/found</span>
 <span id="L1015" class="LineNr">1015 </span>]
 <span id="L1016" class="LineNr">1016 </span>
 <span id="L1017" class="LineNr">1017 </span><span class="muScenario">scenario</span> match-at-checks-pattern-at-index [
diff --git a/html/062convert_ingredients_to_text.cc.html b/html/062convert_ingredients_to_text.cc.html
index 00f740d4..19e826f8 100644
--- a/html/062convert_ingredients_to_text.cc.html
+++ b/html/062convert_ingredients_to_text.cc.html
@@ -76,10 +76,10 @@ if ('onhashchange' in window) {
 <span id="L14" class="LineNr"> 14 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L15" class="LineNr"> 15 </span>  local-scope
 <span id="L16" class="LineNr"> 16 </span>  <span class="Normal">n</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L17" class="LineNr"> 17 </span>  <a href='003trace.cc.html#L167'>trace</a> <span class="Constant">2</span><span class="Delimiter">,</span> [app]<span class="Delimiter">,</span> n
+<span id="L17" class="LineNr"> 17 </span>  <a href='003trace.cc.html#L190'>trace</a> <span class="Constant">2</span><span class="Delimiter">,</span> [app]<span class="Delimiter">,</span> n
 <span id="L18" class="LineNr"> 18 </span>]
 <span id="L19" class="LineNr"> 19 </span><span class="traceContains">+transform: {trace_2_2: (&quot;address&quot; &quot;array&quot; &quot;character&quot;)} &lt;- to-text-line {n: &quot;number&quot;}</span>
-<span id="L20" class="LineNr"> 20 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L167'>trace</a> {2: &quot;literal&quot;}, {&quot;app&quot;: &quot;literal-string&quot;}, {trace_2_2: (&quot;address&quot; &quot;array&quot; &quot;character&quot;)}</span>
+<span id="L20" class="LineNr"> 20 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L190'>trace</a> {2: &quot;literal&quot;}, {&quot;app&quot;: &quot;literal-string&quot;}, {trace_2_2: (&quot;address&quot; &quot;array&quot; &quot;character&quot;)}</span>
 <span id="L21" class="LineNr"> 21 </span>
 <span id="L22" class="LineNr"> 22 </span><span class="Comment">//: special case: rewrite attempts to stash contents of most arrays to avoid</span>
 <span id="L23" class="LineNr"> 23 </span><span class="Comment">//: passing addresses around</span>
@@ -121,9 +121,9 @@ if ('onhashchange' in window) {
 <span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(code)</span>
 <span id="L60" class="LineNr"> 60 </span><span class="Normal">void</span> convert_ingredients_to_text<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L61" class="LineNr"> 61 </span>  recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
-<span id="L62" class="LineNr"> 62 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- convert some ingredients to text in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L62" class="LineNr"> 62 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- convert some ingredients to text in <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// in recipes without named locations, 'stash' is still not extensible</span>
-<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L64'>contains_numeric_locations</a><span class="Delimiter">(</span>caller<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='060rewrite_literal_string.cc.html#L65'>contains_numeric_locations</a><span class="Delimiter">(</span>caller<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L65" class="LineNr"> 65 </span>  convert_ingredients_to_text<span class="Delimiter">(</span>caller<span class="Delimiter">);</span>
 <span id="L66" class="LineNr"> 66 </span><span class="Delimiter">}</span>
 <span id="L67" class="LineNr"> 67 </span>
@@ -136,7 +136,7 @@ if ('onhashchange' in window) {
 <span id="L74" class="LineNr"> 74 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L75" class="LineNr"> 75 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L76" class="LineNr"> 76 </span>        ostringstream ingredient_name<span class="Delimiter">;</span>
-<span id="L77" class="LineNr"> 77 </span>        ingredient_name &lt;&lt; <span class="Constant">&quot;stash_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
+<span id="L77" class="LineNr"> 77 </span>        ingredient_name &lt;&lt; <span class="Constant">&quot;stash_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
 <span id="L78" class="LineNr"> 78 </span>        convert_ingredient_to_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> new_instructions<span class="Delimiter">,</span> ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
 <span id="L79" class="LineNr"> 79 </span>      <span class="Delimiter">}</span>
 <span id="L80" class="LineNr"> 80 </span>    <span class="Delimiter">}</span>
@@ -144,7 +144,7 @@ if ('onhashchange' in window) {
 <span id="L82" class="LineNr"> 82 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Comment">/*</span><span class="Comment">skip</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L83" class="LineNr"> 83 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L84" class="LineNr"> 84 </span>        ostringstream ingredient_name<span class="Delimiter">;</span>
-<span id="L85" class="LineNr"> 85 </span>        ingredient_name &lt;&lt; <span class="Constant">&quot;trace_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>        ingredient_name &lt;&lt; <span class="Constant">&quot;trace_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
 <span id="L86" class="LineNr"> 86 </span>        convert_ingredient_to_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> new_instructions<span class="Delimiter">,</span> ingredient_name<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
 <span id="L87" class="LineNr"> 87 </span>      <span class="Delimiter">}</span>
 <span id="L88" class="LineNr"> 88 </span>    <span class="Delimiter">}</span>
@@ -154,15 +154,15 @@ if ('onhashchange' in window) {
 <span id="L92" class="LineNr"> 92 </span>      <span class="Comment">// new variants that match:</span>
 <span id="L93" class="LineNr"> 93 </span>      <span class="Comment">//   append _:text, ___</span>
 <span id="L94" class="LineNr"> 94 </span>      <span class="Comment">// will never ever get used.</span>
-<span id="L95" class="LineNr"> 95 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='014literal_string.cc.html#L126'>is_literal_text</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> || <a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span>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 class="Delimiter">{</span>
 <span id="L96" class="LineNr"> 96 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Comment">/*</span><span class="Comment">skip base</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L97" class="LineNr"> 97 </span>          ostringstream ingredient_name<span class="Delimiter">;</span>
-<span id="L98" class="LineNr"> 98 </span>          ingredient_name &lt;&lt; <span class="Constant">&quot;append_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L80'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span>          ingredient_name &lt;&lt; <span class="Constant">&quot;append_&quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">'_'</span> &lt;&lt; j &lt;&lt; <span class="Constant">&quot;:<a href='043space.cc.html#L101'>address</a>:array:character&quot;</span><span class="Delimiter">;</span>
 <span id="L99" class="LineNr"> 99 </span>          convert_ingredient_to_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">),</span> new_instructions<span class="Delimiter">,</span> ingredient_name<span class="Delimiter">.</span>str<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="Delimiter">}</span>
-<span id="L103" class="LineNr">103 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L103" class="LineNr">103 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L104" class="LineNr">104 </span>    new_instructions<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
 <span id="L105" class="LineNr">105 </span>  <span class="Delimiter">}</span>
 <span id="L106" class="LineNr">106 </span>  caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_instructions<span class="Delimiter">);</span>
@@ -172,10 +172,10 @@ if ('onhashchange' in window) {
 <span id="L110" class="LineNr">110 </span><span class="Comment">// replace r with converted text</span>
 <span id="L111" class="LineNr">111 </span><span class="Normal">void</span> convert_ingredient_to_text<span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">,</span> vector&lt;instruction&gt;&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; tmp_var<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// error; will be handled elsewhere</span>
-<span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L114" class="LineNr">114 </span>  <span class="Comment">// don't try to extend static arrays</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_static_array<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>  <a href='010vm.cc.html#L32'>instruction</a> def<span class="Delimiter">;</span>
+<span id="L116" class="LineNr">116 </span>  <a href='010vm.cc.html#L33'>instruction</a> def<span class="Delimiter">;</span>
 <span id="L117" class="LineNr">117 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_lookup_of_address_of_array<span class="Delimiter">(</span>r<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L118" class="LineNr">118 </span>    def<span class="Delimiter">.</span>name = <span class="Constant">&quot;array-to-text-line&quot;</span><span class="Delimiter">;</span>
 <span id="L119" class="LineNr">119 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> tmp = r<span class="Delimiter">;</span>
@@ -187,16 +187,16 @@ if ('onhashchange' in window) {
 <span id="L125" class="LineNr">125 </span>    def<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>  def<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">));</span>
-<span id="L128" class="LineNr">128 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L128" class="LineNr">128 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9993</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>def<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L129" class="LineNr">129 </span>  out<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>def<span class="Delimiter">);</span>
 <span id="L130" class="LineNr">130 </span>  r<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>  <span class="Comment">// reclaim old memory</span>
 <span id="L131" class="LineNr">131 </span>  r = reagent<span class="Delimiter">(</span>tmp_var<span class="Delimiter">);</span>
 <span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
 <span id="L133" class="LineNr">133 </span>
 <span id="L134" class="LineNr">134 </span><span class="Normal">bool</span> is_lookup_of_address_of_array<span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<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="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<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="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;address&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<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 class="Identifier">return</span> is_mu_array<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L139" class="LineNr">139 </span><span class="Delimiter">}</span>
 <span id="L140" class="LineNr">140 </span>
@@ -207,9 +207,9 @@ if ('onhashchange' in window) {
 <span id="L145" class="LineNr">145 </span>
 <span id="L146" class="LineNr">146 </span><span class="Comment">//: Supporting 'append' above requires remembering what name an instruction</span>
 <span id="L147" class="LineNr">147 </span><span class="Comment">//: had before any rewrites or transforms.</span>
-<span id="L148" class="LineNr">148 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L32'>instruction</a> Fields&quot;)</span>
+<span id="L148" class="LineNr">148 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L33'>instruction</a> Fields&quot;)</span>
 <span id="L149" class="LineNr">149 </span>string name_before_rewrite<span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L32'>instruction</a> Clear&quot;)</span>
+<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End <a href='010vm.cc.html#L33'>instruction</a> Clear&quot;)</span>
 <span id="L151" class="LineNr">151 </span>name_before_rewrite<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
 <span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End next_instruction(curr)&quot;)</span>
 <span id="L153" class="LineNr">153 </span>curr<span class="Delimiter">-&gt;</span>name_before_rewrite = curr<span class="Delimiter">-&gt;</span>name<span class="Delimiter">;</span>
@@ -219,7 +219,7 @@ if ('onhashchange' in window) {
 <span id="L157" class="LineNr">157 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L158" class="LineNr">158 </span>  local-scope
 <span id="L159" class="LineNr">159 </span>  <span class="Normal">n</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">11</span>
-<span id="L160" class="LineNr">160 </span>  <span class="Normal">c</span>:character<span class="Special"> &lt;- </span>copy <span class="Constant">111</span>/o
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">c</span>:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy <span class="Constant">111</span>/o
 <span id="L161" class="LineNr">161 </span>  <span class="Normal">a</span>:text<span class="Special"> &lt;- </span>append [abc]<span class="Delimiter">,</span> <span class="Constant">10</span><span class="Delimiter">,</span> n<span class="Delimiter">,</span> c
 <span id="L162" class="LineNr">162 </span>  <span class="Normal">expected</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc1011o]
 <span id="L163" class="LineNr">163 </span>  <span class="Constant">10</span>:<span class="Normal">bool</span>/<span class="Special">raw &lt;- </span>equal a<span class="Delimiter">,</span> expected
diff --git a/html/063array.mu.html b/html/063array.mu.html
index e194f20a..0c8a5349 100644
--- a/html/063array.mu.html
+++ b/html/063array.mu.html
@@ -15,15 +15,15 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
-.muControl { color: #c0a020; }
 .Delimiter { color: #800080; }
+.muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/064list.mu.html b/html/064list.mu.html
index 2ce82c35..7a8b3c55 100644
--- a/html/064list.mu.html
+++ b/html/064list.mu.html
@@ -15,8 +15,8 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
@@ -24,7 +24,7 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -66,7 +66,7 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr">  5 </span>
 <span id="L6" class="LineNr">  6 </span><span class="muData">container</span> <a href='064list.mu.html#L6'>list</a>:_elem [
 <span id="L7" class="LineNr">  7 </span>  value:_elem
-<span id="L8" class="LineNr">  8 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem
+<span id="L8" class="LineNr">  8 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem
 <span id="L9" class="LineNr">  9 </span>]
 <span id="L10" class="LineNr"> 10 </span>
 <span id="L11" class="LineNr"> 11 </span><span class="muRecipe">def</span> push x:_elem, l:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:l [
@@ -85,13 +85,13 @@ if ('onhashchange' in window) {
 <span id="L24" class="LineNr"> 24 </span><span class="muRecipe">def</span> <a href='064list.mu.html#L24'>rest</a> in:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem/contained-in:in [
 <span id="L25" class="LineNr"> 25 </span>  <span class="Constant">local-scope</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Constant">load-inputs</span>
-<span id="L27" class="LineNr"> 27 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
+<span id="L27" class="LineNr"> 27 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
 <span id="L28" class="LineNr"> 28 </span>]
 <span id="L29" class="LineNr"> 29 </span>
 <span id="L30" class="LineNr"> 30 </span><span class="muScenario">scenario</span> list-handling [
 <span id="L31" class="LineNr"> 31 </span>  run [
 <span id="L32" class="LineNr"> 32 </span>    <span class="Constant">local-scope</span>
-<span id="L33" class="LineNr"> 33 </span>    x:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L33" class="LineNr"> 33 </span>    x:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L34" class="LineNr"> 34 </span>    x <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, x
 <span id="L35" class="LineNr"> 35 </span>    x <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, x
 <span id="L36" class="LineNr"> 36 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first x
@@ -127,14 +127,14 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span>  <span class="Constant">load-inputs</span>
 <span id="L67" class="LineNr"> 67 </span>  new-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(list _elem): type<span class="Delimiter">}</span>
 <span id="L68" class="LineNr"> 68 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
-<span id="L69" class="LineNr"> 69 </span>  next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
-<span id="L70" class="LineNr"> 70 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, new-node
-<span id="L71" class="LineNr"> 71 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, next-node
+<span id="L69" class="LineNr"> 69 </span>  next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
+<span id="L70" class="LineNr"> 70 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, new-node
+<span id="L71" class="LineNr"> 71 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, next-node
 <span id="L72" class="LineNr"> 72 </span>]
 <span id="L73" class="LineNr"> 73 </span>
 <span id="L74" class="LineNr"> 74 </span><span class="muScenario">scenario</span> inserting-into-list [
 <span id="L75" class="LineNr"> 75 </span>  <span class="Constant">local-scope</span>
-<span id="L76" class="LineNr"> 76 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L76" class="LineNr"> 76 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L77" class="LineNr"> 77 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L78" class="LineNr"> 78 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L79" class="LineNr"> 79 </span>  run [
@@ -160,7 +160,7 @@ if ('onhashchange' in window) {
 <span id="L99" class="LineNr"> 99 </span>
 <span id="L100" class="LineNr">100 </span><span class="muScenario">scenario</span> inserting-at-end-of-list [
 <span id="L101" class="LineNr">101 </span>  <span class="Constant">local-scope</span>
-<span id="L102" class="LineNr">102 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L102" class="LineNr">102 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L103" class="LineNr">103 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L104" class="LineNr">104 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L105" class="LineNr">105 </span>  run [
@@ -187,7 +187,7 @@ if ('onhashchange' in window) {
 <span id="L126" class="LineNr">126 </span>
 <span id="L127" class="LineNr">127 </span><span class="muScenario">scenario</span> inserting-after-start-of-list [
 <span id="L128" class="LineNr">128 </span>  <span class="Constant">local-scope</span>
-<span id="L129" class="LineNr">129 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L129" class="LineNr">129 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L130" class="LineNr">130 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L131" class="LineNr">131 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L132" class="LineNr">132 </span>  run [
@@ -221,7 +221,7 @@ if ('onhashchange' in window) {
 <span id="L160" class="LineNr">160 </span>  <span class="muControl">return-unless</span> x
 <span id="L161" class="LineNr">161 </span>  next-node:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> x
 <span id="L162" class="LineNr">162 </span>  <span class="Comment"># clear next pointer of 'x'</span>
-<span id="L163" class="LineNr">163 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>,<span class="Constant"> 0</span>
+<span id="L163" class="LineNr">163 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>,<span class="Constant"> null</span>
 <span id="L164" class="LineNr">164 </span>  <span class="Comment"># if 'x' is at the head of 'in', return the new head</span>
 <span id="L165" class="LineNr">165 </span>  at-head?:bool <span class="Special">&lt;-</span> equal x, in
 <span id="L166" class="LineNr">166 </span>  <span class="muControl">return-if</span> at-head?, next-node
@@ -236,18 +236,18 @@ if ('onhashchange' in window) {
 <span id="L175" class="LineNr">175 </span>    curr <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> curr
 <span id="L176" class="LineNr">176 </span>  <span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Comment"># set its next pointer to skip 'x'</span>
-<span id="L178" class="LineNr">178 </span>  *prev-node <span class="Special">&lt;-</span> put *prev-node, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, next-node
+<span id="L178" class="LineNr">178 </span>  *prev-node <span class="Special">&lt;-</span> put *prev-node, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, next-node
 <span id="L179" class="LineNr">179 </span>]
 <span id="L180" class="LineNr">180 </span>
 <span id="L181" class="LineNr">181 </span><span class="muScenario">scenario</span> removing-from-list [
 <span id="L182" class="LineNr">182 </span>  <span class="Constant">local-scope</span>
-<span id="L183" class="LineNr">183 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L183" class="LineNr">183 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L184" class="LineNr">184 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L185" class="LineNr">185 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L186" class="LineNr">186 </span>  run [
 <span id="L187" class="LineNr">187 </span>    list2:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># second element</span>
 <span id="L188" class="LineNr">188 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
-<span id="L189" class="LineNr">189 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> 0</span>
+<span id="L189" class="LineNr">189 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> null</span>
 <span id="L190" class="LineNr">190 </span>    <span class="Comment"># check structure like before</span>
 <span id="L191" class="LineNr">191 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
 <span id="L192" class="LineNr">192 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
@@ -265,7 +265,7 @@ if ('onhashchange' in window) {
 <span id="L204" class="LineNr">204 </span>
 <span id="L205" class="LineNr">205 </span><span class="muScenario">scenario</span> removing-from-start-of-list [
 <span id="L206" class="LineNr">206 </span>  <span class="Constant">local-scope</span>
-<span id="L207" class="LineNr">207 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L207" class="LineNr">207 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L208" class="LineNr">208 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L209" class="LineNr">209 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L210" class="LineNr">210 </span>  run [
@@ -286,7 +286,7 @@ if ('onhashchange' in window) {
 <span id="L225" class="LineNr">225 </span>
 <span id="L226" class="LineNr">226 </span><span class="muScenario">scenario</span> removing-from-end-of-list [
 <span id="L227" class="LineNr">227 </span>  <span class="Constant">local-scope</span>
-<span id="L228" class="LineNr">228 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L228" class="LineNr">228 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L229" class="LineNr">229 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L230" class="LineNr">230 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L231" class="LineNr">231 </span>  run [
@@ -294,7 +294,7 @@ if ('onhashchange' in window) {
 <span id="L233" class="LineNr">233 </span>    list2:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> <a href='064list.mu.html#L6'>list</a>
 <span id="L234" class="LineNr">234 </span>    list2 <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> list2
 <span id="L235" class="LineNr">235 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
-<span id="L236" class="LineNr">236 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> 0</span>
+<span id="L236" class="LineNr">236 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> null</span>
 <span id="L237" class="LineNr">237 </span>    <span class="Comment"># check structure like before</span>
 <span id="L238" class="LineNr">238 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
 <span id="L239" class="LineNr">239 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
@@ -312,10 +312,10 @@ if ('onhashchange' in window) {
 <span id="L251" class="LineNr">251 </span>
 <span id="L252" class="LineNr">252 </span><span class="muScenario">scenario</span> removing-from-singleton-list [
 <span id="L253" class="LineNr">253 </span>  <span class="Constant">local-scope</span>
-<span id="L254" class="LineNr">254 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L254" class="LineNr">254 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
 <span id="L255" class="LineNr">255 </span>  run [
 <span id="L256" class="LineNr">256 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove <a href='064list.mu.html#L6'>list</a>, <a href='064list.mu.html#L6'>list</a>
-<span id="L257" class="LineNr">257 </span>    1:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L257" class="LineNr">257 </span>    1:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> deaddress <a href='064list.mu.html#L6'>list</a>
 <span id="L258" class="LineNr">258 </span>  ]
 <span id="L259" class="LineNr">259 </span>  memory-should-contain [
 <span id="L260" class="LineNr">260 </span>   <span class="Constant"> 1</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># back to an empty list</span>
@@ -336,7 +336,7 @@ if ('onhashchange' in window) {
 <span id="L275" class="LineNr">275 </span>
 <span id="L276" class="LineNr">276 </span><span class="muScenario">scenario</span> reverse-list [
 <span id="L277" class="LineNr">277 </span>  <span class="Constant">local-scope</span>
-<span id="L278" class="LineNr">278 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> 0</span>
+<span id="L278" class="LineNr">278 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> null</span>
 <span id="L279" class="LineNr">279 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L280" class="LineNr">280 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L281" class="LineNr">281 </span>  run [
@@ -352,7 +352,7 @@ if ('onhashchange' in window) {
 <span id="L291" class="LineNr">291 </span>
 <span id="L292" class="LineNr">292 </span><span class="muScenario">scenario</span> stash-list [
 <span id="L293" class="LineNr">293 </span>  <span class="Constant">local-scope</span>
-<span id="L294" class="LineNr">294 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> 0</span>
+<span id="L294" class="LineNr">294 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> null</span>
 <span id="L295" class="LineNr">295 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L296" class="LineNr">296 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, <a href='064list.mu.html#L6'>list</a>
 <span id="L297" class="LineNr">297 </span>  run [
@@ -392,23 +392,23 @@ if ('onhashchange' in window) {
 <span id="L331" class="LineNr">331 </span>  val:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
 <span id="L332" class="LineNr">332 </span>  buf <span class="Special">&lt;-</span> append buf, val
 <span id="L333" class="LineNr">333 </span>  <span class="Comment"># now prepare next</span>
-<span id="L334" class="LineNr">334 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> in
-<span id="L335" class="LineNr">335 </span>  nextn:num <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L336" class="LineNr">336 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
+<span id="L334" class="LineNr">334 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='064list.mu.html#L6'>list</a>:_elem <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> in
+<span id="L335" class="LineNr">335 </span>  nextn:num <span class="Special">&lt;-</span> deaddress <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L336" class="LineNr">336 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L31'>next</a>
 <span id="L337" class="LineNr">337 </span>  buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ -&gt; ]</span>
 <span id="L338" class="LineNr">338 </span>  <span class="Comment"># and recurse</span>
 <span id="L339" class="LineNr">339 </span>  remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L340" class="LineNr">340 </span>  <span class="Delimiter">{</span>
 <span id="L341" class="LineNr">341 </span>    <span class="muControl">break-if</span> optional-input-found?
 <span id="L342" class="LineNr">342 </span>    <span class="Comment"># unlimited recursion</span>
-<span id="L343" class="LineNr">343 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
+<span id="L343" class="LineNr">343 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L31'>next</a>, buf
 <span id="L344" class="LineNr">344 </span>   <span class="muControl"> return</span>
 <span id="L345" class="LineNr">345 </span>  <span class="Delimiter">}</span>
 <span id="L346" class="LineNr">346 </span>  <span class="Delimiter">{</span>
 <span id="L347" class="LineNr">347 </span>    <span class="muControl">break-unless</span> remaining
 <span id="L348" class="LineNr">348 </span>    <span class="Comment"># limited recursion</span>
 <span id="L349" class="LineNr">349 </span>    remaining <span class="Special">&lt;-</span> subtract remaining,<span class="Constant"> 1</span>
-<span id="L350" class="LineNr">350 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf, remaining
+<span id="L350" class="LineNr">350 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L31'>next</a>, buf, remaining
 <span id="L351" class="LineNr">351 </span>   <span class="muControl"> return</span>
 <span id="L352" class="LineNr">352 </span>  <span class="Delimiter">}</span>
 <span id="L353" class="LineNr">353 </span>  <span class="Comment"># past recursion depth; insert ellipses and stop</span>
@@ -417,7 +417,7 @@ if ('onhashchange' in window) {
 <span id="L356" class="LineNr">356 </span>
 <span id="L357" class="LineNr">357 </span><span class="muScenario">scenario</span> stash-empty-list [
 <span id="L358" class="LineNr">358 </span>  <span class="Constant">local-scope</span>
-<span id="L359" class="LineNr">359 </span>  x:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L359" class="LineNr">359 </span>  x:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L360" class="LineNr">360 </span>  run [
 <span id="L361" class="LineNr">361 </span>    stash x
 <span id="L362" class="LineNr">362 </span>  ]
diff --git a/html/065duplex_list.mu.html b/html/065duplex_list.mu.html
index 16453fae..a426a45d 100644
--- a/html/065duplex_list.mu.html
+++ b/html/065duplex_list.mu.html
@@ -15,8 +15,8 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
@@ -24,7 +24,7 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -63,726 +63,783 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">  2 </span>
 <span id="L3" class="LineNr">  3 </span><span class="muData">container</span> <a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L4" class="LineNr">  4 </span>  value:_elem
-<span id="L5" class="LineNr">  5 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem
-<span id="L6" class="LineNr">  6 </span>  <a href='065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem
+<span id="L5" class="LineNr">  5 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem
+<span id="L6" class="LineNr">  6 </span>  <a href='065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem
 <span id="L7" class="LineNr">  7 </span>]
 <span id="L8" class="LineNr">  8 </span>
 <span id="L9" class="LineNr">  9 </span><span class="muRecipe">def</span> push x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:result<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
 <span id="L10" class="LineNr"> 10 </span>  <span class="Constant">local-scope</span>
 <span id="L11" class="LineNr"> 11 </span>  <span class="Constant">load-inputs</span>
 <span id="L12" class="LineNr"> 12 </span>  result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
-<span id="L13" class="LineNr"> 13 </span>  *result <span class="Special">&lt;-</span> merge x, in,<span class="Constant"> 0</span>
+<span id="L13" class="LineNr"> 13 </span>  *result <span class="Special">&lt;-</span> merge x, in,<span class="Constant"> null</span>
 <span id="L14" class="LineNr"> 14 </span>  <span class="muControl">return-unless</span> in
-<span id="L15" class="LineNr"> 15 </span>  put *in, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, result
+<span id="L15" class="LineNr"> 15 </span>  put *in, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, result
 <span id="L16" class="LineNr"> 16 </span>]
 <span id="L17" class="LineNr"> 17 </span>
 <span id="L18" class="LineNr"> 18 </span><span class="muRecipe">def</span> first in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:_elem [
 <span id="L19" class="LineNr"> 19 </span>  <span class="Constant">local-scope</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Constant">load-inputs</span>
-<span id="L21" class="LineNr"> 21 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
-<span id="L22" class="LineNr"> 22 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
-<span id="L23" class="LineNr"> 23 </span>]
-<span id="L24" class="LineNr"> 24 </span>
-<span id="L25" class="LineNr"> 25 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L25'>next</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
-<span id="L26" class="LineNr"> 26 </span>  <span class="Constant">local-scope</span>
-<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">load-inputs</span>
-<span id="L28" class="LineNr"> 28 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
-<span id="L29" class="LineNr"> 29 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
-<span id="L30" class="LineNr"> 30 </span>]
-<span id="L31" class="LineNr"> 31 </span>
-<span id="L32" class="LineNr"> 32 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L32'>prev</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
-<span id="L33" class="LineNr"> 33 </span>  <span class="Constant">local-scope</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">load-inputs</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> 0</span>
-<span id="L36" class="LineNr"> 36 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>
-<span id="L37" class="LineNr"> 37 </span> <span class="muControl"> return</span> result
-<span id="L38" class="LineNr"> 38 </span>]
-<span id="L39" class="LineNr"> 39 </span>
-<span id="L40" class="LineNr"> 40 </span><span class="muScenario">scenario</span> duplex-list-handling [
-<span id="L41" class="LineNr"> 41 </span>  run [
-<span id="L42" class="LineNr"> 42 </span>    <span class="Constant">local-scope</span>
-<span id="L43" class="LineNr"> 43 </span>    <span class="Comment"># reserve locations 0-9 to check for missing null check</span>
-<span id="L44" class="LineNr"> 44 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy<span class="Constant"> 34</span>
-<span id="L45" class="LineNr"> 45 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy<span class="Constant"> 35</span>
-<span id="L46" class="LineNr"> 46 </span>    <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L47" class="LineNr"> 47 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L48" class="LineNr"> 48 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L49" class="LineNr"> 49 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L50" class="LineNr"> 50 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L51" class="LineNr"> 51 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L52" class="LineNr"> 52 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L53" class="LineNr"> 53 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L54" class="LineNr"> 54 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L55" class="LineNr"> 55 </span>    30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L56" class="LineNr"> 56 </span>    31:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
-<span id="L57" class="LineNr"> 57 </span>    32:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
-<span id="L58" class="LineNr"> 58 </span>    33:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
-<span id="L59" class="LineNr"> 59 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L60" class="LineNr"> 60 </span>    40:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L61" class="LineNr"> 61 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L62" class="LineNr"> 62 </span>    41:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L63" class="LineNr"> 63 </span>    50:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L64" class="LineNr"> 64 </span>  ]
-<span id="L65" class="LineNr"> 65 </span>  memory-should-contain [
-<span id="L66" class="LineNr"> 66 </span>   <span class="Constant"> 0</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no modifications to null pointers</span>
-<span id="L67" class="LineNr"> 67 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 34</span>
-<span id="L68" class="LineNr"> 68 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 35</span>
-<span id="L69" class="LineNr"> 69 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
-<span id="L70" class="LineNr"> 70 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L71" class="LineNr"> 71 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L72" class="LineNr"> 72 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># null</span>
-<span id="L73" class="LineNr"> 73 </span>   <span class="Constant"> 31</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># first of null</span>
-<span id="L74" class="LineNr"> 74 </span>   <span class="Constant"> 32</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># next of null</span>
-<span id="L75" class="LineNr"> 75 </span>   <span class="Constant"> 33</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># prev of null</span>
-<span id="L76" class="LineNr"> 76 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># then start scanning prev</span>
-<span id="L77" class="LineNr"> 77 </span>   <span class="Constant"> 41</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
-<span id="L78" class="LineNr"> 78 </span>   <span class="Constant"> 50</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L79" class="LineNr"> 79 </span>  ]
-<span id="L80" class="LineNr"> 80 </span>]
-<span id="L81" class="LineNr"> 81 </span>
-<span id="L82" class="LineNr"> 82 </span><span class="muRecipe">def</span> length l:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
-<span id="L83" class="LineNr"> 83 </span>  <span class="Constant">local-scope</span>
-<span id="L84" class="LineNr"> 84 </span>  <span class="Constant">load-inputs</span>
-<span id="L85" class="LineNr"> 85 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">{</span>
-<span id="L87" class="LineNr"> 87 </span>    <span class="muControl">break-unless</span> l
-<span id="L88" class="LineNr"> 88 </span>    result <span class="Special">&lt;-</span> add result,<span class="Constant"> 1</span>
-<span id="L89" class="LineNr"> 89 </span>    l <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> l
-<span id="L90" class="LineNr"> 90 </span>   <span class="muControl"> loop</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span>]
-<span id="L93" class="LineNr"> 93 </span>
-<span id="L94" class="LineNr"> 94 </span><span class="Comment"># insert 'x' after 'in'</span>
-<span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L96" class="LineNr"> 96 </span>  <span class="Constant">local-scope</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">load-inputs</span>
-<span id="L98" class="LineNr"> 98 </span>  new-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
-<span id="L99" class="LineNr"> 99 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
-<span id="L100" class="LineNr">100 </span>  <span class="Comment"># save old next before changing it</span>
-<span id="L101" class="LineNr">101 </span>  next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
-<span id="L102" class="LineNr">102 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, new-node
-<span id="L103" class="LineNr">103 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, in
-<span id="L104" class="LineNr">104 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, next-node
-<span id="L105" class="LineNr">105 </span>  <span class="muControl">return-unless</span> next-node
-<span id="L106" class="LineNr">106 </span>  *next-node <span class="Special">&lt;-</span> put *next-node, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, new-node
-<span id="L107" class="LineNr">107 </span>]
-<span id="L108" class="LineNr">108 </span>
-<span id="L109" class="LineNr">109 </span><span class="muScenario">scenario</span> inserting-into-duplex-list [
-<span id="L110" class="LineNr">110 </span>  <span class="Constant">local-scope</span>
-<span id="L111" class="LineNr">111 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L112" class="LineNr">112 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L113" class="LineNr">113 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L114" class="LineNr">114 </span>  run [
-<span id="L115" class="LineNr">115 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># inside list</span>
-<span id="L116" class="LineNr">116 </span>    list2 <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, list2
-<span id="L117" class="LineNr">117 </span>    <span class="Comment"># check structure like before</span>
-<span id="L118" class="LineNr">118 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L119" class="LineNr">119 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L120" class="LineNr">120 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L121" class="LineNr">121 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L122" class="LineNr">122 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L123" class="LineNr">123 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L124" class="LineNr">124 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L125" class="LineNr">125 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L126" class="LineNr">126 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L127" class="LineNr">127 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L128" class="LineNr">128 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L129" class="LineNr">129 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L130" class="LineNr">130 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L131" class="LineNr">131 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L132" class="LineNr">132 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L133" class="LineNr">133 </span>  ]
-<span id="L134" class="LineNr">134 </span>  memory-should-contain [
-<span id="L135" class="LineNr">135 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
-<span id="L136" class="LineNr">136 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L137" class="LineNr">137 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
-<span id="L138" class="LineNr">138 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L139" class="LineNr">139 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># then prev</span>
-<span id="L140" class="LineNr">140 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L141" class="LineNr">141 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
-<span id="L142" class="LineNr">142 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L143" class="LineNr">143 </span>  ]
-<span id="L144" class="LineNr">144 </span>]
-<span id="L145" class="LineNr">145 </span>
-<span id="L146" class="LineNr">146 </span><span class="muScenario">scenario</span> inserting-at-end-of-duplex-list [
-<span id="L147" class="LineNr">147 </span>  <span class="Constant">local-scope</span>
-<span id="L148" class="LineNr">148 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L149" class="LineNr">149 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L150" class="LineNr">150 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L151" class="LineNr">151 </span>  run [
-<span id="L152" class="LineNr">152 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># inside list</span>
-<span id="L153" class="LineNr">153 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2  <span class="Comment"># now at end of list</span>
-<span id="L154" class="LineNr">154 </span>    list2 <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, list2
-<span id="L155" class="LineNr">155 </span>    <span class="Comment"># check structure like before</span>
-<span id="L156" class="LineNr">156 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L157" class="LineNr">157 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L158" class="LineNr">158 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L159" class="LineNr">159 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L160" class="LineNr">160 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L161" class="LineNr">161 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L162" class="LineNr">162 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L163" class="LineNr">163 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L164" class="LineNr">164 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L165" class="LineNr">165 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L166" class="LineNr">166 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L167" class="LineNr">167 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L168" class="LineNr">168 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L169" class="LineNr">169 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L170" class="LineNr">170 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L171" class="LineNr">171 </span>  ]
-<span id="L172" class="LineNr">172 </span>  memory-should-contain [
-<span id="L173" class="LineNr">173 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
-<span id="L174" class="LineNr">174 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L175" class="LineNr">175 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L176" class="LineNr">176 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
-<span id="L177" class="LineNr">177 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>  <span class="Comment"># then prev</span>
-<span id="L178" class="LineNr">178 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L179" class="LineNr">179 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
-<span id="L180" class="LineNr">180 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L181" class="LineNr">181 </span>  ]
-<span id="L182" class="LineNr">182 </span>]
-<span id="L183" class="LineNr">183 </span>
-<span id="L184" class="LineNr">184 </span><span class="muScenario">scenario</span> inserting-after-start-of-duplex-list [
-<span id="L185" class="LineNr">185 </span>  <span class="Constant">local-scope</span>
-<span id="L186" class="LineNr">186 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L187" class="LineNr">187 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L188" class="LineNr">188 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L189" class="LineNr">189 </span>  run [
-<span id="L190" class="LineNr">190 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L191" class="LineNr">191 </span>    <span class="Comment"># check structure like before</span>
-<span id="L192" class="LineNr">192 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L193" class="LineNr">193 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L194" class="LineNr">194 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L195" class="LineNr">195 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L196" class="LineNr">196 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L197" class="LineNr">197 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L198" class="LineNr">198 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L199" class="LineNr">199 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L200" class="LineNr">200 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L201" class="LineNr">201 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L202" class="LineNr">202 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L203" class="LineNr">203 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L204" class="LineNr">204 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L205" class="LineNr">205 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L206" class="LineNr">206 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L207" class="LineNr">207 </span>  ]
-<span id="L208" class="LineNr">208 </span>  memory-should-contain [
-<span id="L209" class="LineNr">209 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
-<span id="L210" class="LineNr">210 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
-<span id="L211" class="LineNr">211 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L212" class="LineNr">212 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L213" class="LineNr">213 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># then prev</span>
-<span id="L214" class="LineNr">214 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>
-<span id="L215" class="LineNr">215 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
-<span id="L216" class="LineNr">216 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L217" class="LineNr">217 </span>  ]
-<span id="L218" class="LineNr">218 </span>]
-<span id="L219" class="LineNr">219 </span>
-<span id="L220" class="LineNr">220 </span><span class="Comment"># remove 'x' from its surrounding list 'in'</span>
-<span id="L221" class="LineNr">221 </span><span class="Comment">#</span>
-<span id="L222" class="LineNr">222 </span><span class="Comment"># Returns null if and only if list is empty. Beware: in that case any other</span>
-<span id="L223" class="LineNr">223 </span><span class="Comment"># pointers to the head are now invalid.</span>
-<span id="L224" class="LineNr">224 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L225" class="LineNr">225 </span>  <span class="Constant">local-scope</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Constant">load-inputs</span>
-<span id="L227" class="LineNr">227 </span>  <span class="Comment"># if 'x' is null, return</span>
-<span id="L228" class="LineNr">228 </span>  <span class="muControl">return-unless</span> x
-<span id="L229" class="LineNr">229 </span>  next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
-<span id="L230" class="LineNr">230 </span>  prev-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>
-<span id="L231" class="LineNr">231 </span>  <span class="Comment"># null x's pointers</span>
-<span id="L232" class="LineNr">232 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>,<span class="Constant"> 0</span>
-<span id="L233" class="LineNr">233 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>,<span class="Constant"> 0</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Comment"># if next-node is not null, set its prev pointer</span>
-<span id="L235" class="LineNr">235 </span>  <span class="Delimiter">{</span>
-<span id="L236" class="LineNr">236 </span>    <span class="muControl">break-unless</span> next-node
-<span id="L237" class="LineNr">237 </span>    *next-node <span class="Special">&lt;-</span> put *next-node, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, prev-node
-<span id="L238" class="LineNr">238 </span>  <span class="Delimiter">}</span>
-<span id="L239" class="LineNr">239 </span>  <span class="Comment"># if prev-node is not null, set its next pointer and return</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Delimiter">{</span>
-<span id="L241" class="LineNr">241 </span>    <span class="muControl">break-unless</span> prev-node
-<span id="L242" class="LineNr">242 </span>    *prev-node <span class="Special">&lt;-</span> put *prev-node, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, next-node
-<span id="L243" class="LineNr">243 </span>   <span class="muControl"> return</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Delimiter">{</span>
+<span id="L22" class="LineNr"> 22 </span>    <span class="muControl">break-if</span> in
+<span id="L23" class="LineNr"> 23 </span>    zero:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
+<span id="L24" class="LineNr"> 24 </span>    zero-result:_elem <span class="Special">&lt;-</span> copy *zero
+<span id="L25" class="LineNr"> 25 </span>    abandon zero
+<span id="L26" class="LineNr"> 26 </span>   <span class="muControl"> return</span> zero-result
+<span id="L27" class="LineNr"> 27 </span>  <span class="Delimiter">}</span>
+<span id="L28" class="LineNr"> 28 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
+<span id="L29" class="LineNr"> 29 </span>]
+<span id="L30" class="LineNr"> 30 </span>
+<span id="L31" class="LineNr"> 31 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L31'>next</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
+<span id="L32" class="LineNr"> 32 </span>  <span class="Constant">local-scope</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Constant">load-inputs</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> null</span>
+<span id="L35" class="LineNr"> 35 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
+<span id="L36" class="LineNr"> 36 </span>]
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L38'>prev</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in [
+<span id="L39" class="LineNr"> 39 </span>  <span class="Constant">local-scope</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Constant">load-inputs</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="muControl">return-unless</span> in,<span class="Constant"> null</span>
+<span id="L42" class="LineNr"> 42 </span>  result <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>
+<span id="L43" class="LineNr"> 43 </span> <span class="muControl"> return</span> result
+<span id="L44" class="LineNr"> 44 </span>]
+<span id="L45" class="LineNr"> 45 </span>
+<span id="L46" class="LineNr"> 46 </span><span class="muScenario">scenario</span> duplex-list-handling [
+<span id="L47" class="LineNr"> 47 </span>  run [
+<span id="L48" class="LineNr"> 48 </span>    <span class="Constant">local-scope</span>
+<span id="L49" class="LineNr"> 49 </span>    <span class="Comment"># reserve locations 0-9 to check for missing null check</span>
+<span id="L50" class="LineNr"> 50 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy<span class="Constant"> 34</span>
+<span id="L51" class="LineNr"> 51 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy<span class="Constant"> 35</span>
+<span id="L52" class="LineNr"> 52 </span>    <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L53" class="LineNr"> 53 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L54" class="LineNr"> 54 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L55" class="LineNr"> 55 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L56" class="LineNr"> 56 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L57" class="LineNr"> 57 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L58" class="LineNr"> 58 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L59" class="LineNr"> 59 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L60" class="LineNr"> 60 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L61" class="LineNr"> 61 </span>    30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L62" class="LineNr"> 62 </span>    31:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
+<span id="L63" class="LineNr"> 63 </span>    32:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
+<span id="L64" class="LineNr"> 64 </span>    33:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> 30:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span>
+<span id="L65" class="LineNr"> 65 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L66" class="LineNr"> 66 </span>    40:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L67" class="LineNr"> 67 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L68" class="LineNr"> 68 </span>    41:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L69" class="LineNr"> 69 </span>    50:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L70" class="LineNr"> 70 </span>  ]
+<span id="L71" class="LineNr"> 71 </span>  memory-should-contain [
+<span id="L72" class="LineNr"> 72 </span>   <span class="Constant"> 0</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no modifications to null pointers</span>
+<span id="L73" class="LineNr"> 73 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 34</span>
+<span id="L74" class="LineNr"> 74 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 35</span>
+<span id="L75" class="LineNr"> 75 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
+<span id="L76" class="LineNr"> 76 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L77" class="LineNr"> 77 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L78" class="LineNr"> 78 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># null</span>
+<span id="L79" class="LineNr"> 79 </span>   <span class="Constant"> 31</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># first of null</span>
+<span id="L80" class="LineNr"> 80 </span>   <span class="Constant"> 32</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># next of null</span>
+<span id="L81" class="LineNr"> 81 </span>   <span class="Constant"> 33</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># prev of null</span>
+<span id="L82" class="LineNr"> 82 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># then start scanning prev</span>
+<span id="L83" class="LineNr"> 83 </span>   <span class="Constant"> 41</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
+<span id="L84" class="LineNr"> 84 </span>   <span class="Constant"> 50</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L85" class="LineNr"> 85 </span>  ]
+<span id="L86" class="LineNr"> 86 </span>]
+<span id="L87" class="LineNr"> 87 </span>
+<span id="L88" class="LineNr"> 88 </span><span class="muRecipe">def</span> length l:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:num [
+<span id="L89" class="LineNr"> 89 </span>  <span class="Constant">local-scope</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Constant">load-inputs</span>
+<span id="L91" class="LineNr"> 91 </span>  result <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>    <span class="muControl">break-unless</span> l
+<span id="L94" class="LineNr"> 94 </span>    result <span class="Special">&lt;-</span> add result,<span class="Constant"> 1</span>
+<span id="L95" class="LineNr"> 95 </span>    l <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> l
+<span id="L96" class="LineNr"> 96 </span>   <span class="muControl"> loop</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Delimiter">}</span>
+<span id="L98" class="LineNr"> 98 </span>]
+<span id="L99" class="LineNr"> 99 </span>
+<span id="L100" class="LineNr">100 </span><span class="Comment"># insert 'x' after 'in'</span>
+<span id="L101" class="LineNr">101 </span><span class="muRecipe">def</span> insert x:_elem, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L102" class="LineNr">102 </span>  <span class="Constant">local-scope</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Constant">load-inputs</span>
+<span id="L104" class="LineNr">104 </span>  new-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(duplex-list _elem): type<span class="Delimiter">}</span>
+<span id="L105" class="LineNr">105 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant">value:offset</span>, x
+<span id="L106" class="LineNr">106 </span>  <span class="Comment"># save old next before changing it</span>
+<span id="L107" class="LineNr">107 </span>  next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
+<span id="L108" class="LineNr">108 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, new-node
+<span id="L109" class="LineNr">109 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, in
+<span id="L110" class="LineNr">110 </span>  *new-node <span class="Special">&lt;-</span> put *new-node, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, next-node
+<span id="L111" class="LineNr">111 </span>  <span class="muControl">return-unless</span> next-node
+<span id="L112" class="LineNr">112 </span>  *next-node <span class="Special">&lt;-</span> put *next-node, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, new-node
+<span id="L113" class="LineNr">113 </span>]
+<span id="L114" class="LineNr">114 </span>
+<span id="L115" class="LineNr">115 </span><span class="muScenario">scenario</span> inserting-into-duplex-list [
+<span id="L116" class="LineNr">116 </span>  <span class="Constant">local-scope</span>
+<span id="L117" class="LineNr">117 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L118" class="LineNr">118 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L119" class="LineNr">119 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L120" class="LineNr">120 </span>  run [
+<span id="L121" class="LineNr">121 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># inside list</span>
+<span id="L122" class="LineNr">122 </span>    list2 <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, list2
+<span id="L123" class="LineNr">123 </span>    <span class="Comment"># check structure like before</span>
+<span id="L124" class="LineNr">124 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L125" class="LineNr">125 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L126" class="LineNr">126 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L127" class="LineNr">127 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L128" class="LineNr">128 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L129" class="LineNr">129 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L130" class="LineNr">130 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L131" class="LineNr">131 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L132" class="LineNr">132 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L133" class="LineNr">133 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L134" class="LineNr">134 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L135" class="LineNr">135 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L136" class="LineNr">136 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L137" class="LineNr">137 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L138" class="LineNr">138 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L139" class="LineNr">139 </span>  ]
+<span id="L140" class="LineNr">140 </span>  memory-should-contain [
+<span id="L141" class="LineNr">141 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
+<span id="L142" class="LineNr">142 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L143" class="LineNr">143 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
+<span id="L144" class="LineNr">144 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L145" class="LineNr">145 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># then prev</span>
+<span id="L146" class="LineNr">146 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L147" class="LineNr">147 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
+<span id="L148" class="LineNr">148 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L149" class="LineNr">149 </span>  ]
+<span id="L150" class="LineNr">150 </span>]
+<span id="L151" class="LineNr">151 </span>
+<span id="L152" class="LineNr">152 </span><span class="muScenario">scenario</span> inserting-at-end-of-duplex-list [
+<span id="L153" class="LineNr">153 </span>  <span class="Constant">local-scope</span>
+<span id="L154" class="LineNr">154 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L155" class="LineNr">155 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L156" class="LineNr">156 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L157" class="LineNr">157 </span>  run [
+<span id="L158" class="LineNr">158 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># inside list</span>
+<span id="L159" class="LineNr">159 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2  <span class="Comment"># now at end of list</span>
+<span id="L160" class="LineNr">160 </span>    list2 <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, list2
+<span id="L161" class="LineNr">161 </span>    <span class="Comment"># check structure like before</span>
+<span id="L162" class="LineNr">162 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L163" class="LineNr">163 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L164" class="LineNr">164 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L165" class="LineNr">165 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L166" class="LineNr">166 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L167" class="LineNr">167 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L168" class="LineNr">168 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L169" class="LineNr">169 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L170" class="LineNr">170 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L171" class="LineNr">171 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L172" class="LineNr">172 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L173" class="LineNr">173 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L174" class="LineNr">174 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L175" class="LineNr">175 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L176" class="LineNr">176 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L177" class="LineNr">177 </span>  ]
+<span id="L178" class="LineNr">178 </span>  memory-should-contain [
+<span id="L179" class="LineNr">179 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
+<span id="L180" class="LineNr">180 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L181" class="LineNr">181 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L182" class="LineNr">182 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
+<span id="L183" class="LineNr">183 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>  <span class="Comment"># then prev</span>
+<span id="L184" class="LineNr">184 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L185" class="LineNr">185 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
+<span id="L186" class="LineNr">186 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L187" class="LineNr">187 </span>  ]
+<span id="L188" class="LineNr">188 </span>]
+<span id="L189" class="LineNr">189 </span>
+<span id="L190" class="LineNr">190 </span><span class="muScenario">scenario</span> inserting-after-start-of-duplex-list [
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">local-scope</span>
+<span id="L192" class="LineNr">192 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L193" class="LineNr">193 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L194" class="LineNr">194 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L195" class="LineNr">195 </span>  run [
+<span id="L196" class="LineNr">196 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> insert<span class="Constant"> 6</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L197" class="LineNr">197 </span>    <span class="Comment"># check structure like before</span>
+<span id="L198" class="LineNr">198 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L199" class="LineNr">199 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L200" class="LineNr">200 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L201" class="LineNr">201 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L202" class="LineNr">202 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L203" class="LineNr">203 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L204" class="LineNr">204 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L205" class="LineNr">205 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L206" class="LineNr">206 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L207" class="LineNr">207 </span>    20:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L208" class="LineNr">208 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L209" class="LineNr">209 </span>    21:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L210" class="LineNr">210 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L211" class="LineNr">211 </span>    22:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L212" class="LineNr">212 </span>    30:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L213" class="LineNr">213 </span>  ]
+<span id="L214" class="LineNr">214 </span>  memory-should-contain [
+<span id="L215" class="LineNr">215 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next</span>
+<span id="L216" class="LineNr">216 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>  <span class="Comment"># inserted element</span>
+<span id="L217" class="LineNr">217 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L218" class="LineNr">218 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L219" class="LineNr">219 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># then prev</span>
+<span id="L220" class="LineNr">220 </span>   <span class="Constant"> 21</span> <span class="Special">&lt;-</span><span class="Constant"> 6</span>
+<span id="L221" class="LineNr">221 </span>   <span class="Constant"> 22</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
+<span id="L222" class="LineNr">222 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L223" class="LineNr">223 </span>  ]
+<span id="L224" class="LineNr">224 </span>]
+<span id="L225" class="LineNr">225 </span>
+<span id="L226" class="LineNr">226 </span><span class="Comment"># remove 'x' from its surrounding list 'in'</span>
+<span id="L227" class="LineNr">227 </span><span class="Comment">#</span>
+<span id="L228" class="LineNr">228 </span><span class="Comment"># Returns null if and only if list is empty. Beware: in that case any other</span>
+<span id="L229" class="LineNr">229 </span><span class="Comment"># pointers to the head are now invalid.</span>
+<span id="L230" class="LineNr">230 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L231" class="LineNr">231 </span>  <span class="Constant">local-scope</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Constant">load-inputs</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Comment"># if 'x' is null, return</span>
+<span id="L234" class="LineNr">234 </span>  <span class="muControl">return-unless</span> x
+<span id="L235" class="LineNr">235 </span>  next-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
+<span id="L236" class="LineNr">236 </span>  prev-node:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>
+<span id="L237" class="LineNr">237 </span>  <span class="Comment"># null x's pointers</span>
+<span id="L238" class="LineNr">238 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>,<span class="Constant"> null</span>
+<span id="L239" class="LineNr">239 </span>  *x <span class="Special">&lt;-</span> put *x, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>,<span class="Constant"> null</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Comment"># if next-node is not null, set its prev pointer</span>
+<span id="L241" class="LineNr">241 </span>  <span class="Delimiter">{</span>
+<span id="L242" class="LineNr">242 </span>    <span class="muControl">break-unless</span> next-node
+<span id="L243" class="LineNr">243 </span>    *next-node <span class="Special">&lt;-</span> put *next-node, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, prev-node
 <span id="L244" class="LineNr">244 </span>  <span class="Delimiter">}</span>
-<span id="L245" class="LineNr">245 </span>  <span class="Comment"># if prev-node is null, then we removed the head node at 'in'</span>
-<span id="L246" class="LineNr">246 </span>  <span class="Comment"># return the new head rather than the old 'in'</span>
-<span id="L247" class="LineNr">247 </span> <span class="muControl"> return</span> next-node
-<span id="L248" class="LineNr">248 </span>]
-<span id="L249" class="LineNr">249 </span>
-<span id="L250" class="LineNr">250 </span><span class="muScenario">scenario</span> removing-from-duplex-list [
-<span id="L251" class="LineNr">251 </span>  <span class="Constant">local-scope</span>
-<span id="L252" class="LineNr">252 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L253" class="LineNr">253 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L254" class="LineNr">254 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L255" class="LineNr">255 </span>  run [
-<span id="L256" class="LineNr">256 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># second element</span>
-<span id="L257" class="LineNr">257 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
-<span id="L258" class="LineNr">258 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> 0</span>
-<span id="L259" class="LineNr">259 </span>    <span class="Comment"># check structure like before</span>
-<span id="L260" class="LineNr">260 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L261" class="LineNr">261 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L262" class="LineNr">262 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L263" class="LineNr">263 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L264" class="LineNr">264 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L265" class="LineNr">265 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L266" class="LineNr">266 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L267" class="LineNr">267 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L268" class="LineNr">268 </span>  ]
-<span id="L269" class="LineNr">269 </span>  memory-should-contain [
-<span id="L270" class="LineNr">270 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># remove returned non-null</span>
-<span id="L271" class="LineNr">271 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next, skipping deleted element</span>
-<span id="L272" class="LineNr">272 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L273" class="LineNr">273 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
-<span id="L274" class="LineNr">274 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># prev of final element</span>
-<span id="L275" class="LineNr">275 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L276" class="LineNr">276 </span>  ]
-<span id="L277" class="LineNr">277 </span>]
-<span id="L278" class="LineNr">278 </span>
-<span id="L279" class="LineNr">279 </span><span class="muScenario">scenario</span> removing-from-start-of-duplex-list [
-<span id="L280" class="LineNr">280 </span>  <span class="Constant">local-scope</span>
-<span id="L281" class="LineNr">281 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L282" class="LineNr">282 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L283" class="LineNr">283 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L284" class="LineNr">284 </span>  run [
-<span id="L285" class="LineNr">285 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove <a href='064list.mu.html#L6'>list</a>, <a href='064list.mu.html#L6'>list</a>
-<span id="L286" class="LineNr">286 </span>    <span class="Comment"># check structure like before</span>
-<span id="L287" class="LineNr">287 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L288" class="LineNr">288 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L289" class="LineNr">289 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L290" class="LineNr">290 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L291" class="LineNr">291 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L292" class="LineNr">292 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L293" class="LineNr">293 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L294" class="LineNr">294 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L295" class="LineNr">295 </span>  ]
-<span id="L296" class="LineNr">296 </span>  memory-should-contain [
-<span id="L297" class="LineNr">297 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># scanning next, skipping deleted element</span>
-<span id="L298" class="LineNr">298 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L299" class="LineNr">299 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
-<span id="L300" class="LineNr">300 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># prev of final element</span>
-<span id="L301" class="LineNr">301 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L302" class="LineNr">302 </span>  ]
-<span id="L303" class="LineNr">303 </span>]
-<span id="L304" class="LineNr">304 </span>
-<span id="L305" class="LineNr">305 </span><span class="muScenario">scenario</span> removing-from-end-of-duplex-list [
-<span id="L306" class="LineNr">306 </span>  <span class="Constant">local-scope</span>
-<span id="L307" class="LineNr">307 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L308" class="LineNr">308 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L309" class="LineNr">309 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L310" class="LineNr">310 </span>  run [
-<span id="L311" class="LineNr">311 </span>    <span class="Comment"># delete last element</span>
-<span id="L312" class="LineNr">312 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L313" class="LineNr">313 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L314" class="LineNr">314 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
-<span id="L315" class="LineNr">315 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> 0</span>
-<span id="L316" class="LineNr">316 </span>    <span class="Comment"># check structure like before</span>
-<span id="L317" class="LineNr">317 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L318" class="LineNr">318 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L319" class="LineNr">319 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L320" class="LineNr">320 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L321" class="LineNr">321 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L322" class="LineNr">322 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L32'>prev</a> list2
-<span id="L323" class="LineNr">323 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
-<span id="L324" class="LineNr">324 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L325" class="LineNr">325 </span>  ]
-<span id="L326" class="LineNr">326 </span>  memory-should-contain [
-<span id="L327" class="LineNr">327 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># remove returned non-null</span>
-<span id="L328" class="LineNr">328 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next, skipping deleted element</span>
-<span id="L329" class="LineNr">329 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
-<span id="L330" class="LineNr">330 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
-<span id="L331" class="LineNr">331 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># prev of final element</span>
-<span id="L332" class="LineNr">332 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
-<span id="L333" class="LineNr">333 </span>  ]
-<span id="L334" class="LineNr">334 </span>]
-<span id="L335" class="LineNr">335 </span>
-<span id="L336" class="LineNr">336 </span><span class="muScenario">scenario</span> removing-from-singleton-duplex-list [
-<span id="L337" class="LineNr">337 </span>  <span class="Constant">local-scope</span>
-<span id="L338" class="LineNr">338 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L339" class="LineNr">339 </span>  run [
-<span id="L340" class="LineNr">340 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove <a href='064list.mu.html#L6'>list</a>, <a href='064list.mu.html#L6'>list</a>
-<span id="L341" class="LineNr">341 </span>    1:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
-<span id="L342" class="LineNr">342 </span>  ]
-<span id="L343" class="LineNr">343 </span>  memory-should-contain [
-<span id="L344" class="LineNr">344 </span>   <span class="Constant"> 1</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># back to an empty list</span>
-<span id="L345" class="LineNr">345 </span>  ]
-<span id="L346" class="LineNr">346 </span>]
-<span id="L347" class="LineNr">347 </span>
-<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, n:num, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L349" class="LineNr">349 </span>  <span class="Constant">local-scope</span>
-<span id="L350" class="LineNr">350 </span>  <span class="Constant">load-inputs</span>
-<span id="L351" class="LineNr">351 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L352" class="LineNr">352 </span>  curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy x
-<span id="L353" class="LineNr">353 </span>  <span class="Delimiter">{</span>
-<span id="L354" class="LineNr">354 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal i, n
-<span id="L355" class="LineNr">355 </span>    <span class="muControl">break-if</span> done?
-<span id="L356" class="LineNr">356 </span>    <span class="muControl">break-unless</span> curr
-<span id="L357" class="LineNr">357 </span>    <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> curr
-<span id="L358" class="LineNr">358 </span>    in <span class="Special">&lt;-</span> remove curr, in
-<span id="L359" class="LineNr">359 </span>    curr <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L360" class="LineNr">360 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L361" class="LineNr">361 </span>   <span class="muControl"> loop</span>
-<span id="L362" class="LineNr">362 </span>  <span class="Delimiter">}</span>
-<span id="L363" class="LineNr">363 </span>]
-<span id="L364" class="LineNr">364 </span>
-<span id="L365" class="LineNr">365 </span><span class="muScenario">scenario</span> removing-multiple-from-duplex-list [
-<span id="L366" class="LineNr">366 </span>  <span class="Constant">local-scope</span>
-<span id="L367" class="LineNr">367 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L368" class="LineNr">368 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L369" class="LineNr">369 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L370" class="LineNr">370 </span>  run [
-<span id="L371" class="LineNr">371 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># second element</span>
-<span id="L372" class="LineNr">372 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2,<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L373" class="LineNr">373 </span>    stash <a href='064list.mu.html#L6'>list</a>
-<span id="L374" class="LineNr">374 </span>  ]
-<span id="L375" class="LineNr">375 </span>  trace-should-contain [
-<span id="L376" class="LineNr">376 </span>    app:<span class="Constant"> 5</span>
-<span id="L377" class="LineNr">377 </span>  ]
-<span id="L378" class="LineNr">378 </span>]
-<span id="L379" class="LineNr">379 </span>
-<span id="L380" class="LineNr">380 </span><span class="Comment"># remove values between 'start' and 'end' (both exclusive).</span>
-<span id="L381" class="LineNr">381 </span><span class="Comment"># also clear pointers back out from start/end for hygiene.</span>
-<span id="L382" class="LineNr">382 </span><span class="Comment"># set end to 0 to delete everything past start.</span>
-<span id="L383" class="LineNr">383 </span><span class="Comment"># can't set start to 0 to delete everything before end, because there's no</span>
-<span id="L384" class="LineNr">384 </span><span class="Comment"># clean way to return the new head pointer.</span>
-<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L385'>remove-between</a> start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:start<span class="muRecipe"> -&gt; </span>start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L386" class="LineNr">386 </span>  <span class="Constant">local-scope</span>
-<span id="L387" class="LineNr">387 </span>  <span class="Constant">load-inputs</span>
-<span id="L388" class="LineNr">388 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *start, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>
-<span id="L389" class="LineNr">389 </span>  nothing-to-delete?:bool <span class="Special">&lt;-</span> equal <a href='065duplex_list.mu.html#L25'>next</a>, end
-<span id="L390" class="LineNr">390 </span>  <span class="muControl">return-if</span> nothing-to-delete?
-<span id="L391" class="LineNr">391 </span>  assert <a href='065duplex_list.mu.html#L25'>next</a>, <span class="Constant">[malformed duplex list]</span>
-<span id="L392" class="LineNr">392 </span>  <span class="Comment"># start-&gt;next-&gt;prev = 0</span>
-<span id="L393" class="LineNr">393 </span>  <span class="Comment"># start-&gt;next = end</span>
-<span id="L394" class="LineNr">394 </span>  *next <span class="Special">&lt;-</span> put *next, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>,<span class="Constant"> 0</span>
-<span id="L395" class="LineNr">395 </span>  *start <span class="Special">&lt;-</span> put *start, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, end
-<span id="L396" class="LineNr">396 </span>  <span class="muControl">return-unless</span> end
-<span id="L397" class="LineNr">397 </span>  <span class="Comment"># end-&gt;prev-&gt;next = 0</span>
-<span id="L398" class="LineNr">398 </span>  <span class="Comment"># end-&gt;prev = start</span>
-<span id="L399" class="LineNr">399 </span>  <a href='065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *end, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>
-<span id="L400" class="LineNr">400 </span>  assert <a href='065duplex_list.mu.html#L32'>prev</a>, <span class="Constant">[malformed duplex <a href='064list.mu.html#L6'>list</a> - 2]</span>
-<span id="L401" class="LineNr">401 </span>  *prev <span class="Special">&lt;-</span> put *prev, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>,<span class="Constant"> 0</span>
-<span id="L402" class="LineNr">402 </span>  *end <span class="Special">&lt;-</span> put *end, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, start
-<span id="L403" class="LineNr">403 </span>]
-<span id="L404" class="LineNr">404 </span>
-<span id="L405" class="LineNr">405 </span><span class="muScenario">scenario</span> remove-range [
-<span id="L406" class="LineNr">406 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
-<span id="L407" class="LineNr">407 </span>  <span class="Constant">local-scope</span>
-<span id="L408" class="LineNr">408 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> 0</span>
-<span id="L409" class="LineNr">409 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L410" class="LineNr">410 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L411" class="LineNr">411 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L412" class="LineNr">412 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L413" class="LineNr">413 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L414" class="LineNr">414 </span>  run [
-<span id="L415" class="LineNr">415 </span>    <span class="Comment"># delete 16 onwards</span>
-<span id="L416" class="LineNr">416 </span>    <span class="Comment"># first pointer: to the third element</span>
-<span id="L417" class="LineNr">417 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L418" class="LineNr">418 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L419" class="LineNr">419 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L385'>remove-between</a> list2,<span class="Constant"> 0</span>
-<span id="L420" class="LineNr">420 </span>    <span class="Comment"># now check the list</span>
-<span id="L421" class="LineNr">421 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L422" class="LineNr">422 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L423" class="LineNr">423 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L424" class="LineNr">424 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L425" class="LineNr">425 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L426" class="LineNr">426 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L427" class="LineNr">427 </span>  ]
-<span id="L428" class="LineNr">428 </span>  memory-should-contain [
-<span id="L429" class="LineNr">429 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
-<span id="L430" class="LineNr">430 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
-<span id="L431" class="LineNr">431 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 15</span>
-<span id="L432" class="LineNr">432 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L433" class="LineNr">433 </span>  ]
-<span id="L434" class="LineNr">434 </span>]
-<span id="L435" class="LineNr">435 </span>
-<span id="L436" class="LineNr">436 </span><span class="muScenario">scenario</span> remove-range-to-final [
-<span id="L437" class="LineNr">437 </span>  <span class="Constant">local-scope</span>
-<span id="L438" class="LineNr">438 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
-<span id="L439" class="LineNr">439 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> 0</span>
-<span id="L440" class="LineNr">440 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L441" class="LineNr">441 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L442" class="LineNr">442 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L443" class="LineNr">443 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L444" class="LineNr">444 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L445" class="LineNr">445 </span>  run [
-<span id="L446" class="LineNr">446 </span>    <span class="Comment"># delete 15, 16 and 17</span>
-<span id="L447" class="LineNr">447 </span>    <span class="Comment"># start pointer: to the second element</span>
-<span id="L448" class="LineNr">448 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L449" class="LineNr">449 </span>    <span class="Comment"># end pointer: to the last (sixth) element</span>
-<span id="L450" class="LineNr">450 </span>    end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> list2
-<span id="L451" class="LineNr">451 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> end
-<span id="L452" class="LineNr">452 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> end
-<span id="L453" class="LineNr">453 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> end
-<span id="L454" class="LineNr">454 </span>    <a href='065duplex_list.mu.html#L385'>remove-between</a> list2, end
-<span id="L455" class="LineNr">455 </span>    <span class="Comment"># now check the list</span>
-<span id="L456" class="LineNr">456 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L457" class="LineNr">457 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L458" class="LineNr">458 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L459" class="LineNr">459 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L460" class="LineNr">460 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L461" class="LineNr">461 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L462" class="LineNr">462 </span>  ]
-<span id="L463" class="LineNr">463 </span>  memory-should-contain [
-<span id="L464" class="LineNr">464 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
-<span id="L465" class="LineNr">465 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
-<span id="L466" class="LineNr">466 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 18</span>
-<span id="L467" class="LineNr">467 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
-<span id="L468" class="LineNr">468 </span>  ]
-<span id="L469" class="LineNr">469 </span>]
-<span id="L470" class="LineNr">470 </span>
-<span id="L471" class="LineNr">471 </span><span class="muScenario">scenario</span> remove-range-empty [
-<span id="L472" class="LineNr">472 </span>  <span class="Constant">local-scope</span>
-<span id="L473" class="LineNr">473 </span>  <span class="Comment"># construct a duplex list with three elements [13, 14, 15]</span>
-<span id="L474" class="LineNr">474 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>,<span class="Constant"> 0</span>
-<span id="L475" class="LineNr">475 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L476" class="LineNr">476 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L477" class="LineNr">477 </span>  run [
-<span id="L478" class="LineNr">478 </span>    <span class="Comment"># delete between first and second element (i.e. nothing)</span>
-<span id="L479" class="LineNr">479 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L480" class="LineNr">480 </span>    <a href='065duplex_list.mu.html#L385'>remove-between</a> <a href='064list.mu.html#L6'>list</a>, list2
-<span id="L481" class="LineNr">481 </span>    <span class="Comment"># now check the list</span>
-<span id="L482" class="LineNr">482 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L483" class="LineNr">483 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L484" class="LineNr">484 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L485" class="LineNr">485 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L486" class="LineNr">486 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L487" class="LineNr">487 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L488" class="LineNr">488 </span>  ]
-<span id="L489" class="LineNr">489 </span>  <span class="Comment"># no change</span>
-<span id="L490" class="LineNr">490 </span>  memory-should-contain [
-<span id="L491" class="LineNr">491 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
-<span id="L492" class="LineNr">492 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
-<span id="L493" class="LineNr">493 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 15</span>
-<span id="L494" class="LineNr">494 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L495" class="LineNr">495 </span>  ]
-<span id="L496" class="LineNr">496 </span>]
-<span id="L497" class="LineNr">497 </span>
-<span id="L498" class="LineNr">498 </span><span class="muScenario">scenario</span> remove-range-to-end [
-<span id="L499" class="LineNr">499 </span>  <span class="Constant">local-scope</span>
-<span id="L500" class="LineNr">500 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
-<span id="L501" class="LineNr">501 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> 0</span>
-<span id="L502" class="LineNr">502 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L503" class="LineNr">503 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L504" class="LineNr">504 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L505" class="LineNr">505 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L506" class="LineNr">506 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L507" class="LineNr">507 </span>  run [
-<span id="L508" class="LineNr">508 </span>    <span class="Comment"># remove the third element and beyond</span>
-<span id="L509" class="LineNr">509 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L510" class="LineNr">510 </span>    <a href='065duplex_list.mu.html#L385'>remove-between</a> list2,<span class="Constant"> 0</span>
-<span id="L511" class="LineNr">511 </span>    <span class="Comment"># now check the list</span>
-<span id="L512" class="LineNr">512 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L513" class="LineNr">513 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L514" class="LineNr">514 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
-<span id="L515" class="LineNr">515 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> <a href='064list.mu.html#L6'>list</a>
-<span id="L516" class="LineNr">516 </span>  ]
-<span id="L517" class="LineNr">517 </span>  memory-should-contain [
-<span id="L518" class="LineNr">518 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
-<span id="L519" class="LineNr">519 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
-<span id="L520" class="LineNr">520 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L521" class="LineNr">521 </span>  ]
-<span id="L522" class="LineNr">522 </span>]
-<span id="L523" class="LineNr">523 </span>
-<span id="L524" class="LineNr">524 </span><span class="Comment"># insert list beginning at 'start' after 'in'</span>
-<span id="L525" class="LineNr">525 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L525'>splice</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L526" class="LineNr">526 </span>  <span class="Constant">local-scope</span>
-<span id="L527" class="LineNr">527 </span>  <span class="Constant">load-inputs</span>
-<span id="L528" class="LineNr">528 </span>  <span class="muControl">return-unless</span> in
-<span id="L529" class="LineNr">529 </span>  <span class="muControl">return-unless</span> start
-<span id="L530" class="LineNr">530 </span>  end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> start
-<span id="L531" class="LineNr">531 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> in
-<span id="L532" class="LineNr">532 </span>  <span class="Delimiter">{</span>
-<span id="L533" class="LineNr">533 </span>    <span class="muControl">break-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L534" class="LineNr">534 </span>    *end <span class="Special">&lt;-</span> put *end, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L535" class="LineNr">535 </span>    *next <span class="Special">&lt;-</span> put *next, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, end
-<span id="L536" class="LineNr">536 </span>  <span class="Delimiter">}</span>
-<span id="L537" class="LineNr">537 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, start
-<span id="L538" class="LineNr">538 </span>  *start <span class="Special">&lt;-</span> put *start, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, in
-<span id="L539" class="LineNr">539 </span>]
-<span id="L540" class="LineNr">540 </span>
-<span id="L541" class="LineNr">541 </span><span class="Comment"># insert contents of 'new' after 'in'</span>
-<span id="L542" class="LineNr">542 </span><span class="muRecipe">def</span> insert in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L543" class="LineNr">543 </span>  <span class="Constant">local-scope</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Constant">load-inputs</span>
-<span id="L545" class="LineNr">545 </span>  <span class="muControl">return-unless</span> in
-<span id="L546" class="LineNr">546 </span>  <span class="muControl">return-unless</span> new
-<span id="L547" class="LineNr">547 </span>  len:num <span class="Special">&lt;-</span> length *new
-<span id="L548" class="LineNr">548 </span>  <span class="muControl">return-unless</span> len
-<span id="L549" class="LineNr">549 </span>  curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy in
-<span id="L550" class="LineNr">550 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L551" class="LineNr">551 </span>  <span class="Delimiter">{</span>
-<span id="L552" class="LineNr">552 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal idx, len
-<span id="L553" class="LineNr">553 </span>    <span class="muControl">break-if</span> done?
-<span id="L554" class="LineNr">554 </span>    c:_elem <span class="Special">&lt;-</span> index *new, idx
-<span id="L555" class="LineNr">555 </span>    insert c, curr
-<span id="L556" class="LineNr">556 </span>    <span class="Comment"># next iter</span>
-<span id="L557" class="LineNr">557 </span>    curr <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> curr
-<span id="L558" class="LineNr">558 </span>    idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
-<span id="L559" class="LineNr">559 </span>   <span class="muControl"> loop</span>
-<span id="L560" class="LineNr">560 </span>  <span class="Delimiter">}</span>
-<span id="L561" class="LineNr">561 </span>]
-<span id="L562" class="LineNr">562 </span>
-<span id="L563" class="LineNr">563 </span><span class="muRecipe">def</span> append in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L564" class="LineNr">564 </span>  <span class="Constant">local-scope</span>
-<span id="L565" class="LineNr">565 </span>  <span class="Constant">load-inputs</span>
-<span id="L566" class="LineNr">566 </span>  <a href='065duplex_list.mu.html#L572'>last</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L572'>last</a> in
-<span id="L567" class="LineNr">567 </span>  *last <span class="Special">&lt;-</span> put *last, <span class="Constant"><a href='065duplex_list.mu.html#L25'>next</a>:offset</span>, new
-<span id="L568" class="LineNr">568 </span>  <span class="muControl">return-unless</span> new
-<span id="L569" class="LineNr">569 </span>  *new <span class="Special">&lt;-</span> put *new, <span class="Constant"><a href='065duplex_list.mu.html#L32'>prev</a>:offset</span>, <a href='065duplex_list.mu.html#L572'>last</a>
-<span id="L570" class="LineNr">570 </span>]
-<span id="L571" class="LineNr">571 </span>
-<span id="L572" class="LineNr">572 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L572'>last</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L573" class="LineNr">573 </span>  <span class="Constant">local-scope</span>
-<span id="L574" class="LineNr">574 </span>  <span class="Constant">load-inputs</span>
-<span id="L575" class="LineNr">575 </span>  result <span class="Special">&lt;-</span> copy in
-<span id="L576" class="LineNr">576 </span>  <span class="Delimiter">{</span>
-<span id="L577" class="LineNr">577 </span>    <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> result
-<span id="L578" class="LineNr">578 </span>    <span class="muControl">break-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L579" class="LineNr">579 </span>    result <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L580" class="LineNr">580 </span>   <span class="muControl"> loop</span>
-<span id="L581" class="LineNr">581 </span>  <span class="Delimiter">}</span>
-<span id="L582" class="LineNr">582 </span>]
-<span id="L583" class="LineNr">583 </span>
-<span id="L584" class="LineNr">584 </span><span class="Comment"># does a duplex list start with a certain sequence of elements?</span>
-<span id="L585" class="LineNr">585 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L585'>match</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, y:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
-<span id="L586" class="LineNr">586 </span>  <span class="Constant">local-scope</span>
-<span id="L587" class="LineNr">587 </span>  <span class="Constant">load-inputs</span>
-<span id="L588" class="LineNr">588 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L589" class="LineNr">589 </span>  max:num <span class="Special">&lt;-</span> length *y
-<span id="L590" class="LineNr">590 </span>  <span class="Delimiter">{</span>
-<span id="L591" class="LineNr">591 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal i, max
-<span id="L592" class="LineNr">592 </span>    <span class="muControl">break-if</span> done?
-<span id="L593" class="LineNr">593 </span>    expected:_elem <span class="Special">&lt;-</span> index *y, i
-<span id="L594" class="LineNr">594 </span>    <span class="muControl">return-unless</span> x, <span class="Constant">0/no-match</span>
-<span id="L595" class="LineNr">595 </span>    curr:_elem <span class="Special">&lt;-</span> first x
-<span id="L596" class="LineNr">596 </span>    curr-matches?:bool <span class="Special">&lt;-</span> equal curr, expected
-<span id="L597" class="LineNr">597 </span>    <span class="muControl">return-unless</span> curr-matches?, <span class="Constant">0/no-match</span>
-<span id="L598" class="LineNr">598 </span>    x <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> x
-<span id="L599" class="LineNr">599 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L600" class="LineNr">600 </span>   <span class="muControl"> loop</span>
-<span id="L601" class="LineNr">601 </span>  <span class="Delimiter">}</span>
-<span id="L602" class="LineNr">602 </span> <span class="muControl"> return</span> <span class="Constant">1/successful-match</span>
-<span id="L603" class="LineNr">603 </span>]
-<span id="L604" class="LineNr">604 </span>
-<span id="L605" class="LineNr">605 </span><span class="muScenario">scenario</span> duplex-list-match [
-<span id="L606" class="LineNr">606 </span>  <span class="Constant">local-scope</span>
-<span id="L607" class="LineNr">607 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">97/a</span>,<span class="Constant"> 0</span>
-<span id="L608" class="LineNr">608 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">98/b</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L609" class="LineNr">609 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">99/c</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L610" class="LineNr">610 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">100/d</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L611" class="LineNr">611 </span>  run [
-<span id="L612" class="LineNr">612 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[]</span>
-<span id="L613" class="LineNr">613 </span>    11:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[d]</span>
-<span id="L614" class="LineNr">614 </span>    12:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dc]</span>
-<span id="L615" class="LineNr">615 </span>    13:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dcba]</span>
-<span id="L616" class="LineNr">616 </span>    14:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dd]</span>
-<span id="L617" class="LineNr">617 </span>    15:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L585'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dcbax]</span>
-<span id="L618" class="LineNr">618 </span>  ]
-<span id="L619" class="LineNr">619 </span>  memory-should-contain [
-<span id="L620" class="LineNr">620 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches []</span>
-<span id="L621" class="LineNr">621 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [d]</span>
-<span id="L622" class="LineNr">622 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [dc]</span>
-<span id="L623" class="LineNr">623 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [dcba]</span>
-<span id="L624" class="LineNr">624 </span>   <span class="Constant"> 14</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># does not match [dd]</span>
-<span id="L625" class="LineNr">625 </span>   <span class="Constant"> 15</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># does not match [dcbax]</span>
-<span id="L626" class="LineNr">626 </span>  ]
+<span id="L245" class="LineNr">245 </span>  <span class="Comment"># if prev-node is not null, set its next pointer and return</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Delimiter">{</span>
+<span id="L247" class="LineNr">247 </span>    <span class="muControl">break-unless</span> prev-node
+<span id="L248" class="LineNr">248 </span>    *prev-node <span class="Special">&lt;-</span> put *prev-node, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, next-node
+<span id="L249" class="LineNr">249 </span>   <span class="muControl"> return</span>
+<span id="L250" class="LineNr">250 </span>  <span class="Delimiter">}</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Comment"># if prev-node is null, then we removed the head node at 'in'</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Comment"># return the new head rather than the old 'in'</span>
+<span id="L253" class="LineNr">253 </span> <span class="muControl"> return</span> next-node
+<span id="L254" class="LineNr">254 </span>]
+<span id="L255" class="LineNr">255 </span>
+<span id="L256" class="LineNr">256 </span><span class="muScenario">scenario</span> removing-from-duplex-list [
+<span id="L257" class="LineNr">257 </span>  <span class="Constant">local-scope</span>
+<span id="L258" class="LineNr">258 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L259" class="LineNr">259 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L260" class="LineNr">260 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L261" class="LineNr">261 </span>  run [
+<span id="L262" class="LineNr">262 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># second element</span>
+<span id="L263" class="LineNr">263 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
+<span id="L264" class="LineNr">264 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> null</span>
+<span id="L265" class="LineNr">265 </span>    <span class="Comment"># check structure like before</span>
+<span id="L266" class="LineNr">266 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L267" class="LineNr">267 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L268" class="LineNr">268 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L269" class="LineNr">269 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L270" class="LineNr">270 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L271" class="LineNr">271 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L272" class="LineNr">272 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L273" class="LineNr">273 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L274" class="LineNr">274 </span>  ]
+<span id="L275" class="LineNr">275 </span>  memory-should-contain [
+<span id="L276" class="LineNr">276 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># remove returned non-null</span>
+<span id="L277" class="LineNr">277 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next, skipping deleted element</span>
+<span id="L278" class="LineNr">278 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L279" class="LineNr">279 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
+<span id="L280" class="LineNr">280 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># prev of final element</span>
+<span id="L281" class="LineNr">281 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L282" class="LineNr">282 </span>  ]
+<span id="L283" class="LineNr">283 </span>]
+<span id="L284" class="LineNr">284 </span>
+<span id="L285" class="LineNr">285 </span><span class="muScenario">scenario</span> removing-from-start-of-duplex-list [
+<span id="L286" class="LineNr">286 </span>  <span class="Constant">local-scope</span>
+<span id="L287" class="LineNr">287 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L288" class="LineNr">288 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L289" class="LineNr">289 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L290" class="LineNr">290 </span>  run [
+<span id="L291" class="LineNr">291 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove <a href='064list.mu.html#L6'>list</a>, <a href='064list.mu.html#L6'>list</a>
+<span id="L292" class="LineNr">292 </span>    <span class="Comment"># check structure like before</span>
+<span id="L293" class="LineNr">293 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L294" class="LineNr">294 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L295" class="LineNr">295 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L296" class="LineNr">296 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L297" class="LineNr">297 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L298" class="LineNr">298 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L299" class="LineNr">299 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L300" class="LineNr">300 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L301" class="LineNr">301 </span>  ]
+<span id="L302" class="LineNr">302 </span>  memory-should-contain [
+<span id="L303" class="LineNr">303 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># scanning next, skipping deleted element</span>
+<span id="L304" class="LineNr">304 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L305" class="LineNr">305 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
+<span id="L306" class="LineNr">306 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># prev of final element</span>
+<span id="L307" class="LineNr">307 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L308" class="LineNr">308 </span>  ]
+<span id="L309" class="LineNr">309 </span>]
+<span id="L310" class="LineNr">310 </span>
+<span id="L311" class="LineNr">311 </span><span class="muScenario">scenario</span> removing-from-end-of-duplex-list [
+<span id="L312" class="LineNr">312 </span>  <span class="Constant">local-scope</span>
+<span id="L313" class="LineNr">313 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L314" class="LineNr">314 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L315" class="LineNr">315 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L316" class="LineNr">316 </span>  run [
+<span id="L317" class="LineNr">317 </span>    <span class="Comment"># delete last element</span>
+<span id="L318" class="LineNr">318 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L319" class="LineNr">319 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L320" class="LineNr">320 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2, <a href='064list.mu.html#L6'>list</a>
+<span id="L321" class="LineNr">321 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal list2,<span class="Constant"> null</span>
+<span id="L322" class="LineNr">322 </span>    <span class="Comment"># check structure like before</span>
+<span id="L323" class="LineNr">323 </span>    list2 <span class="Special">&lt;-</span> copy <a href='064list.mu.html#L6'>list</a>
+<span id="L324" class="LineNr">324 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L325" class="LineNr">325 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L326" class="LineNr">326 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L327" class="LineNr">327 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L328" class="LineNr">328 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L38'>prev</a> list2
+<span id="L329" class="LineNr">329 </span>    30:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> first list2
+<span id="L330" class="LineNr">330 </span>    40:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L331" class="LineNr">331 </span>  ]
+<span id="L332" class="LineNr">332 </span>  memory-should-contain [
+<span id="L333" class="LineNr">333 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># remove returned non-null</span>
+<span id="L334" class="LineNr">334 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># scanning next, skipping deleted element</span>
+<span id="L335" class="LineNr">335 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>
+<span id="L336" class="LineNr">336 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
+<span id="L337" class="LineNr">337 </span>   <span class="Constant"> 30</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>  <span class="Comment"># prev of final element</span>
+<span id="L338" class="LineNr">338 </span>   <span class="Constant"> 40</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># list back at start</span>
+<span id="L339" class="LineNr">339 </span>  ]
+<span id="L340" class="LineNr">340 </span>]
+<span id="L341" class="LineNr">341 </span>
+<span id="L342" class="LineNr">342 </span><span class="muScenario">scenario</span> removing-from-singleton-duplex-list [
+<span id="L343" class="LineNr">343 </span>  <span class="Constant">local-scope</span>
+<span id="L344" class="LineNr">344 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L345" class="LineNr">345 </span>  run [
+<span id="L346" class="LineNr">346 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove <a href='064list.mu.html#L6'>list</a>, <a href='064list.mu.html#L6'>list</a>
+<span id="L347" class="LineNr">347 </span>    1:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> deaddress <a href='064list.mu.html#L6'>list</a>
+<span id="L348" class="LineNr">348 </span>  ]
+<span id="L349" class="LineNr">349 </span>  memory-should-contain [
+<span id="L350" class="LineNr">350 </span>   <span class="Constant"> 1</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># back to an empty list</span>
+<span id="L351" class="LineNr">351 </span>  ]
+<span id="L352" class="LineNr">352 </span>]
+<span id="L353" class="LineNr">353 </span>
+<span id="L354" class="LineNr">354 </span><span class="muRecipe">def</span> remove x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in, n:num, in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L355" class="LineNr">355 </span>  <span class="Constant">local-scope</span>
+<span id="L356" class="LineNr">356 </span>  <span class="Constant">load-inputs</span>
+<span id="L357" class="LineNr">357 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L358" class="LineNr">358 </span>  curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy x
+<span id="L359" class="LineNr">359 </span>  <span class="Delimiter">{</span>
+<span id="L360" class="LineNr">360 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal i, n
+<span id="L361" class="LineNr">361 </span>    <span class="muControl">break-if</span> done?
+<span id="L362" class="LineNr">362 </span>    <span class="muControl">break-unless</span> curr
+<span id="L363" class="LineNr">363 </span>    <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> curr
+<span id="L364" class="LineNr">364 </span>    in <span class="Special">&lt;-</span> remove curr, in
+<span id="L365" class="LineNr">365 </span>    curr <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L366" class="LineNr">366 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L367" class="LineNr">367 </span>   <span class="muControl"> loop</span>
+<span id="L368" class="LineNr">368 </span>  <span class="Delimiter">}</span>
+<span id="L369" class="LineNr">369 </span>]
+<span id="L370" class="LineNr">370 </span>
+<span id="L371" class="LineNr">371 </span><span class="muScenario">scenario</span> removing-multiple-from-duplex-list [
+<span id="L372" class="LineNr">372 </span>  <span class="Constant">local-scope</span>
+<span id="L373" class="LineNr">373 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>,<span class="Constant"> null</span>
+<span id="L374" class="LineNr">374 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 4</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L375" class="LineNr">375 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 5</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L376" class="LineNr">376 </span>  run [
+<span id="L377" class="LineNr">377 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>  <span class="Comment"># second element</span>
+<span id="L378" class="LineNr">378 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> remove list2,<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L379" class="LineNr">379 </span>    stash <a href='064list.mu.html#L6'>list</a>
+<span id="L380" class="LineNr">380 </span>  ]
+<span id="L381" class="LineNr">381 </span>  trace-should-contain [
+<span id="L382" class="LineNr">382 </span>    app:<span class="Constant"> 5</span>
+<span id="L383" class="LineNr">383 </span>  ]
+<span id="L384" class="LineNr">384 </span>]
+<span id="L385" class="LineNr">385 </span>
+<span id="L386" class="LineNr">386 </span><span class="Comment"># remove values between 'start' and 'end' (both exclusive).</span>
+<span id="L387" class="LineNr">387 </span><span class="Comment"># also clear pointers back out from start/end for hygiene.</span>
+<span id="L388" class="LineNr">388 </span><span class="Comment"># set end to 0 to delete everything past start.</span>
+<span id="L389" class="LineNr">389 </span><span class="Comment"># can't set start to 0 to delete everything before end, because there's no</span>
+<span id="L390" class="LineNr">390 </span><span class="Comment"># clean way to return the new head pointer.</span>
+<span id="L391" class="LineNr">391 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L391'>remove-between</a> start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:start<span class="muRecipe"> -&gt; </span>start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L392" class="LineNr">392 </span>  <span class="Constant">local-scope</span>
+<span id="L393" class="LineNr">393 </span>  <span class="Constant">load-inputs</span>
+<span id="L394" class="LineNr">394 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *start, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>
+<span id="L395" class="LineNr">395 </span>  nothing-to-delete?:bool <span class="Special">&lt;-</span> equal <a href='065duplex_list.mu.html#L31'>next</a>, end
+<span id="L396" class="LineNr">396 </span>  <span class="muControl">return-if</span> nothing-to-delete?
+<span id="L397" class="LineNr">397 </span>  assert <a href='065duplex_list.mu.html#L31'>next</a>, <span class="Constant">[malformed duplex list]</span>
+<span id="L398" class="LineNr">398 </span>  <span class="Comment"># start-&gt;next-&gt;prev = 0</span>
+<span id="L399" class="LineNr">399 </span>  <span class="Comment"># start-&gt;next = end</span>
+<span id="L400" class="LineNr">400 </span>  *next <span class="Special">&lt;-</span> put *next, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>,<span class="Constant"> null</span>
+<span id="L401" class="LineNr">401 </span>  *start <span class="Special">&lt;-</span> put *start, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, end
+<span id="L402" class="LineNr">402 </span>  <span class="Delimiter">{</span>
+<span id="L403" class="LineNr">403 </span>    <span class="muControl">break-if</span> end
+<span id="L404" class="LineNr">404 </span>    stash <span class="Constant">[spliced:]</span> <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L405" class="LineNr">405 </span>   <span class="muControl"> return</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Delimiter">}</span>
+<span id="L407" class="LineNr">407 </span>  <span class="Comment"># end-&gt;prev-&gt;next = 0</span>
+<span id="L408" class="LineNr">408 </span>  <span class="Comment"># end-&gt;prev = start</span>
+<span id="L409" class="LineNr">409 </span>  <a href='065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> get *end, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>
+<span id="L410" class="LineNr">410 </span>  assert <a href='065duplex_list.mu.html#L38'>prev</a>, <span class="Constant">[malformed duplex <a href='064list.mu.html#L6'>list</a> - 2]</span>
+<span id="L411" class="LineNr">411 </span>  *prev <span class="Special">&lt;-</span> put *prev, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>,<span class="Constant"> null</span>
+<span id="L412" class="LineNr">412 </span>  stash <span class="Constant">[spliced:]</span> <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L413" class="LineNr">413 </span>  *end <span class="Special">&lt;-</span> put *end, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, start
+<span id="L414" class="LineNr">414 </span>]
+<span id="L415" class="LineNr">415 </span>
+<span id="L416" class="LineNr">416 </span><span class="muScenario">scenario</span> remove-range [
+<span id="L417" class="LineNr">417 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
+<span id="L418" class="LineNr">418 </span>  <span class="Constant">local-scope</span>
+<span id="L419" class="LineNr">419 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> null</span>
+<span id="L420" class="LineNr">420 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L421" class="LineNr">421 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L422" class="LineNr">422 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L423" class="LineNr">423 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L424" class="LineNr">424 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L425" class="LineNr">425 </span>  run [
+<span id="L426" class="LineNr">426 </span>    <span class="Comment"># delete 16 onwards</span>
+<span id="L427" class="LineNr">427 </span>    <span class="Comment"># first pointer: to the third element</span>
+<span id="L428" class="LineNr">428 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L429" class="LineNr">429 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L430" class="LineNr">430 </span>    list2 <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L391'>remove-between</a> list2,<span class="Constant"> null</span>
+<span id="L431" class="LineNr">431 </span>    <span class="Comment"># now check the list</span>
+<span id="L432" class="LineNr">432 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L433" class="LineNr">433 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L434" class="LineNr">434 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L435" class="LineNr">435 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L436" class="LineNr">436 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L437" class="LineNr">437 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L438" class="LineNr">438 </span>  ]
+<span id="L439" class="LineNr">439 </span>  memory-should-contain [
+<span id="L440" class="LineNr">440 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
+<span id="L441" class="LineNr">441 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
+<span id="L442" class="LineNr">442 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 15</span>
+<span id="L443" class="LineNr">443 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L444" class="LineNr">444 </span>  ]
+<span id="L445" class="LineNr">445 </span>  trace-should-contain [
+<span id="L446" class="LineNr">446 </span>    app: spliced:<span class="Constant"> 16</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 17</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 18</span>
+<span id="L447" class="LineNr">447 </span>  ]
+<span id="L448" class="LineNr">448 </span>]
+<span id="L449" class="LineNr">449 </span>
+<span id="L450" class="LineNr">450 </span><span class="muScenario">scenario</span> remove-range-to-final [
+<span id="L451" class="LineNr">451 </span>  <span class="Constant">local-scope</span>
+<span id="L452" class="LineNr">452 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
+<span id="L453" class="LineNr">453 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> null</span>
+<span id="L454" class="LineNr">454 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L455" class="LineNr">455 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L456" class="LineNr">456 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L457" class="LineNr">457 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L458" class="LineNr">458 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L459" class="LineNr">459 </span>  run [
+<span id="L460" class="LineNr">460 </span>    <span class="Comment"># delete 15, 16 and 17</span>
+<span id="L461" class="LineNr">461 </span>    <span class="Comment"># start pointer: to the second element</span>
+<span id="L462" class="LineNr">462 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L463" class="LineNr">463 </span>    <span class="Comment"># end pointer: to the last (sixth) element</span>
+<span id="L464" class="LineNr">464 </span>    end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L465" class="LineNr">465 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> end
+<span id="L466" class="LineNr">466 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> end
+<span id="L467" class="LineNr">467 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> end
+<span id="L468" class="LineNr">468 </span>    <a href='065duplex_list.mu.html#L391'>remove-between</a> list2, end
+<span id="L469" class="LineNr">469 </span>    <span class="Comment"># now check the list</span>
+<span id="L470" class="LineNr">470 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L471" class="LineNr">471 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L472" class="LineNr">472 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L473" class="LineNr">473 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L474" class="LineNr">474 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L475" class="LineNr">475 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L476" class="LineNr">476 </span>  ]
+<span id="L477" class="LineNr">477 </span>  memory-should-contain [
+<span id="L478" class="LineNr">478 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
+<span id="L479" class="LineNr">479 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
+<span id="L480" class="LineNr">480 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 18</span>
+<span id="L481" class="LineNr">481 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
+<span id="L482" class="LineNr">482 </span>  ]
+<span id="L483" class="LineNr">483 </span>  trace-should-contain [
+<span id="L484" class="LineNr">484 </span>    app: spliced:<span class="Constant"> 15</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 16</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 17</span>
+<span id="L485" class="LineNr">485 </span>  ]
+<span id="L486" class="LineNr">486 </span>]
+<span id="L487" class="LineNr">487 </span>
+<span id="L488" class="LineNr">488 </span><span class="muScenario">scenario</span> remove-range-to-penultimate [
+<span id="L489" class="LineNr">489 </span>  <span class="Constant">local-scope</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
+<span id="L491" class="LineNr">491 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> null</span>
+<span id="L492" class="LineNr">492 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L493" class="LineNr">493 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L494" class="LineNr">494 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L495" class="LineNr">495 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L496" class="LineNr">496 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L497" class="LineNr">497 </span>  run [
+<span id="L498" class="LineNr">498 </span>    <span class="Comment"># delete 15 and 16</span>
+<span id="L499" class="LineNr">499 </span>    <span class="Comment"># start pointer: to the second element</span>
+<span id="L500" class="LineNr">500 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L501" class="LineNr">501 </span>    <span class="Comment"># end pointer: to the last (sixth) element</span>
+<span id="L502" class="LineNr">502 </span>    end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> list2
+<span id="L503" class="LineNr">503 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> end
+<span id="L504" class="LineNr">504 </span>    end <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> end
+<span id="L505" class="LineNr">505 </span>    <a href='065duplex_list.mu.html#L391'>remove-between</a> list2, end
+<span id="L506" class="LineNr">506 </span>    <span class="Comment"># now check the list</span>
+<span id="L507" class="LineNr">507 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L508" class="LineNr">508 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L509" class="LineNr">509 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L510" class="LineNr">510 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L511" class="LineNr">511 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L512" class="LineNr">512 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L513" class="LineNr">513 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L514" class="LineNr">514 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L515" class="LineNr">515 </span>  ]
+<span id="L516" class="LineNr">516 </span>  memory-should-contain [
+<span id="L517" class="LineNr">517 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
+<span id="L518" class="LineNr">518 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
+<span id="L519" class="LineNr">519 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 17</span>
+<span id="L520" class="LineNr">520 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 18</span>
+<span id="L521" class="LineNr">521 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># no more elements</span>
+<span id="L522" class="LineNr">522 </span>  ]
+<span id="L523" class="LineNr">523 </span>  trace-should-contain [
+<span id="L524" class="LineNr">524 </span>    app: spliced:<span class="Constant"> 15</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 16</span>
+<span id="L525" class="LineNr">525 </span>  ]
+<span id="L526" class="LineNr">526 </span>]
+<span id="L527" class="LineNr">527 </span>
+<span id="L528" class="LineNr">528 </span><span class="muScenario">scenario</span> remove-range-empty [
+<span id="L529" class="LineNr">529 </span>  <span class="Constant">local-scope</span>
+<span id="L530" class="LineNr">530 </span>  <span class="Comment"># construct a duplex list with three elements [13, 14, 15]</span>
+<span id="L531" class="LineNr">531 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>,<span class="Constant"> null</span>
+<span id="L532" class="LineNr">532 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L533" class="LineNr">533 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L534" class="LineNr">534 </span>  run [
+<span id="L535" class="LineNr">535 </span>    <span class="Comment"># delete between first and second element (i.e. nothing)</span>
+<span id="L536" class="LineNr">536 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L537" class="LineNr">537 </span>    <a href='065duplex_list.mu.html#L391'>remove-between</a> <a href='064list.mu.html#L6'>list</a>, list2
+<span id="L538" class="LineNr">538 </span>    <span class="Comment"># now check the list</span>
+<span id="L539" class="LineNr">539 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L540" class="LineNr">540 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L541" class="LineNr">541 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L542" class="LineNr">542 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L543" class="LineNr">543 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L544" class="LineNr">544 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L545" class="LineNr">545 </span>  ]
+<span id="L546" class="LineNr">546 </span>  <span class="Comment"># no change</span>
+<span id="L547" class="LineNr">547 </span>  memory-should-contain [
+<span id="L548" class="LineNr">548 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
+<span id="L549" class="LineNr">549 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
+<span id="L550" class="LineNr">550 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 15</span>
+<span id="L551" class="LineNr">551 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L552" class="LineNr">552 </span>  ]
+<span id="L553" class="LineNr">553 </span>]
+<span id="L554" class="LineNr">554 </span>
+<span id="L555" class="LineNr">555 </span><span class="muScenario">scenario</span> remove-range-to-end [
+<span id="L556" class="LineNr">556 </span>  <span class="Constant">local-scope</span>
+<span id="L557" class="LineNr">557 </span>  <span class="Comment"># construct a duplex list with six elements [13, 14, 15, 16, 17, 18]</span>
+<span id="L558" class="LineNr">558 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 18</span>,<span class="Constant"> null</span>
+<span id="L559" class="LineNr">559 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 17</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L560" class="LineNr">560 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 16</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L561" class="LineNr">561 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 15</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L562" class="LineNr">562 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 14</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L563" class="LineNr">563 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 13</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L564" class="LineNr">564 </span>  run [
+<span id="L565" class="LineNr">565 </span>    <span class="Comment"># remove the third element and beyond</span>
+<span id="L566" class="LineNr">566 </span>    list2:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L567" class="LineNr">567 </span>    <a href='065duplex_list.mu.html#L391'>remove-between</a> list2,<span class="Constant"> null</span>
+<span id="L568" class="LineNr">568 </span>    <span class="Comment"># now check the list</span>
+<span id="L569" class="LineNr">569 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L570" class="LineNr">570 </span>    <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L571" class="LineNr">571 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *list, <span class="Constant">value:offset</span>
+<span id="L572" class="LineNr">572 </span>    20:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> <a href='064list.mu.html#L6'>list</a>
+<span id="L573" class="LineNr">573 </span>  ]
+<span id="L574" class="LineNr">574 </span>  memory-should-contain [
+<span id="L575" class="LineNr">575 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 13</span>
+<span id="L576" class="LineNr">576 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 14</span>
+<span id="L577" class="LineNr">577 </span>   <span class="Constant"> 20</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L578" class="LineNr">578 </span>  ]
+<span id="L579" class="LineNr">579 </span>]
+<span id="L580" class="LineNr">580 </span>
+<span id="L581" class="LineNr">581 </span><span class="Comment"># insert list beginning at 'start' after 'in'</span>
+<span id="L582" class="LineNr">582 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L582'>splice</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, start:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L583" class="LineNr">583 </span>  <span class="Constant">local-scope</span>
+<span id="L584" class="LineNr">584 </span>  <span class="Constant">load-inputs</span>
+<span id="L585" class="LineNr">585 </span>  <span class="muControl">return-unless</span> in
+<span id="L586" class="LineNr">586 </span>  <span class="muControl">return-unless</span> start
+<span id="L587" class="LineNr">587 </span>  end:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L629'>last</a> start
+<span id="L588" class="LineNr">588 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> in
+<span id="L589" class="LineNr">589 </span>  <span class="Delimiter">{</span>
+<span id="L590" class="LineNr">590 </span>    <span class="muControl">break-unless</span> <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L591" class="LineNr">591 </span>    *end <span class="Special">&lt;-</span> put *end, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L592" class="LineNr">592 </span>    *next <span class="Special">&lt;-</span> put *next, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, end
+<span id="L593" class="LineNr">593 </span>  <span class="Delimiter">}</span>
+<span id="L594" class="LineNr">594 </span>  *in <span class="Special">&lt;-</span> put *in, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, start
+<span id="L595" class="LineNr">595 </span>  *start <span class="Special">&lt;-</span> put *start, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, in
+<span id="L596" class="LineNr">596 </span>]
+<span id="L597" class="LineNr">597 </span>
+<span id="L598" class="LineNr">598 </span><span class="Comment"># insert contents of 'new' after 'in'</span>
+<span id="L599" class="LineNr">599 </span><span class="muRecipe">def</span> insert in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L600" class="LineNr">600 </span>  <span class="Constant">local-scope</span>
+<span id="L601" class="LineNr">601 </span>  <span class="Constant">load-inputs</span>
+<span id="L602" class="LineNr">602 </span>  <span class="muControl">return-unless</span> in
+<span id="L603" class="LineNr">603 </span>  <span class="muControl">return-unless</span> new
+<span id="L604" class="LineNr">604 </span>  len:num <span class="Special">&lt;-</span> length *new
+<span id="L605" class="LineNr">605 </span>  <span class="muControl">return-unless</span> len
+<span id="L606" class="LineNr">606 </span>  curr:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> copy in
+<span id="L607" class="LineNr">607 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L608" class="LineNr">608 </span>  <span class="Delimiter">{</span>
+<span id="L609" class="LineNr">609 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal idx, len
+<span id="L610" class="LineNr">610 </span>    <span class="muControl">break-if</span> done?
+<span id="L611" class="LineNr">611 </span>    c:_elem <span class="Special">&lt;-</span> index *new, idx
+<span id="L612" class="LineNr">612 </span>    insert c, curr
+<span id="L613" class="LineNr">613 </span>    <span class="Comment"># next iter</span>
+<span id="L614" class="LineNr">614 </span>    curr <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> curr
+<span id="L615" class="LineNr">615 </span>    idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
+<span id="L616" class="LineNr">616 </span>   <span class="muControl"> loop</span>
+<span id="L617" class="LineNr">617 </span>  <span class="Delimiter">}</span>
+<span id="L618" class="LineNr">618 </span>]
+<span id="L619" class="LineNr">619 </span>
+<span id="L620" class="LineNr">620 </span><span class="muRecipe">def</span> append in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, new:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem/contained-in:in<span class="muRecipe"> -&gt; </span>in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L621" class="LineNr">621 </span>  <span class="Constant">local-scope</span>
+<span id="L622" class="LineNr">622 </span>  <span class="Constant">load-inputs</span>
+<span id="L623" class="LineNr">623 </span>  <a href='065duplex_list.mu.html#L629'>last</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L629'>last</a> in
+<span id="L624" class="LineNr">624 </span>  *last <span class="Special">&lt;-</span> put *last, <span class="Constant"><a href='065duplex_list.mu.html#L31'>next</a>:offset</span>, new
+<span id="L625" class="LineNr">625 </span>  <span class="muControl">return-unless</span> new
+<span id="L626" class="LineNr">626 </span>  *new <span class="Special">&lt;-</span> put *new, <span class="Constant"><a href='065duplex_list.mu.html#L38'>prev</a>:offset</span>, <a href='065duplex_list.mu.html#L629'>last</a>
 <span id="L627" class="LineNr">627 </span>]
 <span id="L628" class="LineNr">628 </span>
-<span id="L629" class="LineNr">629 </span><span class="Comment"># helper for debugging</span>
-<span id="L630" class="LineNr">630 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L630'>dump-from</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
-<span id="L631" class="LineNr">631 </span>  <span class="Constant">local-scope</span>
-<span id="L632" class="LineNr">632 </span>  <span class="Constant">load-inputs</span>
-<span id="L633" class="LineNr">633 </span>  $print x, <span class="Constant">[: ]</span>
-<span id="L634" class="LineNr">634 </span>  <span class="Delimiter">{</span>
-<span id="L635" class="LineNr">635 </span>    <span class="muControl">break-unless</span> x
-<span id="L636" class="LineNr">636 </span>    c:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">value:offset</span>
-<span id="L637" class="LineNr">637 </span>    $print c, <span class="Constant">[ ]</span>
-<span id="L638" class="LineNr">638 </span>    x <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> x
-<span id="L639" class="LineNr">639 </span>    <span class="Delimiter">{</span>
-<span id="L640" class="LineNr">640 </span>      is-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L641" class="LineNr">641 </span>      <span class="muControl">break-unless</span> is-newline?
-<span id="L642" class="LineNr">642 </span>      $print <span class="Constant">10/newline</span>
-<span id="L643" class="LineNr">643 </span>      $print x, <span class="Constant">[: ]</span>
-<span id="L644" class="LineNr">644 </span>    <span class="Delimiter">}</span>
-<span id="L645" class="LineNr">645 </span>   <span class="muControl"> loop</span>
-<span id="L646" class="LineNr">646 </span>  <span class="Delimiter">}</span>
-<span id="L647" class="LineNr">647 </span>  $print <span class="Constant">10/newline</span>, <span class="Constant">[---]</span>, <span class="Constant">10/newline</span>
-<span id="L648" class="LineNr">648 </span>]
-<span id="L649" class="LineNr">649 </span>
-<span id="L650" class="LineNr">650 </span><span class="muScenario">scenario</span> stash-duplex-list [
-<span id="L651" class="LineNr">651 </span>  <span class="Constant">local-scope</span>
-<span id="L652" class="LineNr">652 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> 0</span>
-<span id="L653" class="LineNr">653 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L654" class="LineNr">654 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L655" class="LineNr">655 </span>  run [
-<span id="L656" class="LineNr">656 </span>    stash <span class="Constant">[list:]</span>, <a href='064list.mu.html#L6'>list</a>
-<span id="L657" class="LineNr">657 </span>  ]
-<span id="L658" class="LineNr">658 </span>  trace-should-contain [
-<span id="L659" class="LineNr">659 </span>    app: <a href='064list.mu.html#L6'>list</a>:<span class="Constant"> 3</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 2</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 1</span>
-<span id="L660" class="LineNr">660 </span>  ]
-<span id="L661" class="LineNr">661 </span>]
-<span id="L662" class="LineNr">662 </span>
-<span id="L663" class="LineNr">663 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
-<span id="L664" class="LineNr">664 </span>  <span class="Constant">local-scope</span>
-<span id="L665" class="LineNr">665 </span>  <span class="Constant">load-inputs</span>
-<span id="L666" class="LineNr">666 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
-<span id="L667" class="LineNr">667 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf
-<span id="L668" class="LineNr">668 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
-<span id="L669" class="LineNr">669 </span>]
-<span id="L670" class="LineNr">670 </span>
-<span id="L671" class="LineNr">671 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
-<span id="L672" class="LineNr">672 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
-<span id="L673" class="LineNr">673 </span>  <span class="Constant">local-scope</span>
-<span id="L674" class="LineNr">674 </span>  <span class="Constant">load-inputs</span>
-<span id="L675" class="LineNr">675 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
-<span id="L676" class="LineNr">676 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span>  <span class="Comment"># max elements to display</span>
-<span id="L677" class="LineNr">677 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
-<span id="L678" class="LineNr">678 </span>]
-<span id="L679" class="LineNr">679 </span>
-<span id="L680" class="LineNr">680 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
-<span id="L681" class="LineNr">681 </span>  <span class="Constant">local-scope</span>
-<span id="L682" class="LineNr">682 </span>  <span class="Constant">load-inputs</span>
-<span id="L683" class="LineNr">683 </span>  <span class="Delimiter">{</span>
-<span id="L684" class="LineNr">684 </span>    <span class="muControl">break-if</span> in
-<span id="L685" class="LineNr">685 </span>    buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
-<span id="L686" class="LineNr">686 </span>   <span class="muControl"> return</span>
-<span id="L687" class="LineNr">687 </span>  <span class="Delimiter">}</span>
-<span id="L688" class="LineNr">688 </span>  <span class="Comment"># append in.value to buf</span>
-<span id="L689" class="LineNr">689 </span>  val:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
-<span id="L690" class="LineNr">690 </span>  buf <span class="Special">&lt;-</span> append buf, val
-<span id="L691" class="LineNr">691 </span>  <span class="Comment"># now prepare next</span>
-<span id="L692" class="LineNr">692 </span>  <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L25'>next</a> in
-<span id="L693" class="LineNr">693 </span>  nextn:num <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L694" class="LineNr">694 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L25'>next</a>
-<span id="L695" class="LineNr">695 </span>  buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ &lt;-&gt; ]</span>
-<span id="L696" class="LineNr">696 </span>  <span class="Comment"># and recurse</span>
-<span id="L697" class="LineNr">697 </span>  remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
-<span id="L698" class="LineNr">698 </span>  <span class="Delimiter">{</span>
-<span id="L699" class="LineNr">699 </span>    <span class="muControl">break-if</span> optional-input-found?
-<span id="L700" class="LineNr">700 </span>    <span class="Comment"># unlimited recursion</span>
-<span id="L701" class="LineNr">701 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf
-<span id="L702" class="LineNr">702 </span>   <span class="muControl"> return</span>
+<span id="L629" class="LineNr">629 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L629'>last</a> in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L630" class="LineNr">630 </span>  <span class="Constant">local-scope</span>
+<span id="L631" class="LineNr">631 </span>  <span class="Constant">load-inputs</span>
+<span id="L632" class="LineNr">632 </span>  result <span class="Special">&lt;-</span> copy in
+<span id="L633" class="LineNr">633 </span>  <span class="Delimiter">{</span>
+<span id="L634" class="LineNr">634 </span>    <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> result
+<span id="L635" class="LineNr">635 </span>    <span class="muControl">break-unless</span> <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L636" class="LineNr">636 </span>    result <span class="Special">&lt;-</span> copy <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L637" class="LineNr">637 </span>   <span class="muControl"> loop</span>
+<span id="L638" class="LineNr">638 </span>  <span class="Delimiter">}</span>
+<span id="L639" class="LineNr">639 </span>]
+<span id="L640" class="LineNr">640 </span>
+<span id="L641" class="LineNr">641 </span><span class="Comment"># does a duplex list start with a certain sequence of elements?</span>
+<span id="L642" class="LineNr">642 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L642'>match</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, y:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:bool [
+<span id="L643" class="LineNr">643 </span>  <span class="Constant">local-scope</span>
+<span id="L644" class="LineNr">644 </span>  <span class="Constant">load-inputs</span>
+<span id="L645" class="LineNr">645 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L646" class="LineNr">646 </span>  max:num <span class="Special">&lt;-</span> length *y
+<span id="L647" class="LineNr">647 </span>  <span class="Delimiter">{</span>
+<span id="L648" class="LineNr">648 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal i, max
+<span id="L649" class="LineNr">649 </span>    <span class="muControl">break-if</span> done?
+<span id="L650" class="LineNr">650 </span>    expected:_elem <span class="Special">&lt;-</span> index *y, i
+<span id="L651" class="LineNr">651 </span>    <span class="muControl">return-unless</span> x,<span class="Constant"> false/no-match</span>
+<span id="L652" class="LineNr">652 </span>    curr:_elem <span class="Special">&lt;-</span> first x
+<span id="L653" class="LineNr">653 </span>    curr-matches?:bool <span class="Special">&lt;-</span> equal curr, expected
+<span id="L654" class="LineNr">654 </span>    <span class="muControl">return-unless</span> curr-matches?,<span class="Constant"> false/no-match</span>
+<span id="L655" class="LineNr">655 </span>    x <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> x
+<span id="L656" class="LineNr">656 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L657" class="LineNr">657 </span>   <span class="muControl"> loop</span>
+<span id="L658" class="LineNr">658 </span>  <span class="Delimiter">}</span>
+<span id="L659" class="LineNr">659 </span> <span class="muControl"> return</span><span class="Constant"> true/successful-match</span>
+<span id="L660" class="LineNr">660 </span>]
+<span id="L661" class="LineNr">661 </span>
+<span id="L662" class="LineNr">662 </span><span class="muScenario">scenario</span> duplex-list-match [
+<span id="L663" class="LineNr">663 </span>  <span class="Constant">local-scope</span>
+<span id="L664" class="LineNr">664 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">97/a</span>,<span class="Constant"> null</span>
+<span id="L665" class="LineNr">665 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">98/b</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L666" class="LineNr">666 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">99/c</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L667" class="LineNr">667 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push <span class="Constant">100/d</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L668" class="LineNr">668 </span>  run [
+<span id="L669" class="LineNr">669 </span>    10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[]</span>
+<span id="L670" class="LineNr">670 </span>    11:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[d]</span>
+<span id="L671" class="LineNr">671 </span>    12:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dc]</span>
+<span id="L672" class="LineNr">672 </span>    13:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dcba]</span>
+<span id="L673" class="LineNr">673 </span>    14:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dd]</span>
+<span id="L674" class="LineNr">674 </span>    15:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L642'>match</a> <a href='064list.mu.html#L6'>list</a>, <span class="Constant">[dcbax]</span>
+<span id="L675" class="LineNr">675 </span>  ]
+<span id="L676" class="LineNr">676 </span>  memory-should-contain [
+<span id="L677" class="LineNr">677 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches []</span>
+<span id="L678" class="LineNr">678 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [d]</span>
+<span id="L679" class="LineNr">679 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [dc]</span>
+<span id="L680" class="LineNr">680 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># matches [dcba]</span>
+<span id="L681" class="LineNr">681 </span>   <span class="Constant"> 14</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># does not match [dd]</span>
+<span id="L682" class="LineNr">682 </span>   <span class="Constant"> 15</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># does not match [dcbax]</span>
+<span id="L683" class="LineNr">683 </span>  ]
+<span id="L684" class="LineNr">684 </span>]
+<span id="L685" class="LineNr">685 </span>
+<span id="L686" class="LineNr">686 </span><span class="Comment"># helper for debugging</span>
+<span id="L687" class="LineNr">687 </span><span class="muRecipe">def</span> <a href='065duplex_list.mu.html#L687'>dump-from</a> x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem [
+<span id="L688" class="LineNr">688 </span>  <span class="Constant">local-scope</span>
+<span id="L689" class="LineNr">689 </span>  <span class="Constant">load-inputs</span>
+<span id="L690" class="LineNr">690 </span>  $print x, <span class="Constant">[: ]</span>
+<span id="L691" class="LineNr">691 </span>  <span class="Delimiter">{</span>
+<span id="L692" class="LineNr">692 </span>    <span class="muControl">break-unless</span> x
+<span id="L693" class="LineNr">693 </span>    c:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">value:offset</span>
+<span id="L694" class="LineNr">694 </span>    $print c, <span class="Constant">[ ]</span>
+<span id="L695" class="LineNr">695 </span>    x <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> x
+<span id="L696" class="LineNr">696 </span>    <span class="Delimiter">{</span>
+<span id="L697" class="LineNr">697 </span>      is-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L698" class="LineNr">698 </span>      <span class="muControl">break-unless</span> is-newline?
+<span id="L699" class="LineNr">699 </span>      $print <span class="Constant">10/newline</span>
+<span id="L700" class="LineNr">700 </span>      $print x, <span class="Constant">[: ]</span>
+<span id="L701" class="LineNr">701 </span>    <span class="Delimiter">}</span>
+<span id="L702" class="LineNr">702 </span>   <span class="muControl"> loop</span>
 <span id="L703" class="LineNr">703 </span>  <span class="Delimiter">}</span>
-<span id="L704" class="LineNr">704 </span>  <span class="Delimiter">{</span>
-<span id="L705" class="LineNr">705 </span>    <span class="muControl">break-unless</span> remaining
-<span id="L706" class="LineNr">706 </span>    <span class="Comment"># limited recursion</span>
-<span id="L707" class="LineNr">707 </span>    remaining <span class="Special">&lt;-</span> subtract remaining,<span class="Constant"> 1</span>
-<span id="L708" class="LineNr">708 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L25'>next</a>, buf, remaining
-<span id="L709" class="LineNr">709 </span>   <span class="muControl"> return</span>
-<span id="L710" class="LineNr">710 </span>  <span class="Delimiter">}</span>
-<span id="L711" class="LineNr">711 </span>  <span class="Comment"># past recursion depth; insert ellipses and stop</span>
-<span id="L712" class="LineNr">712 </span>  append buf, <span class="Constant">[...]</span>
-<span id="L713" class="LineNr">713 </span>]
-<span id="L714" class="LineNr">714 </span>
-<span id="L715" class="LineNr">715 </span><span class="muScenario">scenario</span> stash-empty-duplex-list [
-<span id="L716" class="LineNr">716 </span>  <span class="Constant">local-scope</span>
-<span id="L717" class="LineNr">717 </span>  x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L718" class="LineNr">718 </span>  run [
-<span id="L719" class="LineNr">719 </span>    stash x
-<span id="L720" class="LineNr">720 </span>  ]
-<span id="L721" class="LineNr">721 </span>  trace-should-contain [
-<span id="L722" class="LineNr">722 </span>    app: <span class="Constant">[]</span>
-<span id="L723" class="LineNr">723 </span>  ]
-<span id="L724" class="LineNr">724 </span>]
+<span id="L704" class="LineNr">704 </span>  $print <span class="Constant">10/newline</span>, <span class="Constant">[---]</span>, <span class="Constant">10/newline</span>
+<span id="L705" class="LineNr">705 </span>]
+<span id="L706" class="LineNr">706 </span>
+<span id="L707" class="LineNr">707 </span><span class="muScenario">scenario</span> stash-duplex-list [
+<span id="L708" class="LineNr">708 </span>  <span class="Constant">local-scope</span>
+<span id="L709" class="LineNr">709 </span>  <a href='064list.mu.html#L6'>list</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>,<span class="Constant"> null</span>
+<span id="L710" class="LineNr">710 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L711" class="LineNr">711 </span>  <a href='064list.mu.html#L6'>list</a> <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L712" class="LineNr">712 </span>  run [
+<span id="L713" class="LineNr">713 </span>    stash <span class="Constant">[list:]</span>, <a href='064list.mu.html#L6'>list</a>
+<span id="L714" class="LineNr">714 </span>  ]
+<span id="L715" class="LineNr">715 </span>  trace-should-contain [
+<span id="L716" class="LineNr">716 </span>    app: <a href='064list.mu.html#L6'>list</a>:<span class="Constant"> 3</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 2</span> <span class="Special">&lt;-</span>&gt;<span class="Constant"> 1</span>
+<span id="L717" class="LineNr">717 </span>  ]
+<span id="L718" class="LineNr">718 </span>]
+<span id="L719" class="LineNr">719 </span>
+<span id="L720" class="LineNr">720 </span><span class="muRecipe">def</span> to-text in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
+<span id="L721" class="LineNr">721 </span>  <span class="Constant">local-scope</span>
+<span id="L722" class="LineNr">722 </span>  <span class="Constant">load-inputs</span>
+<span id="L723" class="LineNr">723 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
+<span id="L724" class="LineNr">724 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf
+<span id="L725" class="LineNr">725 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
+<span id="L726" class="LineNr">726 </span>]
+<span id="L727" class="LineNr">727 </span>
+<span id="L728" class="LineNr">728 </span><span class="Comment"># variant of 'to-text' which stops printing after a few elements (and so is robust to cycles)</span>
+<span id="L729" class="LineNr">729 </span><span class="muRecipe">def</span> to-text-line in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem<span class="muRecipe"> -&gt; </span>result:text [
+<span id="L730" class="LineNr">730 </span>  <span class="Constant">local-scope</span>
+<span id="L731" class="LineNr">731 </span>  <span class="Constant">load-inputs</span>
+<span id="L732" class="LineNr">732 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 80</span>
+<span id="L733" class="LineNr">733 </span>  buf <span class="Special">&lt;-</span> to-buffer in, buf,<span class="Constant"> 6</span>  <span class="Comment"># max elements to display</span>
+<span id="L734" class="LineNr">734 </span>  result <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
+<span id="L735" class="LineNr">735 </span>]
+<span id="L736" class="LineNr">736 </span>
+<span id="L737" class="LineNr">737 </span><span class="muRecipe">def</span> to-buffer in:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem, buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char<span class="muRecipe"> -&gt; </span>buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char [
+<span id="L738" class="LineNr">738 </span>  <span class="Constant">local-scope</span>
+<span id="L739" class="LineNr">739 </span>  <span class="Constant">load-inputs</span>
+<span id="L740" class="LineNr">740 </span>  <span class="Delimiter">{</span>
+<span id="L741" class="LineNr">741 </span>    <span class="muControl">break-if</span> in
+<span id="L742" class="LineNr">742 </span>    buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[[]</span>]
+<span id="L743" class="LineNr">743 </span>   <span class="muControl"> return</span>
+<span id="L744" class="LineNr">744 </span>  <span class="Delimiter">}</span>
+<span id="L745" class="LineNr">745 </span>  <span class="Comment"># append in.value to buf</span>
+<span id="L746" class="LineNr">746 </span>  val:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">value:offset</span>
+<span id="L747" class="LineNr">747 </span>  buf <span class="Special">&lt;-</span> append buf, val
+<span id="L748" class="LineNr">748 </span>  <span class="Comment"># now prepare next</span>
+<span id="L749" class="LineNr">749 </span>  <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:_elem <span class="Special">&lt;-</span> <a href='065duplex_list.mu.html#L31'>next</a> in
+<span id="L750" class="LineNr">750 </span>  nextn:num <span class="Special">&lt;-</span> deaddress <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L751" class="LineNr">751 </span>  <span class="muControl">return-unless</span> <a href='065duplex_list.mu.html#L31'>next</a>
+<span id="L752" class="LineNr">752 </span>  buf <span class="Special">&lt;-</span> append buf, <span class="Constant">[ &lt;-&gt; ]</span>
+<span id="L753" class="LineNr">753 </span>  <span class="Comment"># and recurse</span>
+<span id="L754" class="LineNr">754 </span>  remaining:num, optional-input-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
+<span id="L755" class="LineNr">755 </span>  <span class="Delimiter">{</span>
+<span id="L756" class="LineNr">756 </span>    <span class="muControl">break-if</span> optional-input-found?
+<span id="L757" class="LineNr">757 </span>    <span class="Comment"># unlimited recursion</span>
+<span id="L758" class="LineNr">758 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L31'>next</a>, buf
+<span id="L759" class="LineNr">759 </span>   <span class="muControl"> return</span>
+<span id="L760" class="LineNr">760 </span>  <span class="Delimiter">}</span>
+<span id="L761" class="LineNr">761 </span>  <span class="Delimiter">{</span>
+<span id="L762" class="LineNr">762 </span>    <span class="muControl">break-unless</span> remaining
+<span id="L763" class="LineNr">763 </span>    <span class="Comment"># limited recursion</span>
+<span id="L764" class="LineNr">764 </span>    remaining <span class="Special">&lt;-</span> subtract remaining,<span class="Constant"> 1</span>
+<span id="L765" class="LineNr">765 </span>    buf <span class="Special">&lt;-</span> to-buffer <a href='065duplex_list.mu.html#L31'>next</a>, buf, remaining
+<span id="L766" class="LineNr">766 </span>   <span class="muControl"> return</span>
+<span id="L767" class="LineNr">767 </span>  <span class="Delimiter">}</span>
+<span id="L768" class="LineNr">768 </span>  <span class="Comment"># past recursion depth; insert ellipses and stop</span>
+<span id="L769" class="LineNr">769 </span>  append buf, <span class="Constant">[...]</span>
+<span id="L770" class="LineNr">770 </span>]
+<span id="L771" class="LineNr">771 </span>
+<span id="L772" class="LineNr">772 </span><span class="muScenario">scenario</span> stash-empty-duplex-list [
+<span id="L773" class="LineNr">773 </span>  <span class="Constant">local-scope</span>
+<span id="L774" class="LineNr">774 </span>  x:&amp;:<a href='065duplex_list.mu.html#L3'>duplex-list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
+<span id="L775" class="LineNr">775 </span>  run [
+<span id="L776" class="LineNr">776 </span>    stash x
+<span id="L777" class="LineNr">777 </span>  ]
+<span id="L778" class="LineNr">778 </span>  trace-should-contain [
+<span id="L779" class="LineNr">779 </span>    app: <span class="Constant">[]</span>
+<span id="L780" class="LineNr">780 </span>  ]
+<span id="L781" class="LineNr">781 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/066stream.mu.html b/html/066stream.mu.html
index 08c4c0fe..eb35065b 100644
--- a/html/066stream.mu.html
+++ b/html/066stream.mu.html
@@ -15,15 +15,15 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muControl { color: #c0a020; }
-.Delimiter { color: #800080; }
 .Special { color: #c00000; }
+.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muData { color: #ffff00; }
+.muControl { color: #c0a020; }
 -->
 </style>
 
@@ -67,7 +67,7 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr"> 7 </span><span class="muRecipe">def</span> <a href='066stream.mu.html#L7'>new-stream</a> s:&amp;:@:_elem<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='066stream.mu.html#L2'>stream</a>:_elem [
 <span id="L8" class="LineNr"> 8 </span>  <span class="Constant">local-scope</span>
 <span id="L9" class="LineNr"> 9 </span>  <span class="Constant">load-inputs</span>
-<span id="L10" class="LineNr">10 </span>  <span class="muControl">return-unless</span> s, <span class="Constant">0/null</span>
+<span id="L10" class="LineNr">10 </span>  <span class="muControl">return-unless</span> s,<span class="Constant"> null</span>
 <span id="L11" class="LineNr">11 </span>  result <span class="Special">&lt;-</span> new <span class="Delimiter">{</span>(stream _elem): type<span class="Delimiter">}</span>
 <span id="L12" class="LineNr">12 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">index:offset</span>,<span class="Constant"> 0</span>
 <span id="L13" class="LineNr">13 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">data:offset</span>, s
@@ -84,7 +84,7 @@ if ('onhashchange' in window) {
 <span id="L24" class="LineNr">24 </span>  <span class="Constant">local-scope</span>
 <span id="L25" class="LineNr">25 </span>  <span class="Constant">load-inputs</span>
 <span id="L26" class="LineNr">26 </span>  assert in, <span class="Constant">[cannot read; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
-<span id="L27" class="LineNr">27 </span>  empty? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L27" class="LineNr">27 </span>  empty? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L28" class="LineNr">28 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
 <span id="L29" class="LineNr">29 </span>  s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
 <span id="L30" class="LineNr">30 </span>  len:num <span class="Special">&lt;-</span> length *s
@@ -92,7 +92,7 @@ if ('onhashchange' in window) {
 <span id="L32" class="LineNr">32 </span>  <span class="Delimiter">{</span>
 <span id="L33" class="LineNr">33 </span>    <span class="muControl">break-unless</span> at-end?
 <span id="L34" class="LineNr">34 </span>    empty-result:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
-<span id="L35" class="LineNr">35 </span>   <span class="muControl"> return</span> *empty-result, <span class="Constant">1/true</span>
+<span id="L35" class="LineNr">35 </span>   <span class="muControl"> return</span> *empty-result,<span class="Constant"> true</span>
 <span id="L36" class="LineNr">36 </span>  <span class="Delimiter">}</span>
 <span id="L37" class="LineNr">37 </span>  result <span class="Special">&lt;-</span> index *s, idx
 <span id="L38" class="LineNr">38 </span>  idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
@@ -103,7 +103,7 @@ if ('onhashchange' in window) {
 <span id="L43" class="LineNr">43 </span>  <span class="Constant">local-scope</span>
 <span id="L44" class="LineNr">44 </span>  <span class="Constant">load-inputs</span>
 <span id="L45" class="LineNr">45 </span>  assert in, <span class="Constant">[cannot peek; <a href='066stream.mu.html#L2'>stream</a> has no data]</span>
-<span id="L46" class="LineNr">46 </span>  empty?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L46" class="LineNr">46 </span>  empty?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L47" class="LineNr">47 </span>  idx:num <span class="Special">&lt;-</span> get *in, <span class="Constant">index:offset</span>
 <span id="L48" class="LineNr">48 </span>  s:&amp;:@:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">data:offset</span>
 <span id="L49" class="LineNr">49 </span>  len:num <span class="Special">&lt;-</span> length *s
@@ -111,7 +111,7 @@ if ('onhashchange' in window) {
 <span id="L51" class="LineNr">51 </span>  <span class="Delimiter">{</span>
 <span id="L52" class="LineNr">52 </span>    <span class="muControl">break-unless</span> at-end?
 <span id="L53" class="LineNr">53 </span>    empty-result:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
-<span id="L54" class="LineNr">54 </span>   <span class="muControl"> return</span> *empty-result, <span class="Constant">1/true</span>
+<span id="L54" class="LineNr">54 </span>   <span class="muControl"> return</span> *empty-result,<span class="Constant"> true</span>
 <span id="L55" class="LineNr">55 </span>  <span class="Delimiter">}</span>
 <span id="L56" class="LineNr">56 </span>  result <span class="Special">&lt;-</span> index *s, idx
 <span id="L57" class="LineNr">57 </span>]
diff --git a/html/068random.mu.html b/html/068random.mu.html
index accb90a3..5179d9c1 100644
--- a/html/068random.mu.html
+++ b/html/068random.mu.html
@@ -15,15 +15,15 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
-.muControl { color: #c0a020; }
 .Delimiter { color: #800080; }
+.muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
-.Comment { color: #9090ff; }
-.Comment a { color:#0000ee; text-decoration:underline; }
+.muControl { color: #c0a020; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -65,7 +65,7 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr"> 5 </span>    <span class="muControl">break-if</span> generator
 <span id="L6" class="LineNr"> 6 </span>    <span class="Comment"># generator is 0? use real random-number generator</span>
 <span id="L7" class="LineNr"> 7 </span>    result <span class="Special">&lt;-</span> real-random
-<span id="L8" class="LineNr"> 8 </span>   <span class="muControl"> return</span> result, <span class="Constant">0/false</span>
+<span id="L8" class="LineNr"> 8 </span>   <span class="muControl"> return</span> result,<span class="Constant"> false</span>
 <span id="L9" class="LineNr"> 9 </span>  <span class="Delimiter">}</span>
 <span id="L10" class="LineNr">10 </span>  result, fail?, generator <span class="Special">&lt;-</span> read generator
 <span id="L11" class="LineNr">11 </span>]
diff --git a/html/069hash.cc.html b/html/069hash.cc.html
index f36c1b59..62e9f45b 100644
--- a/html/069hash.cc.html
+++ b/html/069hash.cc.html
@@ -79,7 +79,7 @@ if ('onhashchange' in window) {
 <span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L16" class="LineNr"> 16 </span><span class="Normal">case</span> HASH: <span class="Delimiter">{</span>
 <span id="L17" class="LineNr"> 17 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L18" class="LineNr"> 18 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash' takes exactly one ingredient rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L18" class="LineNr"> 18 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash' takes exactly one ingredient rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L19" class="LineNr"> 19 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L20" class="LineNr"> 20 </span>  <span class="Delimiter">}</span>
 <span id="L21" class="LineNr"> 21 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -96,8 +96,8 @@ if ('onhashchange' in window) {
 <span id="L32" class="LineNr"> 32 </span>
 <span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(code)</span>
 <span id="L34" class="LineNr"> 34 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L35" class="LineNr"> 35 </span>  canonize<span class="Delimiter">(</span>r<span class="Delimiter">);</span>
-<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span>  <span class="Comment">// optimization</span>
+<span id="L35" class="LineNr"> 35 </span>  <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span>r<span class="Delimiter">))</span>  <span class="Comment">// optimization</span>
 <span id="L37" class="LineNr"> 37 </span>    <span class="Identifier">return</span> <a href='069hash.cc.html#L64'>hash_mu_text</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_address<span class="Delimiter">(</span>r<span class="Delimiter">))</span>
 <span id="L39" class="LineNr"> 39 </span>    <span class="Identifier">return</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
@@ -119,14 +119,14 @@ if ('onhashchange' in window) {
 <span id="L55" class="LineNr"> 55 </span>
 <span id="L56" class="LineNr"> 56 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L56'>hash_mu_address</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L57" class="LineNr"> 57 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>value == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <a href='003trace.cc.html#L167'>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; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L59" class="LineNr"> 59 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L58" class="LineNr"> 58 </span>  <a href='003trace.cc.html#L190'>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; r<span class="Delimiter">.</span>value &lt;&lt; <span class="Constant">&quot; is &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span>  r<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
 <span id="L60" class="LineNr"> 60 </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="L61" class="LineNr"> 61 </span>  <span class="Identifier">return</span> <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L62" class="LineNr"> 62 </span><span class="Delimiter">}</span>
 <span id="L63" class="LineNr"> 63 </span>
 <span id="L64" class="LineNr"> 64 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L64'>hash_mu_text</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr"> 65 </span>  string input = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">));</span>
+<span id="L65" class="LineNr"> 65 </span>  string input = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L66" class="LineNr"> 66 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>input<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L67" class="LineNr"> 67 </span>    h = <a href='069hash.cc.html#L115'>hash_iter</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">size_t</span>&gt;<span class="Delimiter">(</span>input<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)));</span>
 <span id="L68" class="LineNr"> 68 </span><span class="CommentedCode">//?     cerr &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; h &lt;&lt; '\n';</span>
@@ -138,10 +138,10 @@ if ('onhashchange' in window) {
 <span id="L74" class="LineNr"> 74 </span>  <span class="Normal">int</span> size = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> r<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L75" class="LineNr"> 75 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> elem = r<span class="Delimiter">;</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Normal">delete</span> elem<span class="Delimiter">.</span>type<span class="Delimiter">;</span>
-<span id="L77" class="LineNr"> 77 </span>  elem<span class="Delimiter">.</span>type = <a href='032array.cc.html#L375'>copy_array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a> = r<span class="Delimiter">.</span>value+<span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; size<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a> += size_of<span class="Delimiter">(</span>elem<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L77" class="LineNr"> 77 </span>  elem<span class="Delimiter">.</span>type = <a href='032array.cc.html#L299'>copy_array_element</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a> = r<span class="Delimiter">.</span>value+<span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; size<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a> += size_of<span class="Delimiter">(</span>elem<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L79" class="LineNr"> 79 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> tmp = elem<span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span>    tmp<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a><span class="Delimiter">);</span>
+<span id="L80" class="LineNr"> 80 </span>    tmp<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a><span class="Delimiter">);</span>
 <span id="L81" class="LineNr"> 81 </span>    h = <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> tmp<span class="Delimiter">);</span>
 <span id="L82" class="LineNr"> 82 </span><span class="CommentedCode">//?     cerr &lt;&lt; i &lt;&lt; &quot; (&quot; &lt;&lt; address &lt;&lt; &quot;): &quot; &lt;&lt; h &lt;&lt; '\n';</span>
 <span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">}</span>
@@ -150,12 +150,12 @@ if ('onhashchange' in window) {
 <span id="L86" class="LineNr"> 86 </span>
 <span id="L87" class="LineNr"> 87 </span><span class="Normal">size_t</span> <a href='069hash.cc.html#L87'>hash_mu_container</a><span class="Delimiter">(</span><span class="Normal">size_t</span> h<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L88" class="LineNr"> 88 </span>  type_info&amp; info = get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> get_base_type<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">)-&gt;</span>value<span class="Delimiter">);</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a> = r<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a> = r<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Normal">int</span> offset = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L92" class="LineNr"> 92 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>    reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> element = <a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">);</span>
 <span id="L93" class="LineNr"> 93 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>element<span class="Delimiter">,</span> <span class="Constant">&quot;ignore-for-hash&quot;</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L94" class="LineNr"> 94 </span>    element<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>address+offset<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>    element<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>address+offset<span class="Delimiter">);</span>
 <span id="L95" class="LineNr"> 95 </span>    h = <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> element<span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span><span class="CommentedCode">//?     cerr &lt;&lt; i &lt;&lt; &quot;: &quot; &lt;&lt; h &lt;&lt; '\n';</span>
 <span id="L97" class="LineNr"> 97 </span>    offset += size_of<span class="Delimiter">(</span>info<span class="Delimiter">.</span>elements<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>type<span class="Delimiter">);</span>
@@ -170,8 +170,8 @@ if ('onhashchange' in window) {
 <span id="L106" class="LineNr">106 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> variant = variant_type<span class="Delimiter">(</span>r<span class="Delimiter">,</span> tag<span class="Delimiter">);</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Comment">// todo: move this error to container definition time</span>
 <span id="L108" class="LineNr">108 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_property<span class="Delimiter">(</span>variant<span class="Delimiter">,</span> <span class="Constant">&quot;ignore-for-hash&quot;</span><span class="Delimiter">))</span>
-<span id="L109" class="LineNr">109 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;: /ignore-for-hash won't work in exclusive containers</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L110" class="LineNr">110 </span>  variant<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>value + <span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;: /ignore-for-hash won't work in exclusive containers</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L110" class="LineNr">110 </span>  variant<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>value + <span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L111" class="LineNr">111 </span>  h = <a href='069hash.cc.html#L34'>hash</a><span class="Delimiter">(</span>h<span class="Delimiter">,</span> variant<span class="Delimiter">);</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Identifier">return</span> h<span class="Delimiter">;</span>
 <span id="L113" class="LineNr">113 </span><span class="Delimiter">}</span>
@@ -247,7 +247,7 @@ if ('onhashchange' in window) {
 <span id="L183" class="LineNr">183 </span>
 <span id="L184" class="LineNr">184 </span><span class="Delimiter">:(scenario hash_of_zero_address)</span>
 <span id="L185" class="LineNr">185 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L186" class="LineNr">186 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L186" class="LineNr">186 </span>  <span class="Constant">1</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
 <span id="L187" class="LineNr">187 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span><a href='069hash.cc.html#L34'>hash</a> <span class="Constant">1</span>:&amp;:num
 <span id="L188" class="LineNr">188 </span>]
 <span id="L189" class="LineNr">189 </span><span class="traceContains">+mem: storing 0 in location 2</span>
@@ -383,11 +383,11 @@ if ('onhashchange' in window) {
 <span id="L319" class="LineNr">319 </span><span class="Delimiter">:(scenario hash_matches_old_version)</span>
 <span id="L320" class="LineNr">320 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L321" class="LineNr">321 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [abc]
-<span id="L322" class="LineNr">322 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span><a href='069hash.cc.html#L34'>hash</a> <span class="Constant">1</span>:text
-<span id="L323" class="LineNr">323 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>hash_old <span class="Constant">1</span>:text
-<span id="L324" class="LineNr">324 </span>  <span class="Constant">4</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">3</span>:num
+<span id="L322" class="LineNr">322 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span><a href='069hash.cc.html#L34'>hash</a> <span class="Constant">1</span>:text
+<span id="L323" class="LineNr">323 </span>  <span class="Constant">4</span>:num<span class="Special"> &lt;- </span>hash_old <span class="Constant">1</span>:text
+<span id="L324" class="LineNr">324 </span>  <span class="Constant">5</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>equal <span class="Constant">3</span>:num<span class="Delimiter">,</span> <span class="Constant">4</span>:num
 <span id="L325" class="LineNr">325 </span>]
-<span id="L326" class="LineNr">326 </span><span class="traceContains">+mem: storing 1 in location 4</span>
+<span id="L326" class="LineNr">326 </span><span class="traceContains">+mem: storing 1 in location 5</span>
 <span id="L327" class="LineNr">327 </span>
 <span id="L328" class="LineNr">328 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L329" class="LineNr">329 </span>HASH_OLD<span class="Delimiter">,</span>
@@ -396,18 +396,18 @@ if ('onhashchange' in window) {
 <span id="L332" class="LineNr">332 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L333" class="LineNr">333 </span><span class="Normal">case</span> HASH_OLD: <span class="Delimiter">{</span>
 <span id="L334" class="LineNr">334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L335" class="LineNr">335 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash_old' takes exactly one ingredient rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L335" class="LineNr">335 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash_old' takes exactly one ingredient rather than '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L336" class="LineNr">336 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L337" class="LineNr">337 </span>  <span class="Delimiter">}</span>
 <span id="L338" class="LineNr">338 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L339" class="LineNr">339 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash_old' currently only supports texts (address array character), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L339" class="LineNr">339 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'hash_old' currently only supports texts (address array character), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L340" class="LineNr">340 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L341" class="LineNr">341 </span>  <span class="Delimiter">}</span>
 <span id="L342" class="LineNr">342 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
 <span id="L344" class="LineNr">344 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L345" class="LineNr">345 </span><span class="Normal">case</span> HASH_OLD: <span class="Delimiter">{</span>
-<span id="L346" class="LineNr">346 </span>  string input = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L346" class="LineNr">346 </span>  string input = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L347" class="LineNr">347 </span>  <span class="Normal">size_t</span> h = <span class="Constant">0</span> <span class="Delimiter">;</span>
 <span id="L348" class="LineNr">348 </span>
 <span id="L349" class="LineNr">349 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>input<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
diff --git a/html/070table.mu.html b/html/070table.mu.html
index f8e12f73..faaf6d78 100644
--- a/html/070table.mu.html
+++ b/html/070table.mu.html
@@ -15,8 +15,8 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
@@ -24,7 +24,7 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -137,7 +137,7 @@ if ('onhashchange' in window) {
 <span id="L76" class="LineNr"> 76 </span>  occupied?:bool <span class="Special">&lt;-</span> get x, <span class="Constant">occupied?:offset</span>
 <span id="L77" class="LineNr"> 77 </span>  not-occupied?:bool <span class="Special">&lt;-</span> not occupied?:bool
 <span id="L78" class="LineNr"> 78 </span>  assert not-occupied?, <span class="Constant">[can't handle collisions yet]</span>
-<span id="L79" class="LineNr"> 79 </span>  new-row:<a href='070table.mu.html#L50'>table-row</a>:_key:_value <span class="Special">&lt;-</span> merge <span class="Constant">1/true</span>, key, value
+<span id="L79" class="LineNr"> 79 </span>  new-row:<a href='070table.mu.html#L50'>table-row</a>:_key:_value <span class="Special">&lt;-</span> merge<span class="Constant"> true</span>, key, value
 <span id="L80" class="LineNr"> 80 </span>  *table-data <span class="Special">&lt;-</span> put-index *table-data, hash-key, new-row
 <span id="L81" class="LineNr"> 81 </span>]
 <span id="L82" class="LineNr"> 82 </span>
diff --git a/html/072recipe.cc.html b/html/072recipe.cc.html
index 0aadddd3..2d8b05b2 100644
--- a/html/072recipe.cc.html
+++ b/html/072recipe.cc.html
@@ -79,7 +79,7 @@ if ('onhashchange' in window) {
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
 <span id="L17" class="LineNr"> 17 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L18" class="LineNr"> 18 </span><span class="Comment">// 'recipe' variables can store recipe-literal</span>
-<span id="L19" class="LineNr"> 19 </span><a href='010vm.cc.html#L124'>type_ordinal</a> <a href='010vm.cc.html#L19'>recipe</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
+<span id="L19" class="LineNr"> 19 </span><a href='010vm.cc.html#L125'>type_ordinal</a> <a href='010vm.cc.html#L19'>recipe</a> = <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">,</span> Next_type_ordinal++<span class="Delimiter">);</span>
 <span id="L20" class="LineNr"> 20 </span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Type<span class="Delimiter">,</span> <a href='010vm.cc.html#L19'>recipe</a><span class="Delimiter">).</span>name = <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">;</span>
 <span id="L21" class="LineNr"> 21 </span>
 <span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(after &quot;Deduce Missing Type(x, caller)&quot;)</span>
@@ -94,21 +94,21 @@ if ('onhashchange' in window) {
 <span id="L31" class="LineNr"> 31 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L32" class="LineNr"> 32 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L36'>contains_reagent_with_non_recipe_literal_type</a><span class="Delimiter">(</span>caller<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L33" class="LineNr"> 33 </span>  x<span class="Delimiter">.</span>type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">);</span>
-<span id="L34" class="LineNr"> 34 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L34" class="LineNr"> 34 </span>  x<span class="Delimiter">.</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> x<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">}</span>
 <span id="L36" class="LineNr"> 36 </span><span class="Normal">bool</span> <a href='072recipe.cc.html#L36'>contains_reagent_with_non_recipe_literal_type</a><span class="Delimiter">(</span><span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L37" class="LineNr"> 37 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L38" class="LineNr"> 38 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L39" class="LineNr"> 39 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L40" class="LineNr"> 40 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L46'>is_matching_non_recipe_literal</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L40" class="LineNr"> 40 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L46'>is_matching_non_recipe_literal</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L41" class="LineNr"> 41 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
-<span id="L42" class="LineNr"> 42 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L46'>is_matching_non_recipe_literal</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> name<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L42" class="LineNr"> 42 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L46'>is_matching_non_recipe_literal</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> name<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L43" class="LineNr"> 43 </span>  <span class="Delimiter">}</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L45" class="LineNr"> 45 </span><span class="Delimiter">}</span>
 <span id="L46" class="LineNr"> 46 </span><span class="Normal">bool</span> <a href='072recipe.cc.html#L46'>is_matching_non_recipe_literal</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; x<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L47" class="LineNr"> 47 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name != name<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>x<span class="Delimiter">.</span>name != name<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L49" class="LineNr"> 49 </span>  <span class="Identifier">return</span> !x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom || x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name != <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">;</span>
 <span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span>
 <span id="L51" class="LineNr"> 51 </span>
@@ -130,11 +130,11 @@ if ('onhashchange' in window) {
 <span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L68" class="LineNr"> 68 </span><span class="Normal">case</span> CALL: <span class="Delimiter">{</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L70" class="LineNr"> 70 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'call' requires at least one ingredient (the <a href='010vm.cc.html#L19'>recipe</a> to call)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'call' requires at least one ingredient (the <a href='010vm.cc.html#L19'>recipe</a> to call)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L71" class="LineNr"> 71 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">}</span>
 <span id="L73" class="LineNr"> 73 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_recipe<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L74" class="LineNr"> 74 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'call' should be a <a href='010vm.cc.html#L19'>recipe</a>, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L74" class="LineNr"> 74 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'call' should be a <a href='010vm.cc.html#L19'>recipe</a>, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L75" class="LineNr"> 75 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
 <span id="L77" class="LineNr"> 77 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -144,23 +144,23 @@ if ('onhashchange' in window) {
 <span id="L81" class="LineNr"> 81 </span>  <span class="Comment">// Begin Call</span>
 <span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L83" class="LineNr"> 83 </span>    ++Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;indirect 'call': incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;indirect 'call': incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L85" class="LineNr"> 85 </span>    assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L174'>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 call empty <a href='010vm.cc.html#L19'>recipe</a> in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L197'>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 call empty <a href='010vm.cc.html#L19'>recipe</a> in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">const</span> call&amp; caller_frame = <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">();</span>
-<span id="L92" class="LineNr"> 92 </span>  <a href='010vm.cc.html#L32'>instruction</a><span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> call_instruction = <a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>caller_frame<span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>  <a href='010vm.cc.html#L33'>instruction</a><span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> call_instruction = <a href='026call.cc.html#L88'>to_instruction</a><span class="Delimiter">(</span>caller_frame<span class="Delimiter">);</span>
 <span id="L93" class="LineNr"> 93 </span>  call_instruction<span class="Delimiter">.</span>operation = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L94" class="LineNr"> 94 </span>  call_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>call_instruction<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>
 <span id="L95" class="LineNr"> 95 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
 <span id="L96" class="LineNr"> 96 </span>  ingredients<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">());</span>  <span class="Comment">// drop the callee</span>
 <span id="L97" class="LineNr"> 97 </span>  finish_call_housekeeping<span class="Delimiter">(</span>call_instruction<span class="Delimiter">,</span> ingredients<span class="Delimiter">);</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Comment">// not done with caller</span>
-<span id="L99" class="LineNr"> 99 </span>  write_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L100" class="LineNr">100 </span>  fall_through_to_next_instruction = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span>  write_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span>  fall_through_to_next_instruction =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L102" class="LineNr">102 </span><span class="Delimiter">}</span>
 <span id="L103" class="LineNr">103 </span>
@@ -272,7 +272,7 @@ if ('onhashchange' in window) {
 <span id="L209" class="LineNr">209 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">;</span>
 <span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
 <span id="L211" class="LineNr">211 </span><span class="Normal">void</span> <a href='072recipe.cc.html#L211'>resolve_indirect_ambiguous_call</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L212" class="LineNr">212 </span>  <a href='010vm.cc.html#L32'>instruction</a> inst2<span class="Delimiter">;</span>
+<span id="L212" class="LineNr">212 </span>  <a href='010vm.cc.html#L33'>instruction</a> inst2<span class="Delimiter">;</span>
 <span id="L213" class="LineNr">213 </span>  inst2<span class="Delimiter">.</span>name = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L214" class="LineNr">214 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip <a href='010vm.cc.html#L19'>recipe</a></span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L215" class="LineNr">215 </span>    inst2<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@@ -280,14 +280,14 @@ if ('onhashchange' in window) {
 <span id="L217" class="LineNr">217 </span>    inst2<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L218" class="LineNr">218 </span>  <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span>r<span class="Delimiter">,</span> index<span class="Delimiter">,</span> inst2<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L219" class="LineNr">219 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name = inst2<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L220" class="LineNr">220 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst2<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L220" class="LineNr">220 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst2<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L221" class="LineNr">221 </span><span class="Delimiter">}</span>
 <span id="L222" class="LineNr">222 </span>
 <span id="L223" class="LineNr">223 </span><span class="Delimiter">:(after &quot;Transform.push_back(check_instruction)&quot;)</span>
 <span id="L224" class="LineNr">224 </span>Transform<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='072recipe.cc.html#L226'>check_indirect_calls_against_header</a><span class="Delimiter">);</span>  <span class="Comment">// idempotent</span>
 <span id="L225" class="LineNr">225 </span><span class="Delimiter">:(code)</span>
 <span id="L226" class="LineNr">226 </span><span class="Normal">void</span> <a href='072recipe.cc.html#L226'>check_indirect_calls_against_header</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L227" class="LineNr">227 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check 'call' instructions inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L227" class="LineNr">227 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- type-check 'call' instructions inside <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L228" class="LineNr">228 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L229" class="LineNr">229 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L230" class="LineNr">230 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
@@ -300,14 +300,14 @@ if ('onhashchange' in window) {
 <span id="L237" class="LineNr">237 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L257'>is_indirect_call_with_ingredients</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L238" class="LineNr">238 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip callee</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee_header<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span>+<span class="Comment">/*</span><span class="Comment">skip callee</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L239" class="LineNr">239 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>callee_header<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i-<span class="Comment">/*</span><span class="Comment">skip callee</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">),</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L240" class="LineNr">240 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; i-<span class="Comment">/*</span><span class="Comment">skip callee</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L240" class="LineNr">240 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ingredient &quot;</span> &lt;&lt; i-<span class="Comment">/*</span><span class="Comment">skip callee</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L241" class="LineNr">241 </span>      <span class="Delimiter">}</span>
 <span id="L242" class="LineNr">242 </span>    <span class="Delimiter">}</span>
 <span id="L243" class="LineNr">243 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L262'>is_indirect_call_with_products</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L244" class="LineNr">244 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>callee_header<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L245" class="LineNr">245 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>is_dummy<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L246" class="LineNr">246 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!types_coercible<span class="Delimiter">(</span>callee_header<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L247" class="LineNr">247 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L247" class="LineNr">247 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; has the wrong type at '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L248" class="LineNr">248 </span>      <span class="Delimiter">}</span>
 <span id="L249" class="LineNr">249 </span>    <span class="Delimiter">}</span>
 <span id="L250" class="LineNr">250 </span>  <span class="Delimiter">}</span>
@@ -318,20 +318,20 @@ if ('onhashchange' in window) {
 <span id="L255" class="LineNr">255 </span><span class="Delimiter">}</span>
 <span id="L256" class="LineNr">256 </span>
 <span id="L257" class="LineNr">257 </span><span class="Normal">bool</span> <a href='072recipe.cc.html#L257'>is_indirect_call_with_ingredients</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L258" class="LineNr">258 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r == CALL<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r == CALL<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L259" class="LineNr">259 </span>  <span class="Comment">// End is_indirect_call_with_ingredients Special-cases</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L261" class="LineNr">261 </span><span class="Delimiter">}</span>
 <span id="L262" class="LineNr">262 </span><span class="Normal">bool</span> <a href='072recipe.cc.html#L262'>is_indirect_call_with_products</a><span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r == CALL<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r == CALL<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L264" class="LineNr">264 </span>  <span class="Comment">// End is_indirect_call_with_products Special-cases</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L266" class="LineNr">266 </span><span class="Delimiter">}</span>
 <span id="L267" class="LineNr">267 </span>
 <span id="L268" class="LineNr">268 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='072recipe.cc.html#L268'>from_reagent</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L269" class="LineNr">269 </span>  assert<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
 <span id="L270" class="LineNr">270 </span>  <a href='010vm.cc.html#L19'>recipe</a> result_header<span class="Delimiter">;</span>  <span class="Comment">// will contain only ingredients and products, nothing else</span>
-<span id="L271" class="LineNr">271 </span>  result_header<span class="Delimiter">.</span>has_header = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  result_header<span class="Delimiter">.</span>has_header =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L272" class="LineNr">272 </span>  <span class="Comment">// Begin Reagent-&gt;Recipe(r, recipe_header)</span>
 <span id="L273" class="LineNr">273 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L274" class="LineNr">274 </span>    assert<span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">);</span>
@@ -396,7 +396,7 @@ if ('onhashchange' in window) {
 <span id="L333" class="LineNr">333 </span><span class="Delimiter">}</span>
 <span id="L334" class="LineNr">334 </span>
 <span id="L335" class="LineNr">335 </span><span class="Normal">bool</span> <a href='072recipe.cc.html#L335'>is_mu_recipe</a><span class="Delimiter">(</span><span class="Normal">const</span> reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L336" class="LineNr">336 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L337" class="LineNr">337 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L338" class="LineNr">338 </span>    <span class="Comment">// End is_mu_recipe Atom Cases(r)</span>
 <span id="L339" class="LineNr">339 </span>    <span class="Identifier">return</span> r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;recipe-literal&quot;</span><span class="Delimiter">;</span>
@@ -433,32 +433,32 @@ if ('onhashchange' in window) {
 <span id="L370" class="LineNr">370 </span><span class="Delimiter">:(before &quot;End Matching Types For Literal(to)&quot;)</span>
 <span id="L371" class="LineNr">371 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L335'>is_mu_recipe</a><span class="Delimiter">(</span>to<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L372" class="LineNr">372 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L373" class="LineNr">373 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L374" class="LineNr">374 </span>    <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L373" class="LineNr">373 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;trying to store <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; from<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; into &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>to<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but there's no such recipe</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L374" class="LineNr">374 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L375" class="LineNr">375 </span>  <span class="Delimiter">}</span>
 <span id="L376" class="LineNr">376 </span>  <span class="Normal">const</span> recipe&amp; rrhs = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> from<span class="Delimiter">.</span>value<span class="Delimiter">);</span>
 <span id="L377" class="LineNr">377 </span>  <span class="Normal">const</span> recipe&amp; rlhs = <a href='072recipe.cc.html#L268'>from_reagent</a><span class="Delimiter">(</span>to<span class="Delimiter">);</span>
 <span id="L378" class="LineNr">378 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>rlhs<span class="Delimiter">.</span>ingredients<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>rrhs<span class="Delimiter">.</span>ingredients<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L379" class="LineNr">379 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>rlhs<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> rrhs<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L380" class="LineNr">380 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L381" class="LineNr">381 </span>  <span class="Delimiter">}</span>
 <span id="L382" class="LineNr">382 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; min<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>rlhs<span class="Delimiter">.</span>products<span class="Delimiter">),</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>rrhs<span class="Delimiter">.</span>products<span class="Delimiter">));</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L383" class="LineNr">383 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!types_match<span class="Delimiter">(</span>rlhs<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> rrhs<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
-<span id="L384" class="LineNr">384 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L384" class="LineNr">384 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L385" class="LineNr">385 </span>  <span class="Delimiter">}</span>
-<span id="L386" class="LineNr">386 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L386" class="LineNr">386 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L387" class="LineNr">387 </span><span class="Delimiter">}</span>
 <span id="L388" class="LineNr">388 </span>
 <span id="L389" class="LineNr">389 </span><span class="Delimiter">:(scenario call_variable_compound_ingredient)</span>
 <span id="L390" class="LineNr">390 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L391" class="LineNr">391 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='010vm.cc.html#L19'>recipe</a> <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span><span class="muRecipe"> -&gt; </span>number<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>copy f
-<span id="L392" class="LineNr">392 </span>  <span class="Constant">2</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L393" class="LineNr">393 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>call <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='010vm.cc.html#L19'>recipe</a> <span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a> number<span class="Delimiter">)</span><span class="muRecipe"> -&gt; </span>number<span class="Delimiter">)},</span> <span class="Constant">2</span>:&amp;:num
+<span id="L391" class="LineNr">391 </span>  <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='010vm.cc.html#L19'>recipe</a> <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">)</span><span class="muRecipe"> -&gt; </span>number<span class="Delimiter">)}</span><span class="Special"> &lt;- </span>copy f
+<span id="L392" class="LineNr">392 </span>  <span class="Constant">2</span>:&amp;:num<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L393" class="LineNr">393 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>call <span class="Delimiter">{</span><span class="Constant">1</span>: <span class="Delimiter">(</span><a href='010vm.cc.html#L19'>recipe</a> <span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a> number<span class="Delimiter">)</span><span class="muRecipe"> -&gt; </span>number<span class="Delimiter">)},</span> <span class="Constant">2</span>:&amp;:num
 <span id="L394" class="LineNr">394 </span>]
 <span id="L395" class="LineNr">395 </span><span class="muRecipe">def</span> f x:&amp;:num<span class="muRecipe"> -&gt; </span>y:num [
 <span id="L396" class="LineNr">396 </span>  local-scope
 <span id="L397" class="LineNr">397 </span>  load-ingredients
-<span id="L398" class="LineNr">398 </span>  y<span class="Special"> &lt;- </span>copy x
+<span id="L398" class="LineNr">398 </span>  y<span class="Special"> &lt;- </span>deaddress x
 <span id="L399" class="LineNr">399 </span>]
 <span id="L400" class="LineNr">400 </span>$error: <span class="Constant">0</span>
 <span id="L401" class="LineNr">401 </span>
@@ -485,9 +485,9 @@ if ('onhashchange' in window) {
 <span id="L422" class="LineNr">422 </span><span class="Normal">void</span> <a href='072recipe.cc.html#L422'>check_for_recipe_literals</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L423" class="LineNr">423 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L424" class="LineNr">424 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L335'>is_mu_recipe</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L425" class="LineNr">425 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type for '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L425" class="LineNr">425 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;missing type for '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;' in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L426" class="LineNr">426 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_present_in_ingredients<span class="Delimiter">(</span>caller<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span>
-<span id="L427" class="LineNr">427 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L427" class="LineNr">427 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  did you forget 'load-ingredients'?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L428" class="LineNr">428 </span>    <span class="Delimiter">}</span>
 <span id="L429" class="LineNr">429 </span>  <span class="Delimiter">}</span>
 <span id="L430" class="LineNr">430 </span><span class="Delimiter">}</span>
@@ -502,8 +502,8 @@ if ('onhashchange' in window) {
 <span id="L439" class="LineNr">439 </span><span class="traceContains">+error:   did you forget 'load-ingredients'?</span>
 <span id="L440" class="LineNr">440 </span>
 <span id="L441" class="LineNr">441 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L442" class="LineNr">442 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;function&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">));</span>
-<span id="L443" class="LineNr">443 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;fn&quot;</span><span class="Delimiter">,</span> <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">));</span>
+<span id="L442" class="LineNr">442 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;function&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">));</span>
+<span id="L443" class="LineNr">443 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Type_abbreviations<span class="Delimiter">,</span> <span class="Constant">&quot;fn&quot;</span><span class="Delimiter">,</span> <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;recipe&quot;</span><span class="Delimiter">));</span>
 <span id="L444" class="LineNr">444 </span>
 <span id="L445" class="LineNr">445 </span><span class="Comment">//: copying functions to variables</span>
 <span id="L446" class="LineNr">446 </span>
@@ -544,7 +544,7 @@ if ('onhashchange' in window) {
 <span id="L481" class="LineNr">481 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;copy&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L482" class="LineNr">482 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L483" class="LineNr">483 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_recipe_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L484" class="LineNr">484 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L484" class="LineNr">484 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L485" class="LineNr">485 </span>    <span class="Comment">// potentially overloaded recipe</span>
 <span id="L486" class="LineNr">486 </span>    string new_name = <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> r<span class="Delimiter">,</span> index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L487" class="LineNr">487 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>new_name == <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -555,7 +555,7 @@ if ('onhashchange' in window) {
 <span id="L492" class="LineNr">492 </span><span class="Delimiter">}</span>
 <span id="L493" class="LineNr">493 </span><span class="Delimiter">:(code)</span>
 <span id="L494" class="LineNr">494 </span>string <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; recipe_name<span class="Delimiter">,</span> <span class="Normal">const</span> reagent&amp; call_types<span class="Delimiter">,</span> <span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L495" class="LineNr">495 </span>  <a href='010vm.cc.html#L32'>instruction</a> inst<span class="Delimiter">;</span>
+<span id="L495" class="LineNr">495 </span>  <a href='010vm.cc.html#L33'>instruction</a> inst<span class="Delimiter">;</span>
 <span id="L496" class="LineNr">496 </span>  inst<span class="Delimiter">.</span>name = recipe_name<span class="Delimiter">;</span>
 <span id="L497" class="LineNr">497 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_recipe<span class="Delimiter">(</span>call_types<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
 <span id="L498" class="LineNr">498 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='072recipe.cc.html#L208'>is_recipe_literal</a><span class="Delimiter">(</span>call_types<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// error raised elsewhere</span>
@@ -617,15 +617,15 @@ if ('onhashchange' in window) {
 <span id="L554" class="LineNr">554 </span><span class="Delimiter">:(after &quot;End resolve_ambiguous_call(r, index, inst, caller_recipe) Special-cases&quot;)</span>
 <span id="L555" class="LineNr">555 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L556" class="LineNr">556 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_recipe<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L557" class="LineNr">557 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt; <a href='010vm.cc.html#L197'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L559" class="LineNr">559 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L560" class="LineNr">560 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to simultaneously guess which overloads you want for '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L557" class="LineNr">557 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L558" class="LineNr">558 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt; <a href='010vm.cc.html#L198'>MAX_PRIMITIVE_RECIPES</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L559" class="LineNr">559 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">))</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L560" class="LineNr">560 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to simultaneously guess which overloads you want for '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' and '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L561" class="LineNr">561 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L562" class="LineNr">562 </span>  <span class="Delimiter">}</span>
 <span id="L563" class="LineNr">563 </span>  <span class="Normal">const</span> recipe&amp; callee = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L564" class="LineNr">564 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!callee<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L565" class="LineNr">565 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to guess which variant of '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' you want, when the caller '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' doesn't have a header</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L565" class="LineNr">565 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to guess which variant of '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' you want, when the caller '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;' doesn't have a header</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L566" class="LineNr">566 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L567" class="LineNr">567 </span>  <span class="Delimiter">}</span>
 <span id="L568" class="LineNr">568 </span>  string new_name = <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> r<span class="Delimiter">,</span> index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
@@ -664,10 +664,10 @@ if ('onhashchange' in window) {
 <span id="L601" class="LineNr">601 </span><span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;return&quot;</span> || inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;reply&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L602" class="LineNr">602 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L603" class="LineNr">603 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_recipe_literal<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L604" class="LineNr">604 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L370'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L604" class="LineNr">604 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='054static_dispatch.cc.html#L326'>non_ghost_size</a><span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Recipe_variants<span class="Delimiter">,</span> inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">))</span> &lt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L605" class="LineNr">605 </span>    <span class="Comment">// potentially overloaded recipe</span>
 <span id="L606" class="LineNr">606 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!caller_recipe<span class="Delimiter">.</span>has_header<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L607" class="LineNr">607 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to guess which variant of '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' you want, without a recipe header</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L607" class="LineNr">607 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller_recipe<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;sorry, we're not yet smart enough to guess which variant of '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;' you want, without a recipe header</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L608" class="LineNr">608 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L609" class="LineNr">609 </span>    <span class="Delimiter">}</span>
 <span id="L610" class="LineNr">610 </span>    string new_name = <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>name<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> r<span class="Delimiter">,</span> index<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
diff --git a/html/073scheduler.cc.html b/html/073scheduler.cc.html
index b3e6e792..53bf8eef 100644
--- a/html/073scheduler.cc.html
+++ b/html/073scheduler.cc.html
@@ -133,7 +133,7 @@ if ('onhashchange' in window) {
 <span id="L69" class="LineNr"> 69 </span>    <a href='073scheduler.cc.html#L94'>skip_to_next_routine</a><span class="Delimiter">();</span>
 <span id="L70" class="LineNr"> 70 </span>    assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">);</span>
 <span id="L71" class="LineNr"> 71 </span>    assert<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>state == <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">);</span>
-<span id="L72" class="LineNr"> 72 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='073scheduler.cc.html#L106'>current_routine_label</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L72" class="LineNr"> 72 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9990</span><span class="Delimiter">,</span> <span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <a href='073scheduler.cc.html#L106'>current_routine_label</a><span class="Delimiter">()</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L73" class="LineNr"> 73 </span>    run_current_routine<span class="Delimiter">();</span>
 <span id="L74" class="LineNr"> 74 </span>    <span class="Comment">// Scheduler State Transitions</span>
 <span id="L75" class="LineNr"> 75 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>completed<span class="Delimiter">())</span>
@@ -149,9 +149,9 @@ if ('onhashchange' in window) {
 <span id="L85" class="LineNr"> 85 </span><span class="Normal">bool</span> <a href='073scheduler.cc.html#L85'>all_routines_done</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L87" class="LineNr"> 87 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">)</span>
-<span id="L88" class="LineNr"> 88 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Delimiter">}</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L91" class="LineNr"> 91 </span><span class="Delimiter">}</span>
 <span id="L92" class="LineNr"> 92 </span>
 <span id="L93" class="LineNr"> 93 </span><span class="Comment">// skip Current_routine_index past non-RUNNING routines</span>
@@ -174,7 +174,7 @@ if ('onhashchange' in window) {
 <span id="L110" class="LineNr">110 </span>string <a href='073scheduler.cc.html#L110'>routine_label</a><span class="Delimiter">(</span>routine* r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L111" class="LineNr">111 </span>  ostringstream result<span class="Delimiter">;</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Normal">const</span> call_stack&amp; calls = r<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">;</span>
-<span id="L113" class="LineNr">113 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != calls<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_iterator p = calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != calls<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L114" class="LineNr">114 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p != calls<span class="Delimiter">.</span>begin<span class="Delimiter">())</span> result &lt;&lt; <span class="Constant">'/'</span><span class="Delimiter">;</span>
 <span id="L115" class="LineNr">115 </span>    result &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L116" class="LineNr">116 </span>  <span class="Delimiter">}</span>
@@ -192,7 +192,7 @@ if ('onhashchange' in window) {
 <span id="L128" class="LineNr">128 </span>  Current_routine = main_routine<span class="Delimiter">;</span>
 <span id="L129" class="LineNr">129 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; argc<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L130" class="LineNr">130 </span>    vector&lt;<span class="Normal">double</span>&gt; arg<span class="Delimiter">;</span>
-<span id="L131" class="LineNr">131 </span>    arg<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>argv[i]<span class="Delimiter">));</span>
+<span id="L131" class="LineNr">131 </span>    arg<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>argv[i]<span class="Delimiter">));</span>
 <span id="L132" class="LineNr">132 </span>    assert<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> arg<span class="Delimiter">.</span>back<span class="Delimiter">())</span> == <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L133" class="LineNr">133 </span>    <a href='026call.cc.html#L83'>current_call</a><span class="Delimiter">().</span>ingredient_atoms<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>arg<span class="Delimiter">);</span>
 <span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
@@ -227,11 +227,11 @@ if ('onhashchange' in window) {
 <span id="L163" class="LineNr">163 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L164" class="LineNr">164 </span><span class="Normal">case</span> START_RUNNING: <span class="Delimiter">{</span>
 <span id="L165" class="LineNr">165 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L166" class="LineNr">166 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'start-running' requires at least one ingredient: the <a href='010vm.cc.html#L19'>recipe</a> to start running</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L166" class="LineNr">166 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'start-running' requires at least one ingredient: the <a href='010vm.cc.html#L19'>recipe</a> to start running</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L167" class="LineNr">167 </span>    <span class="Identifier">break</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="Normal">if</span> <span class="Delimiter">(</span>!is_mu_recipe<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L170" class="LineNr">170 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'start-running' should be a <a href='010vm.cc.html#L19'>recipe</a>, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L170" class="LineNr">170 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'start-running' should be a <a href='010vm.cc.html#L19'>recipe</a>, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L171" class="LineNr">171 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Delimiter">}</span>
 <span id="L173" class="LineNr">173 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -313,7 +313,7 @@ if ('onhashchange' in window) {
 <span id="L249" class="LineNr">249 </span>
 <span id="L250" class="LineNr">250 </span><span class="Comment">// 'start-running' only uses the ingredients of the callee, not its products</span>
 <span id="L251" class="LineNr">251 </span><span class="Delimiter">:(before &quot;End <a href='072recipe.cc.html#L257'>is_indirect_call_with_ingredients</a> Special-cases&quot;)</span>
-<span id="L252" class="LineNr">252 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r == START_RUNNING<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r == START_RUNNING<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L253" class="LineNr">253 </span>
 <span id="L254" class="LineNr">254 </span><span class="Comment">//: back to testing 'start-running'</span>
 <span id="L255" class="LineNr">255 </span>
@@ -375,7 +375,7 @@ if ('onhashchange' in window) {
 <span id="L311" class="LineNr">311 </span><span class="traceContains">+error: f2: divide by zero in '3:num &lt;- divide-with-remainder 4, 0'</span>
 <span id="L312" class="LineNr">312 </span><span class="traceAbsent">-error: f2: divide by zero in '4:num &lt;- divide-with-remainder 4, 0'</span>
 <span id="L313" class="LineNr">313 </span>
-<span id="L314" class="LineNr">314 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='001help.cc.html#L259'>vestigial</a> end)&quot;)</span>
+<span id="L314" class="LineNr">314 </span><span class="Delimiter">:(after &quot;operator&lt;&lt;(ostream&amp; os, <a href='003trace.cc.html#L226'>end</a> /*unused*/)&quot;)</span>
 <span id="L315" class="LineNr">315 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream &amp;&amp; Trace_stream<span class="Delimiter">-&gt;</span>curr_label == <span class="Constant">&quot;error&quot;</span> &amp;&amp; Current_routine<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L316" class="LineNr">316 </span>    Current_routine<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L42'>COMPLETED</a><span class="Delimiter">;</span>
 <span id="L317" class="LineNr">317 </span>  <span class="Delimiter">}</span>
@@ -406,9 +406,9 @@ if ('onhashchange' in window) {
 <span id="L342" class="LineNr">342 </span><span class="Normal">bool</span> has_completed_parent<span class="Delimiter">(</span><span class="Normal">int</span> routine_index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L343" class="LineNr">343 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = routine_index<span class="Delimiter">;</span>  j &gt;= <span class="Constant">0</span><span class="Delimiter">;</span>  j = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)-&gt;</span>parent_index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L344" class="LineNr">344 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)-&gt;</span>state == <a href='073scheduler.cc.html#L42'>COMPLETED</a><span class="Delimiter">)</span>
-<span id="L345" class="LineNr">345 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L345" class="LineNr">345 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L346" class="LineNr">346 </span>  <span class="Delimiter">}</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L347" class="LineNr">347 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L348" class="LineNr">348 </span><span class="Delimiter">}</span>
 <span id="L349" class="LineNr">349 </span>
 <span id="L350" class="LineNr">350 </span><span class="SalientComment">//:: 'routine-state' can tell if a given routine id is running</span>
@@ -435,11 +435,11 @@ if ('onhashchange' in window) {
 <span id="L371" class="LineNr">371 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L372" class="LineNr">372 </span><span class="Normal">case</span> ROUTINE_STATE: <span class="Delimiter">{</span>
 <span id="L373" class="LineNr">373 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L374" class="LineNr">374 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'routine-state' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L374" class="LineNr">374 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'routine-state' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L375" class="LineNr">375 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L376" class="LineNr">376 </span>  <span class="Delimiter">}</span>
 <span id="L377" class="LineNr">377 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L378" class="LineNr">378 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'routine-state' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L378" class="LineNr">378 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'routine-state' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L379" class="LineNr">379 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L380" class="LineNr">380 </span>  <span class="Delimiter">}</span>
 <span id="L381" class="LineNr">381 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -468,11 +468,11 @@ if ('onhashchange' in window) {
 <span id="L404" class="LineNr">404 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L405" class="LineNr">405 </span><span class="Normal">case</span> STOP: <span class="Delimiter">{</span>
 <span id="L406" class="LineNr">406 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L407" class="LineNr">407 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'stop' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L407" class="LineNr">407 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'stop' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L408" class="LineNr">408 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L409" class="LineNr">409 </span>  <span class="Delimiter">}</span>
 <span id="L410" class="LineNr">410 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L411" class="LineNr">411 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'stop' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L411" class="LineNr">411 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'stop' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L412" class="LineNr">412 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L413" class="LineNr">413 </span>  <span class="Delimiter">}</span>
 <span id="L414" class="LineNr">414 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -529,7 +529,7 @@ if ('onhashchange' in window) {
 <span id="L465" class="LineNr">465 </span><span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span>
 <span id="L466" class="LineNr">466 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>limit &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L467" class="LineNr">467 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>limit &lt;= Scheduling_interval<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L468" class="LineNr">468 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;discontinuing routine &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L468" class="LineNr">468 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;discontinuing routine &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L469" class="LineNr">469 </span>    Current_routine<span class="Delimiter">-&gt;</span>state = DISCONTINUED<span class="Delimiter">;</span>
 <span id="L470" class="LineNr">470 </span>    Current_routine<span class="Delimiter">-&gt;</span>limit = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L471" class="LineNr">471 </span>  <span class="Delimiter">}</span>
@@ -540,18 +540,18 @@ if ('onhashchange' in window) {
 <span id="L476" class="LineNr">476 </span>
 <span id="L477" class="LineNr">477 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
 <span id="L478" class="LineNr">478 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; any_routines_with_error<span class="Delimiter">())</span>
-<span id="L479" class="LineNr">479 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L479" class="LineNr">479 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L480" class="LineNr">480 </span><span class="Delimiter">:(before &quot;End Mu Test Teardown&quot;)</span>
 <span id="L481" class="LineNr">481 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; any_routines_with_error<span class="Delimiter">())</span>
-<span id="L482" class="LineNr">482 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; Current_scenario<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;: some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L482" class="LineNr">482 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; Current_scenario<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;: some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L483" class="LineNr">483 </span>
 <span id="L484" class="LineNr">484 </span><span class="Delimiter">:(code)</span>
 <span id="L485" class="LineNr">485 </span><span class="Normal">bool</span> any_routines_with_error<span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L486" class="LineNr">486 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L487" class="LineNr">487 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == DISCONTINUED<span class="Delimiter">)</span>
-<span id="L488" class="LineNr">488 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L489" class="LineNr">489 </span>  <span class="Delimiter">}</span>
-<span id="L490" class="LineNr">490 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L491" class="LineNr">491 </span><span class="Delimiter">}</span>
 <span id="L492" class="LineNr">492 </span>
 <span id="L493" class="LineNr">493 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
@@ -566,15 +566,15 @@ if ('onhashchange' in window) {
 <span id="L502" class="LineNr">502 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L503" class="LineNr">503 </span><span class="Normal">case</span> LIMIT_TIME: <span class="Delimiter">{</span>
 <span id="L504" class="LineNr">504 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L505" class="LineNr">505 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'limit-time' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L505" class="LineNr">505 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'limit-time' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L506" class="LineNr">506 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L507" class="LineNr">507 </span>  <span class="Delimiter">}</span>
 <span id="L508" class="LineNr">508 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L509" class="LineNr">509 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'limit-time' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L509" class="LineNr">509 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'limit-time' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L510" class="LineNr">510 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L511" class="LineNr">511 </span>  <span class="Delimiter">}</span>
 <span id="L512" class="LineNr">512 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L513" class="LineNr">513 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'limit-time' should be a number (of instructions to run for), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L513" class="LineNr">513 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'limit-time' should be a number (of instructions to run for), but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L514" class="LineNr">514 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L515" class="LineNr">515 </span>  <span class="Delimiter">}</span>
 <span id="L516" class="LineNr">516 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -604,11 +604,11 @@ if ('onhashchange' in window) {
 <span id="L540" class="LineNr">540 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L541" class="LineNr">541 </span><span class="Normal">case</span> NUMBER_OF_INSTRUCTIONS: <span class="Delimiter">{</span>
 <span id="L542" class="LineNr">542 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L543" class="LineNr">543 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'number-of-instructions' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L543" class="LineNr">543 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'number-of-instructions' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L544" class="LineNr">544 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L545" class="LineNr">545 </span>  <span class="Delimiter">}</span>
 <span id="L546" class="LineNr">546 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L547" class="LineNr">547 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'number-of-instructions' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L547" class="LineNr">547 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'number-of-instructions' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L548" class="LineNr">548 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L549" class="LineNr">549 </span>  <span class="Delimiter">}</span>
 <span id="L550" class="LineNr">550 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
diff --git a/html/074wait.cc.html b/html/074wait.cc.html
index 22991b5e..9eff1d76 100644
--- a/html/074wait.cc.html
+++ b/html/074wait.cc.html
@@ -98,22 +98,22 @@ if ('onhashchange' in window) {
 <span id="L34" class="LineNr"> 34 </span>
 <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(before &quot;End Mu Test Teardown&quot;)</span>
 <span id="L36" class="LineNr"> 36 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; <a href='074wait.cc.html#L47'>any_routines_waiting</a><span class="Delimiter">())</span>
-<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; Current_scenario<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;: deadlock!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; Current_scenario<span class="Delimiter">-&gt;</span>name &lt;&lt; <span class="Constant">&quot;: deadlock!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(before &quot;End Run Routine&quot;)</span>
 <span id="L39" class="LineNr"> 39 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='074wait.cc.html#L47'>any_routines_waiting</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L40" class="LineNr"> 40 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;deadlock!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;deadlock!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L41" class="LineNr"> 41 </span>  <a href='074wait.cc.html#L54'>dump_waiting_routines</a><span class="Delimiter">();</span>
 <span id="L42" class="LineNr"> 42 </span><span class="Delimiter">}</span>
 <span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
 <span id="L44" class="LineNr"> 44 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Passed &amp;&amp; any_routines_with_error<span class="Delimiter">())</span>
-<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;some routines died with errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L46" class="LineNr"> 46 </span><span class="Delimiter">:(code)</span>
 <span id="L47" class="LineNr"> 47 </span><span class="Normal">bool</span> <a href='074wait.cc.html#L47'>any_routines_waiting</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L48" class="LineNr"> 48 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L49" class="LineNr"> 49 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == WAITING<span class="Delimiter">)</span>
-<span id="L50" class="LineNr"> 50 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L50" class="LineNr"> 50 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Delimiter">}</span>
-<span id="L52" class="LineNr"> 52 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L53" class="LineNr"> 53 </span><span class="Delimiter">}</span>
 <span id="L54" class="LineNr"> 54 </span><span class="Normal">void</span> <a href='074wait.cc.html#L54'>dump_waiting_routines</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L55" class="LineNr"> 55 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -142,24 +142,24 @@ if ('onhashchange' in window) {
 <span id="L78" class="LineNr"> 78 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L79" class="LineNr"> 79 </span><span class="Normal">case</span> WAIT_FOR_RESET_THEN_SET: <span class="Delimiter">{</span>
 <span id="L80" class="LineNr"> 80 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L81" class="LineNr"> 81 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-reset-then-set' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L81" class="LineNr"> 81 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-reset-then-set' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L82" class="LineNr"> 82 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">}</span>
 <span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_location<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-reset-then-set' requires a location ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L85" class="LineNr"> 85 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-reset-then-set' requires a location ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Delimiter">}</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L88" class="LineNr"> 88 </span><span class="Delimiter">}</span>
 <span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> WAIT_FOR_RESET_THEN_SET: <span class="Delimiter">{</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;wait: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L94" class="LineNr"> 94 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; is already 0; setting&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; is already 0; setting&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L95" class="LineNr"> 95 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L97" class="LineNr"> 97 </span>  <span class="Delimiter">}</span>
-<span id="L98" class="LineNr"> 98 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; to reset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for location &quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; to reset&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L99" class="LineNr"> 99 </span>  Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span>
 <span id="L100" class="LineNr">100 </span>  Current_routine<span class="Delimiter">-&gt;</span>waiting_on_location = loc<span class="Delimiter">;</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -173,11 +173,11 @@ if ('onhashchange' in window) {
 <span id="L109" class="LineNr">109 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L110" class="LineNr">110 </span><span class="Normal">case</span> RESET: <span class="Delimiter">{</span>
 <span id="L111" class="LineNr">111 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L112" class="LineNr">112 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reset' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L112" class="LineNr">112 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reset' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L113" class="LineNr">113 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L114" class="LineNr">114 </span>  <span class="Delimiter">}</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_location<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L116" class="LineNr">116 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reset' requires a location ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L116" class="LineNr">116 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reset' requires a location ingredient, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L117" class="LineNr">117 </span>  <span class="Delimiter">}</span>
 <span id="L118" class="LineNr">118 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L119" class="LineNr">119 </span><span class="Delimiter">}</span>
@@ -185,7 +185,7 @@ if ('onhashchange' in window) {
 <span id="L121" class="LineNr">121 </span><span class="Normal">case</span> RESET: <span class="Delimiter">{</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Normal">int</span> loc = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L123" class="LineNr">123 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;reset: *&quot;</span> &lt;&lt; loc &lt;&lt; <span class="Constant">&quot; = &quot;</span> &lt;&lt; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L125" class="LineNr">125 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>
@@ -196,7 +196,7 @@ if ('onhashchange' in window) {
 <span id="L132" class="LineNr">132 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
 <span id="L133" class="LineNr">133 </span>  <span class="Normal">int</span> loc = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location<span class="Delimiter">;</span>
 <span id="L134" class="LineNr">134 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>loc &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L136" class="LineNr">136 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> loc<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L137" class="LineNr">137 </span>    Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
 <span id="L138" class="LineNr">138 </span>    Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>waiting_on_location = <span class="Constant">0</span><span class="Delimiter">;</span>
@@ -222,24 +222,24 @@ if ('onhashchange' in window) {
 <span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L159" class="LineNr">159 </span><span class="Normal">case</span> GET_LOCATION: <span class="Delimiter">{</span>
 <span id="L160" class="LineNr">160 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L161" class="LineNr">161 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get-location' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L161" class="LineNr">161 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get-location' expects exactly 2 ingredients in '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L162" class="LineNr">162 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L163" class="LineNr">163 </span>  <span class="Delimiter">}</span>
 <span id="L164" class="LineNr">164 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = 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="L165" class="LineNr">165 </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="L166" class="LineNr">166 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get-location' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L167" class="LineNr">167 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get-location' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L168" class="LineNr">168 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L169" class="LineNr">169 </span>  <span class="Delimiter">}</span>
 <span id="L170" class="LineNr">170 </span>  <span class="Normal">const</span> type_tree* base_root_type = base<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom ? base<span class="Delimiter">.</span>type : base<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>left<span class="Delimiter">;</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_root_type<span class="Delimiter">-&gt;</span>atom || base_root_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L179'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L172" class="LineNr">172 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get-location' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!base_root_type<span class="Delimiter">-&gt;</span>atom || base_root_type<span class="Delimiter">-&gt;</span>value == <span class="Constant">0</span> || !contains_key<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">)</span> || get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_root_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>kind != <a href='010vm.cc.html#L180'>CONTAINER</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L172" class="LineNr">172 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'get-location' should be a container, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L173" class="LineNr">173 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L174" class="LineNr">174 </span>  <span class="Delimiter">}</span>
-<span id="L175" class="LineNr">175 </span>  <a href='010vm.cc.html#L124'>type_ordinal</a> base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span>  <a href='010vm.cc.html#L125'>type_ordinal</a> base_type = base<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">;</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Normal">const</span> reagent&amp; offset = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal<span class="Delimiter">(</span>offset<span class="Delimiter">)</span> || !is_mu_scalar<span class="Delimiter">(</span>offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L178" class="LineNr">178 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'get-location' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L178" class="LineNr">178 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'get-location' should have type 'offset', but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L179" class="LineNr">179 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Delimiter">}</span>
 <span id="L181" class="LineNr">181 </span>  <span class="Normal">int</span> offset_value = <span class="Constant">0</span><span class="Delimiter">;</span>
@@ -247,7 +247,7 @@ if ('onhashchange' in window) {
 <span id="L183" class="LineNr">183 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L184" class="LineNr">184 </span>    offset_value = to_integer<span class="Delimiter">(</span>offset<span class="Delimiter">.</span>name<span class="Delimiter">);</span>
 <span id="L185" class="LineNr">185 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>offset_value &lt; <span class="Constant">0</span> || offset_value &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L186" class="LineNr">186 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset &quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot; for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L186" class="LineNr">186 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;invalid offset &quot;</span> &lt;&lt; offset_value &lt;&lt; <span class="Constant">&quot; for '&quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">).</span>name &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L187" class="LineNr">187 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L188" class="LineNr">188 </span>    <span class="Delimiter">}</span>
 <span id="L189" class="LineNr">189 </span>  <span class="Delimiter">}</span>
@@ -256,7 +256,7 @@ if ('onhashchange' in window) {
 <span id="L192" class="LineNr">192 </span>  <span class="Delimiter">}</span>
 <span id="L193" class="LineNr">193 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_location<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L195" class="LineNr">195 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get-location &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to type location but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L195" class="LineNr">195 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'get-location &quot;</span> &lt;&lt; base<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; offset<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;' should write to type location but '&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>name &lt;&lt; <span class="Constant">&quot;' has type '&quot;</span> &lt;&lt; names_to_string_without_quotes<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L196" class="LineNr">196 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L197" class="LineNr">197 </span>  <span class="Delimiter">}</span>
 <span id="L198" class="LineNr">198 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -264,10 +264,10 @@ if ('onhashchange' in window) {
 <span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L201" class="LineNr">201 </span><span class="Normal">case</span> GET_LOCATION: <span class="Delimiter">{</span>
 <span id="L202" class="LineNr">202 </span>  reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> base = <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="L203" class="LineNr">203 </span>  canonize<span class="Delimiter">(</span>base<span class="Delimiter">);</span>
+<span id="L203" class="LineNr">203 </span>  <a href='035lookup.cc.html#L66'>canonize</a><span class="Delimiter">(</span>base<span class="Delimiter">);</span>
 <span id="L204" class="LineNr">204 </span>  <span class="Normal">int</span> base_address = base<span class="Delimiter">.</span>value<span class="Delimiter">;</span>
 <span id="L205" class="LineNr">205 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base_address == <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>    <a href='003trace.cc.html#L174'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L206" class="LineNr">206 </span>    <a href='003trace.cc.html#L197'>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 access location 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L207" class="LineNr">207 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L208" class="LineNr">208 </span>  <span class="Delimiter">}</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Normal">const</span> type_tree* base_type = get_base_type<span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">);</span>
@@ -275,8 +275,8 @@ if ('onhashchange' in window) {
 <span id="L211" class="LineNr">211 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>offset &lt; <span class="Constant">0</span> || offset &gt;= <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type<span class="Delimiter">,</span> base_type<span class="Delimiter">-&gt;</span>value<span class="Delimiter">).</span>elements<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// copied from Check above</span>
 <span id="L212" class="LineNr">212 </span>  <span class="Normal">int</span> result = base_address<span class="Delimiter">;</span>
 <span id="L213" class="LineNr">213 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; offset<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span>
-<span id="L214" class="LineNr">214 </span>    result += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L429'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
-<span id="L215" class="LineNr">215 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L214" class="LineNr">214 </span>    result += size_of<span class="Delimiter">(</span><a href='030container.cc.html#L212'>element_type</a><span class="Delimiter">(</span>base<span class="Delimiter">.</span>type<span class="Delimiter">,</span> i<span class="Delimiter">));</span>
+<span id="L215" class="LineNr">215 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;address to copy is &quot;</span> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L216" class="LineNr">216 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L217" class="LineNr">217 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
 <span id="L218" class="LineNr">218 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -284,9 +284,9 @@ if ('onhashchange' in window) {
 <span id="L220" class="LineNr">220 </span>
 <span id="L221" class="LineNr">221 </span><span class="Delimiter">:(code)</span>
 <span id="L222" class="LineNr">222 </span><span class="Normal">bool</span> <a href='074wait.cc.html#L222'>is_mu_location</a><span class="Delimiter">(</span>reagent<span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L225" class="LineNr">225 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!canonize_type<span class="Delimiter">(</span>x<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L226" class="LineNr">226 </span>  <span class="Identifier">return</span> x<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>value == get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;location&quot;</span><span class="Delimiter">);</span>
 <span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
 <span id="L228" class="LineNr">228 </span>
@@ -326,329 +326,329 @@ if ('onhashchange' in window) {
 <span id="L262" class="LineNr">262 </span><span class="Delimiter">:(scenario get_location_indirect)</span>
 <span id="L263" class="LineNr">263 </span><span class="Comment"># 'get-location' can read from container address</span>
 <span id="L264" class="LineNr">264 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L265" class="LineNr">265 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L268" class="LineNr">268 </span>  <span class="Constant">4</span>:location<span class="Special"> &lt;- </span>get-location <span class="Constant">1</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L269" class="LineNr">269 </span>]
-<span id="L270" class="LineNr">270 </span><span class="traceContains">+mem: storing 10 in location 4</span>
-<span id="L271" class="LineNr">271 </span>
-<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(scenario get_location_indirect_2)</span>
-<span id="L273" class="LineNr">273 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L274" class="LineNr">274 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L276" class="LineNr">276 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L277" class="LineNr">277 </span>  <span class="Constant">4</span>:&amp;:num<span class="Special"> &lt;- </span>copy <span class="Constant">20</span>/unsafe
-<span id="L278" class="LineNr">278 </span>  <span class="Constant">4</span>:&amp;:location/lookup<span class="Special"> &lt;- </span>get-location <span class="Constant">1</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
-<span id="L279" class="LineNr">279 </span>]
-<span id="L280" class="LineNr">280 </span><span class="traceContains">+mem: storing 10 in location 20</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Constant">1</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">10</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num/x<span class="Delimiter">,</span> <span class="Constant">12</span>:num/y<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L267" class="LineNr">267 </span>  <span class="Constant">20</span>:location<span class="Special"> &lt;- </span>get-location <span class="Constant">1</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
+<span id="L268" class="LineNr">268 </span>]
+<span id="L269" class="LineNr">269 </span><span class="traceContains">+mem: storing 11 in location 20</span>
+<span id="L270" class="LineNr">270 </span>
+<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(scenario get_location_indirect_2)</span>
+<span id="L272" class="LineNr">272 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L273" class="LineNr">273 </span>  <span class="Constant">1</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">10</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Constant">10</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">11</span>:num/x<span class="Delimiter">,</span> <span class="Constant">12</span>:num/y<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L275" class="LineNr">275 </span>  <span class="Constant">4</span>:num/alloc-id<span class="Delimiter">,</span> <span class="Constant">5</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">20</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Constant">4</span>:&amp;:location/lookup<span class="Special"> &lt;- </span>get-location <span class="Constant">1</span>:&amp;:point/lookup<span class="Delimiter">,</span> <span class="Constant">0:offset</span>
+<span id="L277" class="LineNr">277 </span>]
+<span id="L278" class="LineNr">278 </span><span class="traceContains">+mem: storing 11 in location 21</span>
+<span id="L279" class="LineNr">279 </span>
+<span id="L280" class="LineNr">280 </span><span class="Comment">//: allow waiting on a routine to complete</span>
 <span id="L281" class="LineNr">281 </span>
-<span id="L282" class="LineNr">282 </span><span class="Comment">//: allow waiting on a routine to complete</span>
-<span id="L283" class="LineNr">283 </span>
-<span id="L284" class="LineNr">284 </span><span class="Delimiter">:(scenario wait_for_routine)</span>
-<span id="L285" class="LineNr">285 </span><span class="muRecipe">def</span> f1 [
-<span id="L286" class="LineNr">286 </span>  <span class="Comment"># add a few routines to run</span>
-<span id="L287" class="LineNr">287 </span>  <span class="Constant">1</span>:num/routine<span class="Special"> &lt;- </span>start-running f2
-<span id="L288" class="LineNr">288 </span>  <span class="Constant">2</span>:num/routine<span class="Special"> &lt;- </span>start-running f3
-<span id="L289" class="LineNr">289 </span>  wait-<span class="Normal">for</span>-routine <span class="Constant">1</span>:num/routine
-<span id="L290" class="LineNr">290 </span>  <span class="Comment"># now wait for f2 to *complete* and modify location 13 before using its value</span>
-<span id="L291" class="LineNr">291 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>:num
-<span id="L292" class="LineNr">292 </span>]
-<span id="L293" class="LineNr">293 </span><span class="muRecipe">def</span> f2 [
-<span id="L294" class="LineNr">294 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># just padding</span>
-<span id="L295" class="LineNr">295 </span>  <span class="Normal">switch</span>  <span class="Comment"># simulate a block; routine f1 shouldn't restart at this point</span>
-<span id="L296" class="LineNr">296 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L297" class="LineNr">297 </span>]
-<span id="L298" class="LineNr">298 </span><span class="muRecipe">def</span> f3 [
-<span id="L299" class="LineNr">299 </span>  <span class="Comment"># padding routine just to help simulate the block in f2 using 'switch'</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L301" class="LineNr">301 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L302" class="LineNr">302 </span>]
-<span id="L303" class="LineNr">303 </span><span class="traceContains">+schedule: f1</span>
-<span id="L304" class="LineNr">304 </span><span class="traceContains">+run: waiting for routine 2</span>
+<span id="L282" class="LineNr">282 </span><span class="Delimiter">:(scenario wait_for_routine)</span>
+<span id="L283" class="LineNr">283 </span><span class="muRecipe">def</span> f1 [
+<span id="L284" class="LineNr">284 </span>  <span class="Comment"># add a few routines to run</span>
+<span id="L285" class="LineNr">285 </span>  <span class="Constant">1</span>:num/routine<span class="Special"> &lt;- </span>start-running f2
+<span id="L286" class="LineNr">286 </span>  <span class="Constant">2</span>:num/routine<span class="Special"> &lt;- </span>start-running f3
+<span id="L287" class="LineNr">287 </span>  wait-<span class="Normal">for</span>-routine <span class="Constant">1</span>:num/routine
+<span id="L288" class="LineNr">288 </span>  <span class="Comment"># now wait for f2 to *complete* and modify location 13 before using its value</span>
+<span id="L289" class="LineNr">289 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">13</span>:num
+<span id="L290" class="LineNr">290 </span>]
+<span id="L291" class="LineNr">291 </span><span class="muRecipe">def</span> f2 [
+<span id="L292" class="LineNr">292 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># just padding</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">switch</span>  <span class="Comment"># simulate a block; routine f1 shouldn't restart at this point</span>
+<span id="L294" class="LineNr">294 </span>  <span class="Constant">13</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L295" class="LineNr">295 </span>]
+<span id="L296" class="LineNr">296 </span><span class="muRecipe">def</span> f3 [
+<span id="L297" class="LineNr">297 </span>  <span class="Comment"># padding routine just to help simulate the block in f2 using 'switch'</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L300" class="LineNr">300 </span>]
+<span id="L301" class="LineNr">301 </span><span class="traceContains">+schedule: f1</span>
+<span id="L302" class="LineNr">302 </span><span class="traceContains">+run: waiting for routine 2</span>
+<span id="L303" class="LineNr">303 </span><span class="traceContains">+schedule: f2</span>
+<span id="L304" class="LineNr">304 </span><span class="traceContains">+schedule: f3</span>
 <span id="L305" class="LineNr">305 </span><span class="traceContains">+schedule: f2</span>
-<span id="L306" class="LineNr">306 </span><span class="traceContains">+schedule: f3</span>
-<span id="L307" class="LineNr">307 </span><span class="traceContains">+schedule: f2</span>
-<span id="L308" class="LineNr">308 </span><span class="traceContains">+schedule: waking up routine 1</span>
-<span id="L309" class="LineNr">309 </span><span class="traceContains">+schedule: f1</span>
-<span id="L310" class="LineNr">310 </span><span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 20</span>
-<span id="L311" class="LineNr">311 </span><span class="traceContains">+mem: storing 34 in location 20</span>
-<span id="L312" class="LineNr">312 </span>
-<span id="L313" class="LineNr">313 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
-<span id="L314" class="LineNr">314 </span><span class="Comment">// only if state == WAITING</span>
-<span id="L315" class="LineNr">315 </span><span class="Normal">int</span> waiting_on_routine<span class="Delimiter">;</span>
-<span id="L316" class="LineNr">316 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
-<span id="L317" class="LineNr">317 </span>waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L318" class="LineNr">318 </span>
-<span id="L319" class="LineNr">319 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L320" class="LineNr">320 </span>WAIT_FOR_ROUTINE<span class="Delimiter">,</span>
-<span id="L321" class="LineNr">321 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L322" class="LineNr">322 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;wait-for-routine&quot;</span><span class="Delimiter">,</span> WAIT_FOR_ROUTINE<span class="Delimiter">);</span>
-<span id="L323" class="LineNr">323 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L324" class="LineNr">324 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE: <span class="Delimiter">{</span>
-<span id="L325" class="LineNr">325 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L326" class="LineNr">326 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-routine' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L327" class="LineNr">327 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Delimiter">}</span>
-<span id="L329" class="LineNr">329 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L330" class="LineNr">330 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'wait-for-routine' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L331" class="LineNr">331 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L332" class="LineNr">332 </span>  <span class="Delimiter">}</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L334" class="LineNr">334 </span><span class="Delimiter">}</span>
-<span id="L335" class="LineNr">335 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L336" class="LineNr">336 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE: <span class="Delimiter">{</span>
-<span id="L337" class="LineNr">337 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L338" class="LineNr">338 </span>    <a href='003trace.cc.html#L174'>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;routine can't wait for itself! '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L339" class="LineNr">339 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L340" class="LineNr">340 </span>  <span class="Delimiter">}</span>
-<span id="L341" class="LineNr">341 </span>  Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span>
-<span id="L342" class="LineNr">342 </span>  Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L343" class="LineNr">343 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for routine &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L344" class="LineNr">344 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L345" class="LineNr">345 </span><span class="Delimiter">}</span>
-<span id="L346" class="LineNr">346 </span>
-<span id="L347" class="LineNr">347 </span><span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span>
-<span id="L348" class="LineNr">348 </span><span class="Comment">// Wake up any routines waiting for other routines to complete.</span>
-<span id="L349" class="LineNr">349 </span><span class="Comment">// Important: this must come after the scheduler loop above giving routines</span>
-<span id="L350" class="LineNr">350 </span><span class="Comment">// waiting for locations to change a chance to wake up.</span>
-<span id="L351" class="LineNr">351 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L352" class="LineNr">352 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L353" class="LineNr">353 </span>  routine* waiter = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L354" class="LineNr">354 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!waiter<span class="Delimiter">-&gt;</span>waiting_on_routine<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L355" class="LineNr">355 </span>  <span class="Normal">int</span> id = waiter<span class="Delimiter">-&gt;</span>waiting_on_routine<span class="Delimiter">;</span>
-<span id="L356" class="LineNr">356 </span>  assert<span class="Delimiter">(</span>id != waiter<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span>  <span class="Comment">// routine can't wait on itself</span>
-<span id="L357" class="LineNr">357 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L358" class="LineNr">358 </span>    <span class="Normal">const</span> routine* waitee = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
-<span id="L359" class="LineNr">359 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>id == id &amp;&amp; waitee<span class="Delimiter">-&gt;</span>state != <a href='073scheduler.cc.html#L41'>RUNNING</a> &amp;&amp; waitee<span class="Delimiter">-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L360" class="LineNr">360 </span>      <span class="Comment">// routine is COMPLETED or DISCONTINUED</span>
-<span id="L361" class="LineNr">361 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; waiter<span class="Delimiter">-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L362" class="LineNr">362 </span>      waiter<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
-<span id="L363" class="LineNr">363 </span>      waiter<span class="Delimiter">-&gt;</span>waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span>    <span class="Delimiter">}</span>
-<span id="L365" class="LineNr">365 </span>  <span class="Delimiter">}</span>
-<span id="L366" class="LineNr">366 </span><span class="Delimiter">}</span>
+<span id="L306" class="LineNr">306 </span><span class="traceContains">+schedule: waking up routine 1</span>
+<span id="L307" class="LineNr">307 </span><span class="traceContains">+schedule: f1</span>
+<span id="L308" class="LineNr">308 </span><span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 20</span>
+<span id="L309" class="LineNr">309 </span><span class="traceContains">+mem: storing 34 in location 20</span>
+<span id="L310" class="LineNr">310 </span>
+<span id="L311" class="LineNr">311 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
+<span id="L312" class="LineNr">312 </span><span class="Comment">// only if state == WAITING</span>
+<span id="L313" class="LineNr">313 </span><span class="Normal">int</span> waiting_on_routine<span class="Delimiter">;</span>
+<span id="L314" class="LineNr">314 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
+<span id="L315" class="LineNr">315 </span>waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L318" class="LineNr">318 </span>WAIT_FOR_ROUTINE<span class="Delimiter">,</span>
+<span id="L319" class="LineNr">319 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L320" class="LineNr">320 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;wait-for-routine&quot;</span><span class="Delimiter">,</span> WAIT_FOR_ROUTINE<span class="Delimiter">);</span>
+<span id="L321" class="LineNr">321 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L322" class="LineNr">322 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE: <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L324" class="LineNr">324 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-routine' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L328" class="LineNr">328 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'wait-for-routine' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L329" class="LineNr">329 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Delimiter">}</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L332" class="LineNr">332 </span><span class="Delimiter">}</span>
+<span id="L333" class="LineNr">333 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L334" class="LineNr">334 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE: <span class="Delimiter">{</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L336" class="LineNr">336 </span>    <a href='003trace.cc.html#L197'>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;routine can't wait for itself! '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L337" class="LineNr">337 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L338" class="LineNr">338 </span>  <span class="Delimiter">}</span>
+<span id="L339" class="LineNr">339 </span>  Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span>
+<span id="L340" class="LineNr">340 </span>  Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L341" class="LineNr">341 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for routine &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L342" class="LineNr">342 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
+<span id="L344" class="LineNr">344 </span>
+<span id="L345" class="LineNr">345 </span><span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span>
+<span id="L346" class="LineNr">346 </span><span class="Comment">// Wake up any routines waiting for other routines to complete.</span>
+<span id="L347" class="LineNr">347 </span><span class="Comment">// Important: this must come after the scheduler loop above giving routines</span>
+<span id="L348" class="LineNr">348 </span><span class="Comment">// waiting for locations to change a chance to wake up.</span>
+<span id="L349" class="LineNr">349 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L351" class="LineNr">351 </span>  routine* waiter = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L352" class="LineNr">352 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!waiter<span class="Delimiter">-&gt;</span>waiting_on_routine<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>  <span class="Normal">int</span> id = waiter<span class="Delimiter">-&gt;</span>waiting_on_routine<span class="Delimiter">;</span>
+<span id="L354" class="LineNr">354 </span>  assert<span class="Delimiter">(</span>id != waiter<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span>  <span class="Comment">// routine can't wait on itself</span>
+<span id="L355" class="LineNr">355 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L356" class="LineNr">356 </span>    <span class="Normal">const</span> routine* waitee = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L357" class="LineNr">357 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>id == id &amp;&amp; waitee<span class="Delimiter">-&gt;</span>state != <a href='073scheduler.cc.html#L41'>RUNNING</a> &amp;&amp; waitee<span class="Delimiter">-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L358" class="LineNr">358 </span>      <span class="Comment">// routine is COMPLETED or DISCONTINUED</span>
+<span id="L359" class="LineNr">359 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; waiter<span class="Delimiter">-&gt;</span>id &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L360" class="LineNr">360 </span>      waiter<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
+<span id="L361" class="LineNr">361 </span>      waiter<span class="Delimiter">-&gt;</span>waiting_on_routine = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L362" class="LineNr">362 </span>    <span class="Delimiter">}</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Delimiter">}</span>
+<span id="L364" class="LineNr">364 </span><span class="Delimiter">}</span>
+<span id="L365" class="LineNr">365 </span>
+<span id="L366" class="LineNr">366 </span><span class="Comment">//: yield voluntarily to let some other routine run</span>
 <span id="L367" class="LineNr">367 </span>
-<span id="L368" class="LineNr">368 </span><span class="Comment">//: yield voluntarily to let some other routine run</span>
-<span id="L369" class="LineNr">369 </span>
-<span id="L370" class="LineNr">370 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L371" class="LineNr">371 </span>SWITCH<span class="Delimiter">,</span>
-<span id="L372" class="LineNr">372 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L373" class="LineNr">373 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;switch&quot;</span><span class="Delimiter">,</span> SWITCH<span class="Delimiter">);</span>
-<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L375" class="LineNr">375 </span><span class="Normal">case</span> SWITCH: <span class="Delimiter">{</span>
-<span id="L376" class="LineNr">376 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L377" class="LineNr">377 </span><span class="Delimiter">}</span>
-<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L379" class="LineNr">379 </span><span class="Normal">case</span> SWITCH: <span class="Delimiter">{</span>
-<span id="L380" class="LineNr">380 </span>  ++current_step_index<span class="Delimiter">();</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
-<span id="L382" class="LineNr">382 </span><span class="Delimiter">}</span>
-<span id="L383" class="LineNr">383 </span>
-<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(scenario switch_preempts_current_routine)</span>
-<span id="L385" class="LineNr">385 </span><span class="muRecipe">def</span> f1 [
-<span id="L386" class="LineNr">386 </span>  start-running f2
-<span id="L387" class="LineNr">387 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">switch</span>
-<span id="L389" class="LineNr">389 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
-<span id="L390" class="LineNr">390 </span>]
-<span id="L391" class="LineNr">391 </span><span class="muRecipe">def</span> f2 [
-<span id="L392" class="LineNr">392 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
-<span id="L393" class="LineNr">393 </span>]
-<span id="L394" class="LineNr">394 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L395" class="LineNr">395 </span><span class="Comment"># context switch</span>
-<span id="L396" class="LineNr">396 </span><span class="traceContains">+mem: storing 35 in location 2</span>
-<span id="L397" class="LineNr">397 </span><span class="Comment"># back to original thread</span>
-<span id="L398" class="LineNr">398 </span><span class="traceContains">+mem: storing 36 in location 3</span>
-<span id="L399" class="LineNr">399 </span>
-<span id="L400" class="LineNr">400 </span><span class="SalientComment">//:: helpers for manipulating routines in tests</span>
-<span id="L401" class="LineNr">401 </span><span class="Comment">//:</span>
-<span id="L402" class="LineNr">402 </span><span class="Comment">//: Managing arbitrary scenarios requires the ability to:</span>
-<span id="L403" class="LineNr">403 </span><span class="Comment">//:   a) check if a routine is blocked</span>
-<span id="L404" class="LineNr">404 </span><span class="Comment">//:   b) restart a blocked routine ('restart')</span>
-<span id="L405" class="LineNr">405 </span><span class="Comment">//:</span>
-<span id="L406" class="LineNr">406 </span><span class="Comment">//: A routine is blocked either if it's waiting or if it explicitly signals</span>
-<span id="L407" class="LineNr">407 </span><span class="Comment">//: that it's blocked (even as it periodically wakes up and polls for some</span>
-<span id="L408" class="LineNr">408 </span><span class="Comment">//: event).</span>
-<span id="L409" class="LineNr">409 </span><span class="Comment">//:</span>
-<span id="L410" class="LineNr">410 </span><span class="Comment">//: Signalling blockedness might well be a huge hack. But Mu doesn't have Unix</span>
-<span id="L411" class="LineNr">411 </span><span class="Comment">//: signals to avoid polling with, because signals are also pretty hacky.</span>
-<span id="L412" class="LineNr">412 </span>
-<span id="L413" class="LineNr">413 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
-<span id="L414" class="LineNr">414 </span><span class="Normal">bool</span> blocked<span class="Delimiter">;</span>
-<span id="L415" class="LineNr">415 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
-<span id="L416" class="LineNr">416 </span>blocked = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L417" class="LineNr">417 </span>
-<span id="L418" class="LineNr">418 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L419" class="LineNr">419 </span>CURRENT_ROUTINE_IS_BLOCKED<span class="Delimiter">,</span>
-<span id="L420" class="LineNr">420 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L421" class="LineNr">421 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;current-routine-is-blocked&quot;</span><span class="Delimiter">,</span> CURRENT_ROUTINE_IS_BLOCKED<span class="Delimiter">);</span>
-<span id="L422" class="LineNr">422 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L423" class="LineNr">423 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_BLOCKED: <span class="Delimiter">{</span>
-<span id="L424" class="LineNr">424 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L425" class="LineNr">425 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'current-routine-is-blocked' should have no ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L426" class="LineNr">426 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Delimiter">}</span>
-<span id="L428" class="LineNr">428 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L429" class="LineNr">429 </span><span class="Delimiter">}</span>
-<span id="L430" class="LineNr">430 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L431" class="LineNr">431 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_BLOCKED: <span class="Delimiter">{</span>
-<span id="L432" class="LineNr">432 </span>  Current_routine<span class="Delimiter">-&gt;</span>blocked = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L433" class="LineNr">433 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L434" class="LineNr">434 </span><span class="Delimiter">}</span>
-<span id="L435" class="LineNr">435 </span>
-<span id="L436" class="LineNr">436 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L437" class="LineNr">437 </span>CURRENT_ROUTINE_IS_UNBLOCKED<span class="Delimiter">,</span>
-<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L439" class="LineNr">439 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;current-routine-is-unblocked&quot;</span><span class="Delimiter">,</span> CURRENT_ROUTINE_IS_UNBLOCKED<span class="Delimiter">);</span>
-<span id="L440" class="LineNr">440 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L441" class="LineNr">441 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_UNBLOCKED: <span class="Delimiter">{</span>
-<span id="L442" class="LineNr">442 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L443" class="LineNr">443 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'current-routine-is-unblocked' should have no ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L444" class="LineNr">444 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L445" class="LineNr">445 </span>  <span class="Delimiter">}</span>
-<span id="L446" class="LineNr">446 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L447" class="LineNr">447 </span><span class="Delimiter">}</span>
-<span id="L448" class="LineNr">448 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L449" class="LineNr">449 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_UNBLOCKED: <span class="Delimiter">{</span>
-<span id="L450" class="LineNr">450 </span>  Current_routine<span class="Delimiter">-&gt;</span>blocked = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L451" class="LineNr">451 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L452" class="LineNr">452 </span><span class="Delimiter">}</span>
-<span id="L453" class="LineNr">453 </span>
-<span id="L454" class="LineNr">454 </span><span class="Comment">//: also allow waiting on a routine to block</span>
-<span id="L455" class="LineNr">455 </span><span class="Comment">//: (just for tests; use wait_for_routine above wherever possible)</span>
-<span id="L456" class="LineNr">456 </span>
-<span id="L457" class="LineNr">457 </span><span class="Delimiter">:(scenario wait_for_routine_to_block)</span>
-<span id="L458" class="LineNr">458 </span><span class="muRecipe">def</span> f1 [
-<span id="L459" class="LineNr">459 </span>  <span class="Constant">1</span>:num/routine<span class="Special"> &lt;- </span>start-running f2
-<span id="L460" class="LineNr">460 </span>  wait-<span class="Normal">for</span>-routine-to-block <span class="Constant">1</span>:num/routine
-<span id="L461" class="LineNr">461 </span>  <span class="Comment"># now wait for f2 to run and modify location 10 before using its value</span>
-<span id="L462" class="LineNr">462 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:num
-<span id="L463" class="LineNr">463 </span>]
-<span id="L464" class="LineNr">464 </span><span class="muRecipe">def</span> f2 [
-<span id="L465" class="LineNr">465 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L466" class="LineNr">466 </span>]
-<span id="L467" class="LineNr">467 </span><span class="traceContains">+schedule: f1</span>
-<span id="L468" class="LineNr">468 </span><span class="traceContains">+run: waiting for routine 2 to block</span>
-<span id="L469" class="LineNr">469 </span><span class="traceContains">+schedule: f2</span>
-<span id="L470" class="LineNr">470 </span><span class="traceContains">+schedule: waking up routine 1 because routine 2 is blocked</span>
-<span id="L471" class="LineNr">471 </span><span class="traceContains">+schedule: f1</span>
-<span id="L472" class="LineNr">472 </span><span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 11</span>
-<span id="L473" class="LineNr">473 </span><span class="traceContains">+mem: storing 34 in location 11</span>
-<span id="L474" class="LineNr">474 </span>
-<span id="L475" class="LineNr">475 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
-<span id="L476" class="LineNr">476 </span><span class="Comment">// only if state == WAITING</span>
-<span id="L477" class="LineNr">477 </span><span class="Normal">int</span> waiting_on_routine_to_block<span class="Delimiter">;</span>
-<span id="L478" class="LineNr">478 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
-<span id="L479" class="LineNr">479 </span>waiting_on_routine_to_block = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L480" class="LineNr">480 </span>
-<span id="L481" class="LineNr">481 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L482" class="LineNr">482 </span>WAIT_FOR_ROUTINE_TO_BLOCK<span class="Delimiter">,</span>
-<span id="L483" class="LineNr">483 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L484" class="LineNr">484 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;wait-for-routine-to-block&quot;</span><span class="Delimiter">,</span> WAIT_FOR_ROUTINE_TO_BLOCK<span class="Delimiter">);</span>
-<span id="L485" class="LineNr">485 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L486" class="LineNr">486 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE_TO_BLOCK: <span class="Delimiter">{</span>
-<span id="L487" class="LineNr">487 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L488" class="LineNr">488 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-routine-to-block' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L489" class="LineNr">489 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L490" class="LineNr">490 </span>  <span class="Delimiter">}</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L492" class="LineNr">492 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'wait-for-routine-to-block' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L493" class="LineNr">493 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L494" class="LineNr">494 </span>  <span class="Delimiter">}</span>
-<span id="L495" class="LineNr">495 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L496" class="LineNr">496 </span><span class="Delimiter">}</span>
-<span id="L497" class="LineNr">497 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L498" class="LineNr">498 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE_TO_BLOCK: <span class="Delimiter">{</span>
-<span id="L499" class="LineNr">499 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L500" class="LineNr">500 </span>    <a href='003trace.cc.html#L174'>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;routine can't wait for itself! '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L501" class="LineNr">501 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L502" class="LineNr">502 </span>  <span class="Delimiter">}</span>
-<span id="L503" class="LineNr">503 </span>  Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span>
-<span id="L504" class="LineNr">504 </span>  Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L505" class="LineNr">505 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for routine &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to block&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L506" class="LineNr">506 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L507" class="LineNr">507 </span><span class="Delimiter">}</span>
-<span id="L508" class="LineNr">508 </span>
-<span id="L509" class="LineNr">509 </span><span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span>
-<span id="L510" class="LineNr">510 </span><span class="Comment">// Wake up any routines waiting for other routines to stop running.</span>
-<span id="L511" class="LineNr">511 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L512" class="LineNr">512 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L513" class="LineNr">513 </span>  routine* waiter = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L514" class="LineNr">514 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L515" class="LineNr">515 </span>  <span class="Normal">int</span> id = waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block<span class="Delimiter">;</span>
-<span id="L516" class="LineNr">516 </span>  assert<span class="Delimiter">(</span>id != waiter<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span>  <span class="Comment">// routine can't wait on itself</span>
-<span id="L517" class="LineNr">517 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L518" class="LineNr">518 </span>    <span class="Normal">const</span> routine* waitee = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
-<span id="L519" class="LineNr">519 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>id != id<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L520" class="LineNr">520 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>state != <a href='073scheduler.cc.html#L41'>RUNNING</a> || waitee<span class="Delimiter">-&gt;</span>blocked<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L521" class="LineNr">521 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; waiter<span class="Delimiter">-&gt;</span>id &lt;&lt; <span class="Constant">&quot; because routine &quot;</span> &lt;&lt; waitee<span class="Delimiter">-&gt;</span>id &lt;&lt; <span class="Constant">&quot; is blocked&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L522" class="LineNr">522 </span>      waiter<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
-<span id="L523" class="LineNr">523 </span>      waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L524" class="LineNr">524 </span>    <span class="Delimiter">}</span>
-<span id="L525" class="LineNr">525 </span>  <span class="Delimiter">}</span>
-<span id="L526" class="LineNr">526 </span><span class="Delimiter">}</span>
+<span id="L368" class="LineNr">368 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L369" class="LineNr">369 </span>SWITCH<span class="Delimiter">,</span>
+<span id="L370" class="LineNr">370 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L371" class="LineNr">371 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;switch&quot;</span><span class="Delimiter">,</span> SWITCH<span class="Delimiter">);</span>
+<span id="L372" class="LineNr">372 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L373" class="LineNr">373 </span><span class="Normal">case</span> SWITCH: <span class="Delimiter">{</span>
+<span id="L374" class="LineNr">374 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L375" class="LineNr">375 </span><span class="Delimiter">}</span>
+<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L377" class="LineNr">377 </span><span class="Normal">case</span> SWITCH: <span class="Delimiter">{</span>
+<span id="L378" class="LineNr">378 </span>  ++current_step_index<span class="Delimiter">();</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Identifier">goto</span> stop_running_current_routine<span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span><span class="Delimiter">}</span>
+<span id="L381" class="LineNr">381 </span>
+<span id="L382" class="LineNr">382 </span><span class="Delimiter">:(scenario switch_preempts_current_routine)</span>
+<span id="L383" class="LineNr">383 </span><span class="muRecipe">def</span> f1 [
+<span id="L384" class="LineNr">384 </span>  start-running f2
+<span id="L385" class="LineNr">385 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L386" class="LineNr">386 </span>  <span class="Normal">switch</span>
+<span id="L387" class="LineNr">387 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">36</span>
+<span id="L388" class="LineNr">388 </span>]
+<span id="L389" class="LineNr">389 </span><span class="muRecipe">def</span> f2 [
+<span id="L390" class="LineNr">390 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">35</span>
+<span id="L391" class="LineNr">391 </span>]
+<span id="L392" class="LineNr">392 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L393" class="LineNr">393 </span><span class="Comment"># context switch</span>
+<span id="L394" class="LineNr">394 </span><span class="traceContains">+mem: storing 35 in location 2</span>
+<span id="L395" class="LineNr">395 </span><span class="Comment"># back to original thread</span>
+<span id="L396" class="LineNr">396 </span><span class="traceContains">+mem: storing 36 in location 3</span>
+<span id="L397" class="LineNr">397 </span>
+<span id="L398" class="LineNr">398 </span><span class="SalientComment">//:: helpers for manipulating routines in tests</span>
+<span id="L399" class="LineNr">399 </span><span class="Comment">//:</span>
+<span id="L400" class="LineNr">400 </span><span class="Comment">//: Managing arbitrary scenarios requires the ability to:</span>
+<span id="L401" class="LineNr">401 </span><span class="Comment">//:   a) check if a routine is blocked</span>
+<span id="L402" class="LineNr">402 </span><span class="Comment">//:   b) restart a blocked routine ('restart')</span>
+<span id="L403" class="LineNr">403 </span><span class="Comment">//:</span>
+<span id="L404" class="LineNr">404 </span><span class="Comment">//: A routine is blocked either if it's waiting or if it explicitly signals</span>
+<span id="L405" class="LineNr">405 </span><span class="Comment">//: that it's blocked (even as it periodically wakes up and polls for some</span>
+<span id="L406" class="LineNr">406 </span><span class="Comment">//: event).</span>
+<span id="L407" class="LineNr">407 </span><span class="Comment">//:</span>
+<span id="L408" class="LineNr">408 </span><span class="Comment">//: Signalling blockedness might well be a huge hack. But Mu doesn't have Unix</span>
+<span id="L409" class="LineNr">409 </span><span class="Comment">//: signals to avoid polling with, because signals are also pretty hacky.</span>
+<span id="L410" class="LineNr">410 </span>
+<span id="L411" class="LineNr">411 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
+<span id="L412" class="LineNr">412 </span><span class="Normal">bool</span> blocked<span class="Delimiter">;</span>
+<span id="L413" class="LineNr">413 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
+<span id="L414" class="LineNr">414 </span>blocked =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span>
+<span id="L416" class="LineNr">416 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L417" class="LineNr">417 </span>CURRENT_ROUTINE_IS_BLOCKED<span class="Delimiter">,</span>
+<span id="L418" class="LineNr">418 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L419" class="LineNr">419 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;current-routine-is-blocked&quot;</span><span class="Delimiter">,</span> CURRENT_ROUTINE_IS_BLOCKED<span class="Delimiter">);</span>
+<span id="L420" class="LineNr">420 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L421" class="LineNr">421 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_BLOCKED: <span class="Delimiter">{</span>
+<span id="L422" class="LineNr">422 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L423" class="LineNr">423 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'current-routine-is-blocked' should have no ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L424" class="LineNr">424 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L425" class="LineNr">425 </span>  <span class="Delimiter">}</span>
+<span id="L426" class="LineNr">426 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L427" class="LineNr">427 </span><span class="Delimiter">}</span>
+<span id="L428" class="LineNr">428 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L429" class="LineNr">429 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_BLOCKED: <span class="Delimiter">{</span>
+<span id="L430" class="LineNr">430 </span>  Current_routine<span class="Delimiter">-&gt;</span>blocked =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L431" class="LineNr">431 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span>
+<span id="L434" class="LineNr">434 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L435" class="LineNr">435 </span>CURRENT_ROUTINE_IS_UNBLOCKED<span class="Delimiter">,</span>
+<span id="L436" class="LineNr">436 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L437" class="LineNr">437 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;current-routine-is-unblocked&quot;</span><span class="Delimiter">,</span> CURRENT_ROUTINE_IS_UNBLOCKED<span class="Delimiter">);</span>
+<span id="L438" class="LineNr">438 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L439" class="LineNr">439 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_UNBLOCKED: <span class="Delimiter">{</span>
+<span id="L440" class="LineNr">440 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L441" class="LineNr">441 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'current-routine-is-unblocked' should have no ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L442" class="LineNr">442 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L443" class="LineNr">443 </span>  <span class="Delimiter">}</span>
+<span id="L444" class="LineNr">444 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L445" class="LineNr">445 </span><span class="Delimiter">}</span>
+<span id="L446" class="LineNr">446 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L447" class="LineNr">447 </span><span class="Normal">case</span> CURRENT_ROUTINE_IS_UNBLOCKED: <span class="Delimiter">{</span>
+<span id="L448" class="LineNr">448 </span>  Current_routine<span class="Delimiter">-&gt;</span>blocked =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L450" class="LineNr">450 </span><span class="Delimiter">}</span>
+<span id="L451" class="LineNr">451 </span>
+<span id="L452" class="LineNr">452 </span><span class="Comment">//: also allow waiting on a routine to block</span>
+<span id="L453" class="LineNr">453 </span><span class="Comment">//: (just for tests; use wait_for_routine above wherever possible)</span>
+<span id="L454" class="LineNr">454 </span>
+<span id="L455" class="LineNr">455 </span><span class="Delimiter">:(scenario wait_for_routine_to_block)</span>
+<span id="L456" class="LineNr">456 </span><span class="muRecipe">def</span> f1 [
+<span id="L457" class="LineNr">457 </span>  <span class="Constant">1</span>:num/routine<span class="Special"> &lt;- </span>start-running f2
+<span id="L458" class="LineNr">458 </span>  wait-<span class="Normal">for</span>-routine-to-block <span class="Constant">1</span>:num/routine
+<span id="L459" class="LineNr">459 </span>  <span class="Comment"># now wait for f2 to run and modify location 10 before using its value</span>
+<span id="L460" class="LineNr">460 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">10</span>:num
+<span id="L461" class="LineNr">461 </span>]
+<span id="L462" class="LineNr">462 </span><span class="muRecipe">def</span> f2 [
+<span id="L463" class="LineNr">463 </span>  <span class="Constant">10</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L464" class="LineNr">464 </span>]
+<span id="L465" class="LineNr">465 </span><span class="traceContains">+schedule: f1</span>
+<span id="L466" class="LineNr">466 </span><span class="traceContains">+run: waiting for routine 2 to block</span>
+<span id="L467" class="LineNr">467 </span><span class="traceContains">+schedule: f2</span>
+<span id="L468" class="LineNr">468 </span><span class="traceContains">+schedule: waking up routine 1 because routine 2 is blocked</span>
+<span id="L469" class="LineNr">469 </span><span class="traceContains">+schedule: f1</span>
+<span id="L470" class="LineNr">470 </span><span class="Comment"># if we got the synchronization wrong we'd be storing 0 in location 11</span>
+<span id="L471" class="LineNr">471 </span><span class="traceContains">+mem: storing 34 in location 11</span>
+<span id="L472" class="LineNr">472 </span>
+<span id="L473" class="LineNr">473 </span><span class="Delimiter">:(before &quot;End routine Fields&quot;)</span>
+<span id="L474" class="LineNr">474 </span><span class="Comment">// only if state == WAITING</span>
+<span id="L475" class="LineNr">475 </span><span class="Normal">int</span> waiting_on_routine_to_block<span class="Delimiter">;</span>
+<span id="L476" class="LineNr">476 </span><span class="Delimiter">:(before &quot;End routine Constructor&quot;)</span>
+<span id="L477" class="LineNr">477 </span>waiting_on_routine_to_block = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L478" class="LineNr">478 </span>
+<span id="L479" class="LineNr">479 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L480" class="LineNr">480 </span>WAIT_FOR_ROUTINE_TO_BLOCK<span class="Delimiter">,</span>
+<span id="L481" class="LineNr">481 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L482" class="LineNr">482 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;wait-for-routine-to-block&quot;</span><span class="Delimiter">,</span> WAIT_FOR_ROUTINE_TO_BLOCK<span class="Delimiter">);</span>
+<span id="L483" class="LineNr">483 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L484" class="LineNr">484 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE_TO_BLOCK: <span class="Delimiter">{</span>
+<span id="L485" class="LineNr">485 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L486" class="LineNr">486 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'wait-for-routine-to-block' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L487" class="LineNr">487 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>  <span class="Delimiter">}</span>
+<span id="L489" class="LineNr">489 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L490" class="LineNr">490 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'wait-for-routine-to-block' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L491" class="LineNr">491 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L492" class="LineNr">492 </span>  <span class="Delimiter">}</span>
+<span id="L493" class="LineNr">493 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L494" class="LineNr">494 </span><span class="Delimiter">}</span>
+<span id="L495" class="LineNr">495 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L496" class="LineNr">496 </span><span class="Normal">case</span> WAIT_FOR_ROUTINE_TO_BLOCK: <span class="Delimiter">{</span>
+<span id="L497" class="LineNr">497 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == Current_routine<span class="Delimiter">-&gt;</span>id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L498" class="LineNr">498 </span>    <a href='003trace.cc.html#L197'>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;routine can't wait for itself! '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L499" class="LineNr">499 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L500" class="LineNr">500 </span>  <span class="Delimiter">}</span>
+<span id="L501" class="LineNr">501 </span>  Current_routine<span class="Delimiter">-&gt;</span>state = WAITING<span class="Delimiter">;</span>
+<span id="L502" class="LineNr">502 </span>  Current_routine<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L503" class="LineNr">503 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9998</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waiting for routine &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to block&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L504" class="LineNr">504 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L505" class="LineNr">505 </span><span class="Delimiter">}</span>
+<span id="L506" class="LineNr">506 </span>
+<span id="L507" class="LineNr">507 </span><span class="Delimiter">:(before &quot;End Scheduler State Transitions&quot;)</span>
+<span id="L508" class="LineNr">508 </span><span class="Comment">// Wake up any routines waiting for other routines to stop running.</span>
+<span id="L509" class="LineNr">509 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L510" class="LineNr">510 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state != WAITING<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L511" class="LineNr">511 </span>  routine* waiter = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L512" class="LineNr">512 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L513" class="LineNr">513 </span>  <span class="Normal">int</span> id = waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block<span class="Delimiter">;</span>
+<span id="L514" class="LineNr">514 </span>  assert<span class="Delimiter">(</span>id != waiter<span class="Delimiter">-&gt;</span>id<span class="Delimiter">);</span>  <span class="Comment">// routine can't wait on itself</span>
+<span id="L515" class="LineNr">515 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L516" class="LineNr">516 </span>    <span class="Normal">const</span> routine* waitee = Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L517" class="LineNr">517 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>id != id<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L518" class="LineNr">518 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>waitee<span class="Delimiter">-&gt;</span>state != <a href='073scheduler.cc.html#L41'>RUNNING</a> || waitee<span class="Delimiter">-&gt;</span>blocked<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L519" class="LineNr">519 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;schedule&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;waking up routine &quot;</span> &lt;&lt; waiter<span class="Delimiter">-&gt;</span>id &lt;&lt; <span class="Constant">&quot; because routine &quot;</span> &lt;&lt; waitee<span class="Delimiter">-&gt;</span>id &lt;&lt; <span class="Constant">&quot; is blocked&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L520" class="LineNr">520 </span>      waiter<span class="Delimiter">-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
+<span id="L521" class="LineNr">521 </span>      waiter<span class="Delimiter">-&gt;</span>waiting_on_routine_to_block = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L522" class="LineNr">522 </span>    <span class="Delimiter">}</span>
+<span id="L523" class="LineNr">523 </span>  <span class="Delimiter">}</span>
+<span id="L524" class="LineNr">524 </span><span class="Delimiter">}</span>
+<span id="L525" class="LineNr">525 </span>
+<span id="L526" class="LineNr">526 </span><span class="Comment">//: helper for restarting blocking routines in tests</span>
 <span id="L527" class="LineNr">527 </span>
-<span id="L528" class="LineNr">528 </span><span class="Comment">//: helper for restarting blocking routines in tests</span>
-<span id="L529" class="LineNr">529 </span>
-<span id="L530" class="LineNr">530 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L531" class="LineNr">531 </span>RESTART<span class="Delimiter">,</span>
-<span id="L532" class="LineNr">532 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L533" class="LineNr">533 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;restart&quot;</span><span class="Delimiter">,</span> RESTART<span class="Delimiter">);</span>
-<span id="L534" class="LineNr">534 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L535" class="LineNr">535 </span><span class="Normal">case</span> RESTART: <span class="Delimiter">{</span>
-<span id="L536" class="LineNr">536 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L537" class="LineNr">537 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'restart' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L538" class="LineNr">538 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L539" class="LineNr">539 </span>  <span class="Delimiter">}</span>
-<span id="L540" class="LineNr">540 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L541" class="LineNr">541 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'restart' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L542" class="LineNr">542 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L543" class="LineNr">543 </span>  <span class="Delimiter">}</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L545" class="LineNr">545 </span><span class="Delimiter">}</span>
-<span id="L546" class="LineNr">546 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L547" class="LineNr">547 </span><span class="Normal">case</span> RESTART: <span class="Delimiter">{</span>
-<span id="L548" class="LineNr">548 </span>  <span class="Normal">int</span> id = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L549" class="LineNr">549 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L550" class="LineNr">550 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id == id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L551" class="LineNr">551 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == WAITING<span class="Delimiter">)</span>
-<span id="L552" class="LineNr">552 </span>        Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
-<span id="L553" class="LineNr">553 </span>      Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>blocked = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L554" class="LineNr">554 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L555" class="LineNr">555 </span>    <span class="Delimiter">}</span>
-<span id="L556" class="LineNr">556 </span>  <span class="Delimiter">}</span>
-<span id="L557" class="LineNr">557 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span><span class="Delimiter">}</span>
-<span id="L559" class="LineNr">559 </span>
-<span id="L560" class="LineNr">560 </span><span class="Delimiter">:(scenario cannot_restart_completed_routine)</span>
-<span id="L561" class="LineNr">561 </span><span class="Special">% Scheduling_interval = 1;</span>
-<span id="L562" class="LineNr">562 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L563" class="LineNr">563 </span>  local-scope
-<span id="L564" class="LineNr">564 </span>  <span class="Normal">r</span>:num/routine-id<span class="Special"> &lt;- </span>start-running f
-<span id="L565" class="LineNr">565 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># wait for f to be scheduled</span>
-<span id="L566" class="LineNr">566 </span>  <span class="Comment"># r is COMPLETED by this point</span>
-<span id="L567" class="LineNr">567 </span>  restart r  <span class="Comment"># should have no effect</span>
-<span id="L568" class="LineNr">568 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># give f time to be scheduled (though it shouldn't be)</span>
-<span id="L569" class="LineNr">569 </span>]
-<span id="L570" class="LineNr">570 </span><span class="muRecipe">def</span> f [
-<span id="L571" class="LineNr">571 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">1</span>
-<span id="L572" class="LineNr">572 </span>]
-<span id="L573" class="LineNr">573 </span><span class="Comment"># shouldn't crash</span>
-<span id="L574" class="LineNr">574 </span>
-<span id="L575" class="LineNr">575 </span><span class="Delimiter">:(scenario restart_blocked_routine)</span>
-<span id="L576" class="LineNr">576 </span><span class="Special">% Scheduling_interval = 1;</span>
-<span id="L577" class="LineNr">577 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L578" class="LineNr">578 </span>  local-scope
-<span id="L579" class="LineNr">579 </span>  <span class="Normal">r</span>:num/routine-id<span class="Special"> &lt;- </span>start-running f
-<span id="L580" class="LineNr">580 </span>  wait-<span class="Normal">for</span>-routine-to-block r  <span class="Comment"># get past the block in f below</span>
-<span id="L581" class="LineNr">581 </span>  restart r
-<span id="L582" class="LineNr">582 </span>  wait-<span class="Normal">for</span>-routine-to-block r  <span class="Comment"># should run f to completion</span>
-<span id="L583" class="LineNr">583 </span>]
-<span id="L584" class="LineNr">584 </span><span class="Comment"># function with one block</span>
-<span id="L585" class="LineNr">585 </span><span class="muRecipe">def</span> f [
-<span id="L586" class="LineNr">586 </span>  current-routine-is-blocked
-<span id="L587" class="LineNr">587 </span>  <span class="Comment"># 8 instructions of padding, many more than 'main' above</span>
+<span id="L528" class="LineNr">528 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L529" class="LineNr">529 </span>RESTART<span class="Delimiter">,</span>
+<span id="L530" class="LineNr">530 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L531" class="LineNr">531 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;restart&quot;</span><span class="Delimiter">,</span> RESTART<span class="Delimiter">);</span>
+<span id="L532" class="LineNr">532 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L533" class="LineNr">533 </span><span class="Normal">case</span> RESTART: <span class="Delimiter">{</span>
+<span id="L534" class="LineNr">534 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L535" class="LineNr">535 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'restart' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L536" class="LineNr">536 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L537" class="LineNr">537 </span>  <span class="Delimiter">}</span>
+<span id="L538" class="LineNr">538 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L539" class="LineNr">539 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'restart' should be a routine id generated by 'start-running', but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L540" class="LineNr">540 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L541" class="LineNr">541 </span>  <span class="Delimiter">}</span>
+<span id="L542" class="LineNr">542 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L543" class="LineNr">543 </span><span class="Delimiter">}</span>
+<span id="L544" class="LineNr">544 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L545" class="LineNr">545 </span><span class="Normal">case</span> RESTART: <span class="Delimiter">{</span>
+<span id="L546" class="LineNr">546 </span>  <span class="Normal">int</span> id = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L547" class="LineNr">547 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Routines<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L548" class="LineNr">548 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>id == id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L549" class="LineNr">549 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state == WAITING<span class="Delimiter">)</span>
+<span id="L550" class="LineNr">550 </span>        Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>state = <a href='073scheduler.cc.html#L41'>RUNNING</a><span class="Delimiter">;</span>
+<span id="L551" class="LineNr">551 </span>      Routines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)-&gt;</span>blocked =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L552" class="LineNr">552 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L553" class="LineNr">553 </span>    <span class="Delimiter">}</span>
+<span id="L554" class="LineNr">554 </span>  <span class="Delimiter">}</span>
+<span id="L555" class="LineNr">555 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L556" class="LineNr">556 </span><span class="Delimiter">}</span>
+<span id="L557" class="LineNr">557 </span>
+<span id="L558" class="LineNr">558 </span><span class="Delimiter">:(scenario cannot_restart_completed_routine)</span>
+<span id="L559" class="LineNr">559 </span><span class="Special">% Scheduling_interval = 1;</span>
+<span id="L560" class="LineNr">560 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L561" class="LineNr">561 </span>  local-scope
+<span id="L562" class="LineNr">562 </span>  <span class="Normal">r</span>:num/routine-id<span class="Special"> &lt;- </span>start-running f
+<span id="L563" class="LineNr">563 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># wait for f to be scheduled</span>
+<span id="L564" class="LineNr">564 </span>  <span class="Comment"># r is COMPLETED by this point</span>
+<span id="L565" class="LineNr">565 </span>  restart r  <span class="Comment"># should have no effect</span>
+<span id="L566" class="LineNr">566 </span>  <span class="Normal">x</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># give f time to be scheduled (though it shouldn't be)</span>
+<span id="L567" class="LineNr">567 </span>]
+<span id="L568" class="LineNr">568 </span><span class="muRecipe">def</span> f [
+<span id="L569" class="LineNr">569 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">1</span>
+<span id="L570" class="LineNr">570 </span>]
+<span id="L571" class="LineNr">571 </span><span class="Comment"># shouldn't crash</span>
+<span id="L572" class="LineNr">572 </span>
+<span id="L573" class="LineNr">573 </span><span class="Delimiter">:(scenario restart_blocked_routine)</span>
+<span id="L574" class="LineNr">574 </span><span class="Special">% Scheduling_interval = 1;</span>
+<span id="L575" class="LineNr">575 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L576" class="LineNr">576 </span>  local-scope
+<span id="L577" class="LineNr">577 </span>  <span class="Normal">r</span>:num/routine-id<span class="Special"> &lt;- </span>start-running f
+<span id="L578" class="LineNr">578 </span>  wait-<span class="Normal">for</span>-routine-to-block r  <span class="Comment"># get past the block in f below</span>
+<span id="L579" class="LineNr">579 </span>  restart r
+<span id="L580" class="LineNr">580 </span>  wait-<span class="Normal">for</span>-routine-to-block r  <span class="Comment"># should run f to completion</span>
+<span id="L581" class="LineNr">581 </span>]
+<span id="L582" class="LineNr">582 </span><span class="Comment"># function with one block</span>
+<span id="L583" class="LineNr">583 </span><span class="muRecipe">def</span> f [
+<span id="L584" class="LineNr">584 </span>  current-routine-is-blocked
+<span id="L585" class="LineNr">585 </span>  <span class="Comment"># 8 instructions of padding, many more than 'main' above</span>
+<span id="L586" class="LineNr">586 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L587" class="LineNr">587 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L588" class="LineNr">588 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L589" class="LineNr">589 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L590" class="LineNr">590 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
@@ -656,11 +656,9 @@ if ('onhashchange' in window) {
 <span id="L592" class="LineNr">592 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L593" class="LineNr">593 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
 <span id="L594" class="LineNr">594 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L595" class="LineNr">595 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L596" class="LineNr">596 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">1</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L597" class="LineNr">597 </span>]
-<span id="L598" class="LineNr">598 </span><span class="Comment"># make sure all of f ran</span>
-<span id="L599" class="LineNr">599 </span><span class="traceContains">+mem: storing 8 in location 1</span>
+<span id="L595" class="LineNr">595 </span>]
+<span id="L596" class="LineNr">596 </span><span class="Comment"># make sure all of f ran</span>
+<span id="L597" class="LineNr">597 </span><span class="traceContains">+mem: storing 8 in location 1</span>
 </pre>
 </body>
 </html>
diff --git a/html/075channel.mu.html b/html/075channel.mu.html
index 43180f17..5275ec38 100644
--- a/html/075channel.mu.html
+++ b/html/075channel.mu.html
@@ -15,18 +15,18 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
+.Delimiter { color: #800080; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .CommentedCode { color: #6c6c6c; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -169,7 +169,7 @@ if ('onhashchange' in window) {
 <span id="L106" class="LineNr">106 </span>  <span class="Constant">local-scope</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Constant">load-inputs</span>
 <span id="L108" class="LineNr">108 </span>  assert in, <span class="Constant">[read on null channel]</span>
-<span id="L109" class="LineNr">109 </span>  eof? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>  <span class="Comment"># default result</span>
+<span id="L109" class="LineNr">109 </span>  eof? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>  <span class="Comment"># default result</span>
 <span id="L110" class="LineNr">110 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *in, <span class="Constant">chan:offset</span>
 <span id="L111" class="LineNr">111 </span>  <span class="Comment"># block until lock is acquired AND queue has data</span>
 <span id="L112" class="LineNr">112 </span>  lock:location <span class="Special">&lt;-</span> get-location *chan, <span class="Constant">lock:offset</span>
@@ -390,13 +390,13 @@ if ('onhashchange' in window) {
 <span id="L327" class="LineNr">327 </span>  <span class="Constant">local-scope</span>
 <span id="L328" class="LineNr">328 </span>  <span class="Constant">load-inputs</span>
 <span id="L329" class="LineNr">329 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
-<span id="L330" class="LineNr">330 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
+<span id="L330" class="LineNr">330 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>,<span class="Constant"> true</span>
 <span id="L331" class="LineNr">331 </span>]
 <span id="L332" class="LineNr">332 </span><span class="muRecipe">def</span> close x:&amp;:<a href='075channel.mu.html#L40'>sink</a>:_elem<span class="muRecipe"> -&gt; </span>x:&amp;:<a href='075channel.mu.html#L40'>sink</a>:_elem [
 <span id="L333" class="LineNr">333 </span>  <span class="Constant">local-scope</span>
 <span id="L334" class="LineNr">334 </span>  <span class="Constant">load-inputs</span>
 <span id="L335" class="LineNr">335 </span>  chan:&amp;:channel:_elem <span class="Special">&lt;-</span> get *x, <span class="Constant">chan:offset</span>
-<span id="L336" class="LineNr">336 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>, <span class="Constant">1/true</span>
+<span id="L336" class="LineNr">336 </span>  *chan <span class="Special">&lt;-</span> put *chan, <span class="Constant">closed?:offset</span>,<span class="Constant"> true</span>
 <span id="L337" class="LineNr">337 </span>]
 <span id="L338" class="LineNr">338 </span>
 <span id="L339" class="LineNr">339 </span><span class="Comment"># once a channel is closed from one side, no further operations are expected from that side</span>
@@ -415,7 +415,7 @@ if ('onhashchange' in window) {
 <span id="L352" class="LineNr">352 </span>    <span class="muControl">break-unless</span> closed?
 <span id="L353" class="LineNr">353 </span>    empty-result:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
 <span id="L354" class="LineNr">354 </span>    current-routine-is-unblocked
-<span id="L355" class="LineNr">355 </span>   <span class="muControl"> return</span> *empty-result, <span class="Constant">1/true</span>
+<span id="L355" class="LineNr">355 </span>   <span class="muControl"> return</span> *empty-result,<span class="Constant"> true</span>
 <span id="L356" class="LineNr">356 </span>  <span class="Delimiter">}</span>
 <span id="L357" class="LineNr">357 </span>]
 <span id="L358" class="LineNr">358 </span>
@@ -464,7 +464,7 @@ if ('onhashchange' in window) {
 <span id="L401" class="LineNr">401 </span>  <span class="Constant">local-scope</span>
 <span id="L402" class="LineNr">402 </span>  <span class="Constant">load-inputs</span>
 <span id="L403" class="LineNr">403 </span>  <span class="Comment"># repeat forever</span>
-<span id="L404" class="LineNr">404 </span>  eof?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L404" class="LineNr">404 </span>  eof?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L405" class="LineNr">405 </span>  <span class="Delimiter">{</span>
 <span id="L406" class="LineNr">406 </span>    line:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
 <span id="L407" class="LineNr">407 </span>    <span class="Comment"># read characters from 'in' until newline, copy into line</span>
diff --git a/html/076continuation.cc.html b/html/076continuation.cc.html
index 232fdf84..84764606 100644
--- a/html/076continuation.cc.html
+++ b/html/076continuation.cc.html
@@ -115,42 +115,42 @@ if ('onhashchange' in window) {
 <span id="L52" class="LineNr"> 52 </span><span class="Comment">//:    There should still be no way to lookup addresses that aren't allocated.</span>
 <span id="L53" class="LineNr"> 53 </span>
 <span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before &quot;End Mu Types Initialization&quot;)</span>
-<span id="L55" class="LineNr"> 55 </span><a href='010vm.cc.html#L124'>type_ordinal</a> continuation = Type_ordinal[<span class="Constant">&quot;continuation&quot;</span>] = Next_type_ordinal++<span class="Delimiter">;</span>
+<span id="L55" class="LineNr"> 55 </span><a href='010vm.cc.html#L125'>type_ordinal</a> continuation = Type_ordinal[<span class="Constant">&quot;continuation&quot;</span>] = Next_type_ordinal++<span class="Delimiter">;</span>
 <span id="L56" class="LineNr"> 56 </span>Type[continuation]<span class="Delimiter">.</span>name = <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">;</span>
 <span id="L57" class="LineNr"> 57 </span>
 <span id="L58" class="LineNr"> 58 </span><span class="Comment">//: A continuation can be called like a recipe.</span>
 <span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(before &quot;End <a href='072recipe.cc.html#L335'>is_mu_recipe</a> Atom Cases(r)&quot;)</span>
-<span id="L60" class="LineNr"> 60 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L61" class="LineNr"> 61 </span>
 <span id="L62" class="LineNr"> 62 </span><span class="Comment">//: However, it can't be type-checked like most recipes. Pretend it's like a</span>
 <span id="L63" class="LineNr"> 63 </span><span class="Comment">//: header-less recipe.</span>
 <span id="L64" class="LineNr"> 64 </span><span class="Delimiter">:(after &quot;Begin Reagent-&gt;Recipe(r, recipe_header)&quot;)</span>
 <span id="L65" class="LineNr"> 65 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>atom &amp;&amp; r<span class="Delimiter">.</span>type<span class="Delimiter">-&gt;</span>name == <span class="Constant">&quot;continuation&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L66" class="LineNr"> 66 </span>  result_header<span class="Delimiter">.</span>has_header = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L66" class="LineNr"> 66 </span>  result_header<span class="Delimiter">.</span>has_header =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L67" class="LineNr"> 67 </span>  <span class="Identifier">return</span> result_header<span class="Delimiter">;</span>
 <span id="L68" class="LineNr"> 68 </span><span class="Delimiter">}</span>
 <span id="L69" class="LineNr"> 69 </span>
 <span id="L70" class="LineNr"> 70 </span><span class="Delimiter">:(scenario delimited_continuation)</span>
 <span id="L71" class="LineNr"> 71 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L72" class="LineNr"> 72 </span>  <span class="Constant">1</span>:continuation<span class="Special"> &lt;- </span>call-with-continuation-mark <span class="Constant">233</span>/mark<span class="Delimiter">,</span> f<span class="Delimiter">,</span> <span class="Constant">77</span>  <span class="Comment"># 77 is an argument to f</span>
-<span id="L73" class="LineNr"> 73 </span>  <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">5</span>
 <span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">{</span>
-<span id="L75" class="LineNr"> 75 </span>    <span class="Constant">2</span>:number<span class="Special"> &lt;- </span>call <span class="Constant">1</span>:continuation<span class="Delimiter">,</span> <span class="Constant">2</span>:number  <span class="Comment"># jump to 'return-continuation-until-mark' below</span>
-<span id="L76" class="LineNr"> 76 </span>    <span class="Constant">3</span>:boolean<span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">2</span>:number<span class="Delimiter">,</span> <span class="Constant">8</span>
-<span id="L77" class="LineNr"> 77 </span>    <span class="Identifier">break</span>-<span class="Normal">if</span> <span class="Constant">3</span>:boolean
+<span id="L75" class="LineNr"> 75 </span>    <span class="Constant">2</span>:num<span class="Special"> &lt;- </span>call <span class="Constant">1</span>:continuation<span class="Delimiter">,</span> <span class="Constant">2</span>:num  <span class="Comment"># jump to 'return-continuation-until-mark' below</span>
+<span id="L76" class="LineNr"> 76 </span>    <span class="Constant">3</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>greater-<span class="Normal">or</span>-equal <span class="Constant">2</span>:num<span class="Delimiter">,</span> <span class="Constant">8</span>
+<span id="L77" class="LineNr"> 77 </span>    <span class="Identifier">break</span>-<span class="Normal">if</span> <span class="Constant">3</span>:<span class="Normal">bool</span>
 <span id="L78" class="LineNr"> 78 </span>    loop
 <span id="L79" class="LineNr"> 79 </span>  <span class="Delimiter">}</span>
 <span id="L80" class="LineNr"> 80 </span>]
 <span id="L81" class="LineNr"> 81 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> f [
-<span id="L82" class="LineNr"> 82 </span>  <span class="Constant">11</span>:number<span class="Special"> &lt;- </span>next-ingredient
-<span id="L83" class="LineNr"> 83 </span>  <span class="Constant">12</span>:number<span class="Special"> &lt;- </span>g <span class="Constant">11</span>:number
-<span id="L84" class="LineNr"> 84 </span>  <span class="Identifier">return</span> <span class="Constant">12</span>:number
+<span id="L82" class="LineNr"> 82 </span>  <span class="Constant">11</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L83" class="LineNr"> 83 </span>  <span class="Constant">12</span>:num<span class="Special"> &lt;- </span>g <span class="Constant">11</span>:num
+<span id="L84" class="LineNr"> 84 </span>  <span class="Identifier">return</span> <span class="Constant">12</span>:num
 <span id="L85" class="LineNr"> 85 </span>]
 <span id="L86" class="LineNr"> 86 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> g [
-<span id="L87" class="LineNr"> 87 </span>  <span class="Constant">21</span>:number<span class="Special"> &lt;- </span>next-ingredient
-<span id="L88" class="LineNr"> 88 </span>  <span class="Constant">22</span>:number<span class="Special"> &lt;- </span><span class="Identifier">return</span>-continuation-until-mark <span class="Constant">233</span>/mark
-<span id="L89" class="LineNr"> 89 </span>  <span class="Constant">23</span>:number<span class="Special"> &lt;- </span>add <span class="Constant">22</span>:number<span class="Delimiter">,</span> <span class="Constant">1</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">return</span> <span class="Constant">23</span>:number
+<span id="L87" class="LineNr"> 87 </span>  <span class="Constant">21</span>:num<span class="Special"> &lt;- </span>next-ingredient
+<span id="L88" class="LineNr"> 88 </span>  <span class="Constant">22</span>:num<span class="Special"> &lt;- </span><span class="Identifier">return</span>-continuation-until-mark <span class="Constant">233</span>/mark
+<span id="L89" class="LineNr"> 89 </span>  <span class="Constant">23</span>:num<span class="Special"> &lt;- </span>add <span class="Constant">22</span>:num<span class="Delimiter">,</span> <span class="Constant">1</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">return</span> <span class="Constant">23</span>:num
 <span id="L91" class="LineNr"> 91 </span>]
 <span id="L92" class="LineNr"> 92 </span><span class="Comment"># first call of 'g' executes the part before return-continuation-until-mark</span>
 <span id="L93" class="LineNr"> 93 </span><span class="traceContains">+mem: storing 77 in location 21</span>
@@ -187,7 +187,7 @@ if ('onhashchange' in window) {
 <span id="L124" class="LineNr">124 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L125" class="LineNr">125 </span><span class="Normal">case</span> CALL_WITH_CONTINUATION_MARK: <span class="Delimiter">{</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &lt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L127" class="LineNr">127 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires at least two ingredients: a mark number and a <a href='010vm.cc.html#L19'>recipe</a> to call</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L127" class="LineNr">127 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires at least two ingredients: a mark number and a <a href='010vm.cc.html#L19'>recipe</a> to call</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L128" class="LineNr">128 </span>  <span class="Delimiter">}</span>
 <span id="L129" class="LineNr">129 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L130" class="LineNr">130 </span><span class="Delimiter">}</span>
@@ -197,10 +197,10 @@ if ('onhashchange' in window) {
 <span id="L134" class="LineNr">134 </span>  <span class="Comment">// before pushing the next one on it</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L136" class="LineNr">136 </span>    ++Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;delimited continuation; incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L137" class="LineNr">137 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;delimited continuation; incrementing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L138" class="LineNr">138 </span>    assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
 <span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
-<span id="L140" class="LineNr">140 </span>  <a href='010vm.cc.html#L32'>instruction</a><span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> caller_instruction = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">();</span>
+<span id="L140" class="LineNr">140 </span>  <a href='010vm.cc.html#L33'>instruction</a><span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> caller_instruction = <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">();</span>
 <span id="L141" class="LineNr">141 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>front<span class="Delimiter">().</span>continuation_mark_tag = <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>
 <span id="L142" class="LineNr">142 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)));</span>
 <span id="L143" class="LineNr">143 </span>  <span class="Comment">// drop the mark</span>
@@ -215,7 +215,7 @@ if ('onhashchange' in window) {
 <span id="L152" class="LineNr">152 </span>
 <span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario next_ingredient_inside_continuation)</span>
 <span id="L154" class="LineNr">154 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L155" class="LineNr">155 </span>  call-with-continuation-mark <span class="Constant">233</span>/mark<span class="Delimiter">,</span> f<span class="Delimiter">,</span> <span class="Constant">1</span>/<span class="Constant">true</span>
+<span id="L155" class="LineNr">155 </span>  call-with-continuation-mark <span class="Constant">233</span>/mark<span class="Delimiter">,</span> f<span class="Delimiter">,</span><span class="Constant"> true</span>
 <span id="L156" class="LineNr">156 </span>]
 <span id="L157" class="LineNr">157 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> f [
 <span id="L158" class="LineNr">158 </span>  <span class="Constant">10</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-input
@@ -225,7 +225,7 @@ if ('onhashchange' in window) {
 <span id="L162" class="LineNr">162 </span><span class="Delimiter">:(scenario delimited_continuation_out_of_recipe_variable)</span>
 <span id="L163" class="LineNr">163 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> <a href='000organization.cc.html#L113'>main</a> [
 <span id="L164" class="LineNr">164 </span>  <span class="Normal">x</span>:<a href='010vm.cc.html#L19'>recipe</a><span class="Special"> &lt;- </span>copy f
-<span id="L165" class="LineNr">165 </span>  call-with-continuation-mark <span class="Constant">233</span>/mark<span class="Delimiter">,</span> x<span class="Delimiter">,</span> <span class="Constant">1</span>/<span class="Constant">true</span>
+<span id="L165" class="LineNr">165 </span>  call-with-continuation-mark <span class="Constant">233</span>/mark<span class="Delimiter">,</span> x<span class="Delimiter">,</span><span class="Constant"> true</span>
 <span id="L166" class="LineNr">166 </span>]
 <span id="L167" class="LineNr">167 </span><span class="muRecipe"><a href='010vm.cc.html#L19'>recipe</a></span> f [
 <span id="L168" class="LineNr">168 </span>  <span class="Constant">10</span>:<span class="Normal">bool</span><span class="Special"> &lt;- </span>next-input
@@ -239,7 +239,7 @@ if ('onhashchange' in window) {
 <span id="L176" class="LineNr">176 </span><span class="Normal">struct</span> delimited_continuation <span class="Delimiter">{</span>
 <span id="L177" class="LineNr">177 </span>  call_stack frames<span class="Delimiter">;</span>
 <span id="L178" class="LineNr">178 </span>  <span class="Normal">int</span> nrefs<span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>  delimited_continuation<span class="Delimiter">(</span>call_stack::iterator begin<span class="Delimiter">,</span> call_stack::iterator <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">)</span> :frames<span class="Delimiter">(</span>call_stack<span class="Delimiter">(</span>begin<span class="Delimiter">,</span> <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">)),</span> nrefs<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L179" class="LineNr">179 </span>  delimited_continuation<span class="Delimiter">(</span>call_stack::iterator begin<span class="Delimiter">,</span> call_stack::iterator <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">)</span> :frames<span class="Delimiter">(</span>call_stack<span class="Delimiter">(</span>begin<span class="Delimiter">,</span> <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">)),</span> nrefs<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
 <span id="L180" class="LineNr">180 </span><span class="Delimiter">};</span>
 <span id="L181" class="LineNr">181 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
 <span id="L182" class="LineNr">182 </span>map&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">,</span> delimited_continuation&gt; Delimited_continuation<span class="Delimiter">;</span>
@@ -255,7 +255,7 @@ if ('onhashchange' in window) {
 <span id="L192" class="LineNr">192 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L193" class="LineNr">193 </span><span class="Normal">case</span> RETURN_CONTINUATION_UNTIL_MARK: <span class="Delimiter">{</span>
 <span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L195" class="LineNr">195 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires at least one ingredient: a mark tag (number)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L195" class="LineNr">195 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' requires at least one ingredient: a mark tag (number)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L196" class="LineNr">196 </span>  <span class="Delimiter">}</span>
 <span id="L197" class="LineNr">197 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L198" class="LineNr">198 </span><span class="Delimiter">}</span>
@@ -269,14 +269,14 @@ if ('onhashchange' in window) {
 <span id="L206" class="LineNr">206 </span>  <span class="Comment">// copy the current call stack until the most recent marked call</span>
 <span id="L207" class="LineNr">207 </span>  call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp;<span class="Delimiter">,</span> <span class="Normal">int</span><span class="Delimiter">);</span>  <span class="Comment">// manual prototype containing '::'</span>
 <span id="L208" class="LineNr">208 </span>  call_stack::iterator base = find_base_of_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">mark tag</span><span class="Comment">*/</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>
-<span id="L209" class="LineNr">209 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L210" class="LineNr">210 </span>    <a href='003trace.cc.html#L174'>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;couldn't find a 'call-with-continuation-mark' to return to with tag &quot;</span> &lt;&lt; current_instruction<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="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L174'>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;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L212" class="LineNr">212 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L213" class="LineNr">213 </span>      <a href='003trace.cc.html#L174'>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;  &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base == Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L210" class="LineNr">210 </span>    <a href='003trace.cc.html#L197'>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;couldn't find a 'call-with-continuation-mark' to return to with tag &quot;</span> &lt;&lt; current_instruction<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="cSpecial">'\n'</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L197'>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;call stack:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L212" class="LineNr">212 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L213" class="LineNr">213 </span>      <a href='003trace.cc.html#L197'>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;  &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>running_recipe<span class="Delimiter">).</span>name &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L214" class="LineNr">214 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L215" class="LineNr">215 </span>  <span class="Delimiter">}</span>
-<span id="L216" class="LineNr">216 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L216" class="LineNr">216 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;creating continuation &quot;</span> &lt;&lt; Next_delimited_continuation_id &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L217" class="LineNr">217 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> Next_delimited_continuation_id<span class="Delimiter">,</span> delimited_continuation<span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> base<span class="Delimiter">));</span>
 <span id="L218" class="LineNr">218 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != base<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L219" class="LineNr">219 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -289,16 +289,16 @@ if ('onhashchange' in window) {
 <span id="L226" class="LineNr">226 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L227" class="LineNr">227 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>Next_delimited_continuation_id<span class="Delimiter">);</span>
 <span id="L228" class="LineNr">228 </span>  <span class="Comment">// return any other ingredients passed in</span>
-<span id="L229" class="LineNr">229 </span>  copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark tag</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()));</span>
+<span id="L229" class="LineNr">229 </span>  copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark tag</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()));</span>
 <span id="L230" class="LineNr">230 </span>  ++Next_delimited_continuation_id<span class="Delimiter">;</span>
 <span id="L231" class="LineNr">231 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// continue to process rest of marked call</span>
 <span id="L232" class="LineNr">232 </span><span class="Delimiter">}</span>
 <span id="L233" class="LineNr">233 </span>
 <span id="L234" class="LineNr">234 </span><span class="Delimiter">:(code)</span>
 <span id="L235" class="LineNr">235 </span>call_stack::iterator find_base_of_continuation<span class="Delimiter">(</span>call_stack&amp; c<span class="Delimiter">,</span> <span class="Normal">int</span> mark_tag<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L236" class="LineNr">236 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::iterator p = c<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != c<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
 <span id="L237" class="LineNr">237 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>continuation_mark_tag == mark_tag<span class="Delimiter">)</span> <span class="Identifier">return</span> p<span class="Delimiter">;</span>
-<span id="L238" class="LineNr">238 </span>  <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L238" class="LineNr">238 </span>  <span class="Identifier">return</span> c<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L239" class="LineNr">239 </span><span class="Delimiter">}</span>
 <span id="L240" class="LineNr">240 </span>
 <span id="L241" class="LineNr">241 </span><span class="Comment">//: overload 'call' for continuations</span>
@@ -306,19 +306,19 @@ if ('onhashchange' in window) {
 <span id="L243" class="LineNr">243 </span><span class="Normal">if</span> <span class="Delimiter">(</span>is_mu_continuation<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> <span class="Delimiter">{</span>
 <span id="L244" class="LineNr">244 </span>  <span class="Comment">// copy multiple calls on to current call stack</span>
 <span id="L245" class="LineNr">245 </span>  assert<span class="Delimiter">(</span>scalar<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="L246" class="LineNr">246 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L246" class="LineNr">246 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling continuation &quot;</span> &lt;&lt; ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L247" class="LineNr">247 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)))</span>
-<span id="L248" class="LineNr">248 </span>    <a href='003trace.cc.html#L174'>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;no such delimited continuation &quot;</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>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L248" class="LineNr">248 </span>    <a href='003trace.cc.html#L197'>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;no such delimited continuation &quot;</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>original_string &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L249" class="LineNr">249 </span>  <span class="Normal">const</span> call_stack&amp; new_frames = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)).</span>frames<span class="Delimiter">;</span>
 <span id="L250" class="LineNr">250 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>call_stack::const_reverse_iterator p = new_frames<span class="Delimiter">.</span>rbegin<span class="Delimiter">();</span> p != new_frames<span class="Delimiter">.</span>rend<span class="Delimiter">();</span> ++p<span class="Delimiter">)</span>
 <span id="L251" class="LineNr">251 </span>    Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>*p<span class="Delimiter">);</span>
 <span id="L252" class="LineNr">252 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L253" class="LineNr">253 </span>    Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth += <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>new_frames<span class="Delimiter">);</span>
-<span id="L254" class="LineNr">254 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L254" class="LineNr">254 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;calling delimited continuation; growing callstack depth to &quot;</span> &lt;&lt; Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L255" class="LineNr">255 </span>    assert<span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
 <span id="L256" class="LineNr">256 </span>  <span class="Delimiter">}</span>
 <span id="L257" class="LineNr">257 </span>  <span class="Comment">// no call housekeeping; continuations don't support next-ingredient</span>
-<span id="L258" class="LineNr">258 </span>  copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">drop continuation</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
+<span id="L258" class="LineNr">258 </span>  copy<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">drop continuation</span><span class="Comment">*/</span>++ingredients<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> ingredients<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">(),</span> inserter<span class="Delimiter">(</span>products<span class="Delimiter">,</span> products<span class="Delimiter">.</span>begin<span class="Delimiter">()));</span>
 <span id="L259" class="LineNr">259 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// record results of resuming 'return-continuation-until-mark' instruction</span>
 <span id="L260" class="LineNr">260 </span><span class="Delimiter">}</span>
 <span id="L261" class="LineNr">261 </span>
@@ -379,7 +379,7 @@ if ('onhashchange' in window) {
 <span id="L316" class="LineNr">316 </span><span class="Delimiter">}</span>
 <span id="L317" class="LineNr">317 </span><span class="Delimiter">:(code)</span>
 <span id="L318" class="LineNr">318 </span><span class="Normal">void</span> resolve_indirect_continuation_call<span class="Delimiter">(</span><span class="Normal">const</span> <a href='010vm.cc.html#L14'>recipe_ordinal</a> r<span class="Delimiter">,</span> <span class="Normal">int</span> index<span class="Delimiter">,</span> instruction&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> recipe&amp; caller_recipe<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L319" class="LineNr">319 </span>  <a href='010vm.cc.html#L32'>instruction</a> inst2<span class="Delimiter">;</span>
+<span id="L319" class="LineNr">319 </span>  <a href='010vm.cc.html#L33'>instruction</a> inst2<span class="Delimiter">;</span>
 <span id="L320" class="LineNr">320 </span>  inst2<span class="Delimiter">.</span>name = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L321" class="LineNr">321 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip mark and <a href='010vm.cc.html#L19'>recipe</a></span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
 <span id="L322" class="LineNr">322 </span>    inst2<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
@@ -387,7 +387,7 @@ if ('onhashchange' in window) {
 <span id="L324" class="LineNr">324 </span>    inst2<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
 <span id="L325" class="LineNr">325 </span>  <a href='054static_dispatch.cc.html#L173'>resolve_ambiguous_call</a><span class="Delimiter">(</span>r<span class="Delimiter">,</span> index<span class="Delimiter">,</span> inst2<span class="Delimiter">,</span> caller_recipe<span class="Delimiter">);</span>
 <span id="L326" class="LineNr">326 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">).</span>name = inst2<span class="Delimiter">.</span>name<span class="Delimiter">;</span>
-<span id="L327" class="LineNr">327 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst2<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
+<span id="L327" class="LineNr">327 </span>  inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip mark</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> inst2<span class="Delimiter">.</span>name<span class="Delimiter">));</span>
 <span id="L328" class="LineNr">328 </span><span class="Delimiter">}</span>
 <span id="L329" class="LineNr">329 </span>
 <span id="L330" class="LineNr">330 </span><span class="Delimiter">:(scenario call_shape_shifting_recipe_with_continuation_mark_and_no_outputs)</span>
@@ -423,13 +423,13 @@ if ('onhashchange' in window) {
 <span id="L360" class="LineNr">360 </span><span class="Delimiter">}</span>
 <span id="L361" class="LineNr">361 </span>
 <span id="L362" class="LineNr">362 </span><span class="Comment">// helper for debugging</span>
-<span id="L363" class="LineNr">363 </span><span class="Normal">void</span> <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">int</span> continuation_id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L363" class="LineNr">363 </span><span class="Normal">void</span> dump<span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">int</span> continuation_id<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L364" class="LineNr">364 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L365" class="LineNr">365 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;missing delimited continuation: &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L365" class="LineNr">365 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;missing delimited continuation: &quot;</span> &lt;&lt; continuation_id &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L366" class="LineNr">366 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L367" class="LineNr">367 </span>  <span class="Delimiter">}</span>
 <span id="L368" class="LineNr">368 </span>  delimited_continuation&amp; curr = get<span class="Delimiter">(</span>Delimited_continuation<span class="Delimiter">,</span> continuation_id<span class="Delimiter">);</span>
-<span id="L369" class="LineNr">369 </span>  <a href='003trace.cc.html#L120'>dump</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span>frames<span class="Delimiter">);</span>
+<span id="L369" class="LineNr">369 </span>  dump<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>frames<span class="Delimiter">);</span>
 <span id="L370" class="LineNr">370 </span><span class="Delimiter">}</span>
 </pre>
 </body>
diff --git a/html/080display.cc.html b/html/080display.cc.html
index 38c3adc9..7ae6032a 100644
--- a/html/080display.cc.html
+++ b/html/080display.cc.html
@@ -23,7 +23,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -70,22 +69,22 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span><span class="Normal">int</span> Display_column = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L10" class="LineNr"> 10 </span>
 <span id="L11" class="LineNr"> 11 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L12" class="LineNr"> 12 </span><span class="PreProc">#define CHECK_SCREEN \</span>
-<span id="L13" class="LineNr"> 13 </span><span class="PreProc">    </span><span class="Normal">if</span><span class="PreProc"> (!tb_is_active()) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L14" class="LineNr"> 14 </span><span class="PreProc">      </span><span class="Normal">if</span><span class="PreProc"> (Run_tests) \</span>
-<span id="L15" class="LineNr"> 15 </span><span class="PreProc">        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; maybe(current_recipe_name()) &lt;&lt; </span><span class="Constant">&quot;tried to print to real screen in a test!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="PreProc"> &lt;&lt; end()</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L16" class="LineNr"> 16 </span><span class="PreProc">      </span><span class="Normal">else</span><span class="PreProc"> \</span>
-<span id="L17" class="LineNr"> 17 </span><span class="PreProc">        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; maybe(current_recipe_name()) &lt;&lt; </span><span class="Constant">&quot;tried to print to real screen before 'open-console' or after 'close-console'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="PreProc"> &lt;&lt; end()</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L18" class="LineNr"> 18 </span><span class="PreProc">      </span><span class="Identifier">break</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L19" class="LineNr"> 19 </span><span class="PreProc">    </span><span class="Delimiter">}</span>
-<span id="L20" class="LineNr"> 20 </span><span class="PreProc">#define CHECK_CONSOLE \</span>
-<span id="L21" class="LineNr"> 21 </span><span class="PreProc">    </span><span class="Normal">if</span><span class="PreProc"> (!tb_is_active()) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L22" class="LineNr"> 22 </span><span class="PreProc">      </span><span class="Normal">if</span><span class="PreProc"> (Run_tests) \</span>
-<span id="L23" class="LineNr"> 23 </span><span class="PreProc">        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; maybe(current_recipe_name()) &lt;&lt; </span><span class="Constant">&quot;tried to read event from real keyboard/mouse in a test!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="PreProc"> &lt;&lt; end()</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L24" class="LineNr"> 24 </span><span class="PreProc">      </span><span class="Normal">else</span><span class="PreProc"> \</span>
-<span id="L25" class="LineNr"> 25 </span><span class="PreProc">        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; maybe(current_recipe_name()) &lt;&lt; </span><span class="Constant">&quot;tried to read event from real keyboard/mouse before 'open-console' or after 'close-console'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="PreProc"> &lt;&lt; end()</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L26" class="LineNr"> 26 </span><span class="PreProc">      </span><span class="Identifier">break</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L27" class="LineNr"> 27 </span><span class="PreProc">    </span><span class="Delimiter">}</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment">#define CHECK_SCREEN \</span>
+<span id="L13" class="LineNr"> 13 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Delimiter">{</span> \
+<span id="L14" class="LineNr"> 14 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> \
+<span id="L15" class="LineNr"> 15 </span>        <a href='003trace.cc.html#L197'>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 print to real screen in a test!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> \
+<span id="L16" class="LineNr"> 16 </span>      <span class="Normal">else</span> \
+<span id="L17" class="LineNr"> 17 </span>        <a href='003trace.cc.html#L197'>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 print to real screen before 'open-console' or after 'close-console'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> \
+<span id="L18" class="LineNr"> 18 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span> \
+<span id="L19" class="LineNr"> 19 </span>    <span class="Delimiter">}</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Comment">#define CHECK_CONSOLE \</span>
+<span id="L21" class="LineNr"> 21 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!tb_is_active<span class="Delimiter">())</span> <span class="Delimiter">{</span> \
+<span id="L22" class="LineNr"> 22 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Run_tests<span class="Delimiter">)</span> \
+<span id="L23" class="LineNr"> 23 </span>        <a href='003trace.cc.html#L197'>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 read event from real keyboard/mouse in a test!</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> \
+<span id="L24" class="LineNr"> 24 </span>      <span class="Normal">else</span> \
+<span id="L25" class="LineNr"> 25 </span>        <a href='003trace.cc.html#L197'>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 read event from real keyboard/mouse before 'open-console' or after 'close-console'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> \
+<span id="L26" class="LineNr"> 26 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span> \
+<span id="L27" class="LineNr"> 27 </span>    <span class="Delimiter">}</span>
 <span id="L28" class="LineNr"> 28 </span>
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L30" class="LineNr"> 30 </span>OPEN_CONSOLE<span class="Delimiter">,</span>
@@ -104,9 +103,9 @@ if ('onhashchange' in window) {
 <span id="L43" class="LineNr"> 43 </span>  <span class="Normal">int</span> height = tb_height<span class="Delimiter">();</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>width &gt; <span class="Constant">222</span> || height &gt; <span class="Constant">222</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L45" class="LineNr"> 45 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>width &gt; <span class="Constant">222</span><span class="Delimiter">)</span>
-<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows wider than 222 characters in console mode. Please resize your window.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L46" class="LineNr"> 46 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows wider than 222 characters in console mode. Please resize your window.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L47" class="LineNr"> 47 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>height &gt; <span class="Constant">222</span><span class="Delimiter">)</span>
-<span id="L48" class="LineNr"> 48 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows taller than 222 characters in console mode. Please resize your window.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L48" class="LineNr"> 48 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;sorry, Mu doesn't support windows taller than 222 characters in console mode. Please resize your window.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L49" class="LineNr"> 49 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Delimiter">}</span>
 <span id="L51" class="LineNr"> 51 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -149,22 +148,22 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L89" class="LineNr"> 89 </span><span class="Normal">case</span> PRINT_CHARACTER_TO_DISPLAY: <span class="Delimiter">{</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L91" class="LineNr"> 91 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'print-character-to-display' requires at least one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'print-character-to-display' requires at least one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L92" class="LineNr"> 92 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Delimiter">}</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'print-character-to-display' should be a character, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'print-character-to-display' should be a character, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L96" class="LineNr"> 96 </span>    <span class="Identifier">break</span><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">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L99" class="LineNr"> 99 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L100" class="LineNr">100 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'print-character-to-display' should be a foreground color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'print-character-to-display' should be a foreground color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L101" class="LineNr">101 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L102" class="LineNr">102 </span>    <span class="Delimiter">}</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Delimiter">}</span>
 <span id="L104" class="LineNr">104 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> &gt; <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L105" class="LineNr">105 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L106" class="LineNr">106 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;third ingredient of 'print-character-to-display' should be a background color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L106" class="LineNr">106 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;third ingredient of 'print-character-to-display' should be a background color number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L107" class="LineNr">107 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L108" class="LineNr">108 </span>    <span class="Delimiter">}</span>
 <span id="L109" class="LineNr">109 </span>  <span class="Delimiter">}</span>
@@ -231,15 +230,15 @@ if ('onhashchange' in window) {
 <span id="L170" class="LineNr">170 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L171" class="LineNr">171 </span><span class="Normal">case</span> MOVE_CURSOR_ON_DISPLAY: <span class="Delimiter">{</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'move-cursor-on-display' requires two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'move-cursor-on-display' requires two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L174" class="LineNr">174 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L175" class="LineNr">175 </span>  <span class="Delimiter">}</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'move-cursor-on-display' should be a row number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'move-cursor-on-display' should be a row number, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L178" class="LineNr">178 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L179" class="LineNr">179 </span>  <span class="Delimiter">}</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L181" class="LineNr">181 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'move-cursor-on-display' should be a column number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'move-cursor-on-display' should be a column number, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L182" class="LineNr">182 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L183" class="LineNr">183 </span>  <span class="Delimiter">}</span>
 <span id="L184" class="LineNr">184 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
diff --git a/html/081print.mu.html b/html/081print.mu.html
index 889eab31..20ab6cf3 100644
--- a/html/081print.mu.html
+++ b/html/081print.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .CommentedCode { color: #6c6c6c; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -101,7 +101,7 @@ if ('onhashchange' in window) {
 <span id="L39" class="LineNr"> 39 </span>  assert non-zero-height?, <span class="Constant">[screen can't have zero height]</span>
 <span id="L40" class="LineNr"> 40 </span>  bufsize:num <span class="Special">&lt;-</span> multiply w, h
 <span id="L41" class="LineNr"> 41 </span>  data:&amp;:@:<a href='081print.mu.html#L27'>screen-cell</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='081print.mu.html#L27'>screen-cell</a>:type</span>, bufsize
-<span id="L42" class="LineNr"> 42 </span>  *result <span class="Special">&lt;-</span> merge h/num-rows, w/num-columns, <span class="Constant">0/cursor-row</span>, <span class="Constant">0/cursor-column</span>, data, <span class="Constant">0/pending-scroll?</span>, <span class="Constant">0/top-idx</span>
+<span id="L42" class="LineNr"> 42 </span>  *result <span class="Special">&lt;-</span> merge h/num-rows, w/num-columns, <span class="Constant">0/cursor-row</span>, <span class="Constant">0/cursor-column</span>, data,<span class="Constant"> false/pending-scroll?,</span> <span class="Constant">0/top-idx</span>
 <span id="L43" class="LineNr"> 43 </span>  result <span class="Special">&lt;-</span> <a href='081print.mu.html#L46'>clear-screen</a> result
 <span id="L44" class="LineNr"> 44 </span>]
 <span id="L45" class="LineNr"> 45 </span>
@@ -137,7 +137,7 @@ if ('onhashchange' in window) {
 <span id="L75" class="LineNr"> 75 </span>  <span class="Constant">local-scope</span>
 <span id="L76" class="LineNr"> 76 </span>  <span class="Constant">load-inputs</span>
 <span id="L77" class="LineNr"> 77 </span><span class="CommentedCode">#?   stash [fake-screen-is-empty?]</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">1/true</span>  <span class="Comment"># do nothing for real screens</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="muControl">return-unless</span> <a href='081print.mu.html#L16'>screen</a>,<span class="Constant"> true</span>  <span class="Comment"># do nothing for real screens</span>
 <span id="L79" class="LineNr"> 79 </span>  buf:&amp;:@:<a href='081print.mu.html#L27'>screen-cell</a> <span class="Special">&lt;-</span> get *screen, <span class="Constant">data:offset</span>
 <span id="L80" class="LineNr"> 80 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L81" class="LineNr"> 81 </span>  len:num <span class="Special">&lt;-</span> length *buf
@@ -149,9 +149,9 @@ if ('onhashchange' in window) {
 <span id="L87" class="LineNr"> 87 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
 <span id="L88" class="LineNr"> 88 </span>    <span class="muControl">loop-unless</span> curr-contents
 <span id="L89" class="LineNr"> 89 </span>    <span class="Comment"># not 0</span>
-<span id="L90" class="LineNr"> 90 </span>   <span class="muControl"> return</span> <span class="Constant">0/false</span>
+<span id="L90" class="LineNr"> 90 </span>   <span class="muControl"> return</span><span class="Constant"> false</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Delimiter">}</span>
-<span id="L92" class="LineNr"> 92 </span> <span class="muControl"> return</span> <span class="Constant">1/true</span>
+<span id="L92" class="LineNr"> 92 </span> <span class="muControl"> return</span><span class="Constant"> true</span>
 <span id="L93" class="LineNr"> 93 </span>]
 <span id="L94" class="LineNr"> 94 </span>
 <span id="L95" class="LineNr"> 95 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, c:char<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
@@ -212,7 +212,7 @@ if ('onhashchange' in window) {
 <span id="L150" class="LineNr">150 </span>    <span class="muControl">break-unless</span> pending-scroll?
 <span id="L151" class="LineNr">151 </span><span class="CommentedCode">#?     stash [scroll]</span>
 <span id="L152" class="LineNr">152 </span>    <a href='081print.mu.html#L225'>scroll-fake-screen</a> <a href='081print.mu.html#L16'>screen</a>
-<span id="L153" class="LineNr">153 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>, <span class="Constant">0/false</span>
+<span id="L153" class="LineNr">153 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>,<span class="Constant"> false</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
 <span id="L155" class="LineNr">155 </span><span class="CommentedCode">#?     $print [print-character (], row, [, ], column, [): ], c, 10/newline</span>
 <span id="L156" class="LineNr">156 </span>  <span class="Comment"># special-case: newline</span>
@@ -258,7 +258,7 @@ if ('onhashchange' in window) {
 <span id="L196" class="LineNr">196 </span>    <span class="muControl">break-unless</span> past-bottom?
 <span id="L197" class="LineNr">197 </span>    <span class="Comment"># queue up a scroll</span>
 <span id="L198" class="LineNr">198 </span><span class="CommentedCode">#?     stash [pending scroll]</span>
-<span id="L199" class="LineNr">199 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>, <span class="Constant">1/true</span>
+<span id="L199" class="LineNr">199 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>,<span class="Constant"> true</span>
 <span id="L200" class="LineNr">200 </span>    row <span class="Special">&lt;-</span> subtract row,<span class="Constant"> 1</span>  <span class="Comment"># update cursor as if scroll already happened</span>
 <span id="L201" class="LineNr">201 </span>  <span class="Delimiter">}</span>
 <span id="L202" class="LineNr">202 </span>  *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">cursor-row:offset</span>, row
@@ -517,7 +517,7 @@ if ('onhashchange' in window) {
 <span id="L455" class="LineNr">455 </span>    10:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">cursor-row:offset</span>
 <span id="L456" class="LineNr">456 </span>    11:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">cursor-column:offset</span>
 <span id="L457" class="LineNr">457 </span>    12:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">top-idx:offset</span>
-<span id="L458" class="LineNr">458 </span>    13:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">pending-scroll?:offset</span>
+<span id="L458" class="LineNr">458 </span>    13:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">pending-scroll?:offset</span>
 <span id="L459" class="LineNr">459 </span>    cell:&amp;:@:<a href='081print.mu.html#L27'>screen-cell</a> <span class="Special">&lt;-</span> get *fake-screen, <span class="Constant">data:offset</span>
 <span id="L460" class="LineNr">460 </span>    20:@:<a href='081print.mu.html#L27'>screen-cell</a>/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *cell
 <span id="L461" class="LineNr">461 </span>  ]
@@ -669,7 +669,7 @@ if ('onhashchange' in window) {
 <span id="L607" class="LineNr">607 </span>    scroll?:bool <span class="Special">&lt;-</span> greater-or-equal new-column, width
 <span id="L608" class="LineNr">608 </span>    <span class="muControl">break-if</span> scroll?
 <span id="L609" class="LineNr">609 </span><span class="CommentedCode">#?     stash [resetting pending-scroll?]</span>
-<span id="L610" class="LineNr">610 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>, <span class="Constant">0/false</span>
+<span id="L610" class="LineNr">610 </span>    *screen <span class="Special">&lt;-</span> put *screen, <span class="Constant">pending-scroll?:offset</span>,<span class="Constant"> false</span>
 <span id="L611" class="LineNr">611 </span>  <span class="Delimiter">}</span>
 <span id="L612" class="LineNr">612 </span>]
 <span id="L613" class="LineNr">613 </span>
@@ -946,28 +946,34 @@ if ('onhashchange' in window) {
 <span id="L884" class="LineNr">884 </span>    <span class="muControl">break-if</span> bg-color-found?
 <span id="L885" class="LineNr">885 </span>    bg-color <span class="Special">&lt;-</span> copy <span class="Constant">0/black</span>
 <span id="L886" class="LineNr">886 </span>  <span class="Delimiter">}</span>
-<span id="L887" class="LineNr">887 </span>  n2:num <span class="Special">&lt;-</span> copy n
-<span id="L888" class="LineNr">888 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='081print.mu.html#L16'>screen</a>, n2, color, bg-color
-<span id="L889" class="LineNr">889 </span>]
-<span id="L890" class="LineNr">890 </span>
-<span id="L891" class="LineNr">891 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:&amp;:_elem<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
-<span id="L892" class="LineNr">892 </span>  <span class="Constant">local-scope</span>
-<span id="L893" class="LineNr">893 </span>  <span class="Constant">load-inputs</span>
-<span id="L894" class="LineNr">894 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
-<span id="L895" class="LineNr">895 </span>  <span class="Delimiter">{</span>
-<span id="L896" class="LineNr">896 </span>    <span class="Comment"># default color to white</span>
-<span id="L897" class="LineNr">897 </span>    <span class="muControl">break-if</span> color-found?
-<span id="L898" class="LineNr">898 </span>    color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
-<span id="L899" class="LineNr">899 </span>  <span class="Delimiter">}</span>
-<span id="L900" class="LineNr">900 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
+<span id="L887" class="LineNr">887 </span>  <span class="Delimiter">{</span>
+<span id="L888" class="LineNr">888 </span>    <span class="muControl">break-if</span> n
+<span id="L889" class="LineNr">889 </span>    <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[false]</span>, color, bg-color
+<span id="L890" class="LineNr">890 </span>  <span class="Delimiter">}</span>
+<span id="L891" class="LineNr">891 </span>  <span class="Delimiter">{</span>
+<span id="L892" class="LineNr">892 </span>    <span class="muControl">break-unless</span> n
+<span id="L893" class="LineNr">893 </span>    <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[true]</span>, color, bg-color
+<span id="L894" class="LineNr">894 </span>  <span class="Delimiter">}</span>
+<span id="L895" class="LineNr">895 </span>]
+<span id="L896" class="LineNr">896 </span>
+<span id="L897" class="LineNr">897 </span><span class="muRecipe">def</span> print <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a>, n:&amp;:_elem<span class="muRecipe"> -&gt; </span><a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
+<span id="L898" class="LineNr">898 </span>  <span class="Constant">local-scope</span>
+<span id="L899" class="LineNr">899 </span>  <span class="Constant">load-inputs</span>
+<span id="L900" class="LineNr">900 </span>  color:num, color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
 <span id="L901" class="LineNr">901 </span>  <span class="Delimiter">{</span>
-<span id="L902" class="LineNr">902 </span>    <span class="Comment"># default bg-color to black</span>
-<span id="L903" class="LineNr">903 </span>    <span class="muControl">break-if</span> bg-color-found?
-<span id="L904" class="LineNr">904 </span>    bg-color <span class="Special">&lt;-</span> copy <span class="Constant">0/black</span>
+<span id="L902" class="LineNr">902 </span>    <span class="Comment"># default color to white</span>
+<span id="L903" class="LineNr">903 </span>    <span class="muControl">break-if</span> color-found?
+<span id="L904" class="LineNr">904 </span>    color <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L905" class="LineNr">905 </span>  <span class="Delimiter">}</span>
-<span id="L906" class="LineNr">906 </span>  n2:num <span class="Special">&lt;-</span> copy n
-<span id="L907" class="LineNr">907 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='081print.mu.html#L16'>screen</a>, n2, color, bg-color
-<span id="L908" class="LineNr">908 </span>]
+<span id="L906" class="LineNr">906 </span>  bg-color:num, bg-color-found?:bool <span class="Special">&lt;-</span> <span class="Constant">next-input</span>
+<span id="L907" class="LineNr">907 </span>  <span class="Delimiter">{</span>
+<span id="L908" class="LineNr">908 </span>    <span class="Comment"># default bg-color to black</span>
+<span id="L909" class="LineNr">909 </span>    <span class="muControl">break-if</span> bg-color-found?
+<span id="L910" class="LineNr">910 </span>    bg-color <span class="Special">&lt;-</span> copy <span class="Constant">0/black</span>
+<span id="L911" class="LineNr">911 </span>  <span class="Delimiter">}</span>
+<span id="L912" class="LineNr">912 </span>  n2:num <span class="Special">&lt;-</span> deaddress n
+<span id="L913" class="LineNr">913 </span>  <a href='081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='081print.mu.html#L16'>screen</a>, n2, color, bg-color
+<span id="L914" class="LineNr">914 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/082scenario_screen.cc.html b/html/082scenario_screen.cc.html
index 5a0311bc..13858db5 100644
--- a/html/082scenario_screen.cc.html
+++ b/html/082scenario_screen.cc.html
@@ -15,19 +15,20 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.Constant { color: #00a0a0; }
-.Special { color: #c00000; }
-.Identifier { color: #c0a020; }
-.muRecipe { color: #ff8700; }
-.Comment { color: #9090ff; }
-.Comment a { color:#0000ee; text-decoration:underline; }
-.Delimiter { color: #800080; }
-.LineNr { color: #444444; }
+.CommentedCode { color: #6c6c6c; }
 .muScenario { color: #00af00; }
+.LineNr { color: #444444; }
+.Delimiter { color: #800080; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
 .traceContains { color: #008000; }
 .traceAbsent { color: #c00000; }
 .cSpecial { color: #008000; }
+.muRecipe { color: #ff8700; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.Identifier { color: #c0a020; }
 -->
 </style>
 
@@ -209,271 +210,292 @@ if ('onhashchange' in window) {
 <span id="L145" class="LineNr">145 </span>
 <span id="L146" class="LineNr">146 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
 <span id="L147" class="LineNr">147 </span><span class="Comment">// Scenario Globals.</span>
-<span id="L148" class="LineNr">148 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> SCREEN = Next_predefined_global_for_scenarios++<span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> SCREEN = next_predefined_global_for_scenarios<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">size_of(address:screen)</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L149" class="LineNr">149 </span><span class="Comment">// End Scenario Globals.</span>
-<span id="L150" class="LineNr">150 </span>
-<span id="L151" class="LineNr">151 </span><span class="Comment">//: give 'screen' a fixed location in scenarios</span>
-<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
-<span id="L153" class="LineNr">153 </span>Name[r][<span class="Constant">&quot;screen&quot;</span>] = SCREEN<span class="Delimiter">;</span>
-<span id="L154" class="LineNr">154 </span><span class="Comment">//: make 'screen' always a raw location in scenarios</span>
-<span id="L155" class="LineNr">155 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L156" class="LineNr">156 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span>
-<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
-<span id="L159" class="LineNr">159 </span><span class="Comment">// rewrite 'assume-screen width, height' to</span>
-<span id="L160" class="LineNr">160 </span><span class="Comment">// 'screen:&amp;:screen &lt;- new-fake-screen width, height'</span>
-<span id="L161" class="LineNr">161 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;assume-screen&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>  curr<span class="Delimiter">.</span>name = <span class="Constant">&quot;new-fake-screen&quot;</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L164" class="LineNr">164 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: 'assume-screen' has no products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L165" class="LineNr">165 </span>  <span class="Delimiter">}</span>
-<span id="L166" class="LineNr">166 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: 'assume-screen' can't be called here, only in scenarios</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L168" class="LineNr">168 </span>  <span class="Delimiter">}</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L170" class="LineNr">170 </span>    assert<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L171" class="LineNr">171 </span>    curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;screen:&amp;:screen/raw&quot;</span><span class="Delimiter">));</span>
-<span id="L172" class="LineNr">172 </span>    curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L66'>set_value</a><span class="Delimiter">(</span>SCREEN<span class="Delimiter">);</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Delimiter">}</span>
-<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
-<span id="L175" class="LineNr">175 </span>
-<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(scenario assume_screen_shows_up_in_errors)</span>
-<span id="L177" class="LineNr">177 </span><span class="Special">% Hide_errors = true;</span>
-<span id="L178" class="LineNr">178 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> assume-screen-shows-up-in-errors [
-<span id="L179" class="LineNr">179 </span>  assume-screen width<span class="Delimiter">,</span> <span class="Constant">5</span>
-<span id="L180" class="LineNr">180 </span>]
-<span id="L181" class="LineNr">181 </span><span class="traceContains">+error: assume-screen-shows-up-in-errors: missing type for 'width' in 'assume-screen width, 5'</span>
-<span id="L182" class="LineNr">182 </span>
-<span id="L183" class="LineNr">183 </span><span class="Comment">//: screen-should-contain is a regular instruction</span>
-<span id="L184" class="LineNr">184 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L185" class="LineNr">185 </span>SCREEN_SHOULD_CONTAIN<span class="Delimiter">,</span>
-<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L187" class="LineNr">187 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen-should-contain&quot;</span><span class="Delimiter">,</span> SCREEN_SHOULD_CONTAIN<span class="Delimiter">);</span>
-<span id="L188" class="LineNr">188 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L189" class="LineNr">189 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L190" class="LineNr">190 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L191" class="LineNr">191 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'screen-should-contain' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L192" class="LineNr">192 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L193" class="LineNr">193 </span>  <span class="Delimiter">}</span>
-<span id="L194" class="LineNr">194 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L195" class="LineNr">195 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'screen-should-contain' should be a literal string, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L196" class="LineNr">196 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L197" class="LineNr">197 </span>  <span class="Delimiter">}</span>
-<span id="L198" class="LineNr">198 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L201" class="LineNr">201 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN: <span class="Delimiter">{</span>
-<span id="L202" class="LineNr">202 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L203" class="LineNr">203 </span>  assert<span class="Delimiter">(</span>scalar<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="L204" class="LineNr">204 </span>  check_screen<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>name<span class="Delimiter">,</span> -<span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L205" class="LineNr">205 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L206" class="LineNr">206 </span><span class="Delimiter">}</span>
-<span id="L207" class="LineNr">207 </span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L209" class="LineNr">209 </span>SCREEN_SHOULD_CONTAIN_IN_COLOR<span class="Delimiter">,</span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L211" class="LineNr">211 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen-should-contain-in-color&quot;</span><span class="Delimiter">,</span> SCREEN_SHOULD_CONTAIN_IN_COLOR<span class="Delimiter">);</span>
-<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L213" class="LineNr">213 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN_IN_COLOR: <span class="Delimiter">{</span>
-<span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'screen-should-contain-in-color' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L216" class="LineNr">216 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L219" class="LineNr">219 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'screen-should-contain-in-color' should be a number (color code), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L220" class="LineNr">220 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L221" class="LineNr">221 </span>  <span class="Delimiter">}</span>
-<span id="L222" class="LineNr">222 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L223" class="LineNr">223 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'screen-should-contain-in-color' should be a literal string, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L224" class="LineNr">224 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L225" class="LineNr">225 </span>  <span class="Delimiter">}</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
-<span id="L228" class="LineNr">228 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L229" class="LineNr">229 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN_IN_COLOR: <span class="Delimiter">{</span>
-<span id="L230" class="LineNr">230 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L231" class="LineNr">231 </span>  assert<span class="Delimiter">(</span>scalar<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="L232" class="LineNr">232 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)));</span>
-<span id="L233" class="LineNr">233 </span>  check_screen<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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L234" class="LineNr">234 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L238" class="LineNr">238 </span><span class="Comment">// scan an array of characters in a unicode-aware, bounds-checked manner</span>
-<span id="L239" class="LineNr">239 </span><span class="Normal">struct</span> raw_string_stream <span class="Delimiter">{</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">int</span> index<span class="Delimiter">;</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Normal">const</span> <span class="Normal">int</span> max<span class="Delimiter">;</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* buf<span class="Delimiter">;</span>
-<span id="L243" class="LineNr">243 </span>
-<span id="L244" class="LineNr">244 </span>  raw_string_stream<span class="Delimiter">(</span><span class="Normal">const</span> string&amp;<span class="Delimiter">);</span>
-<span id="L245" class="LineNr">245 </span>  <span class="Normal">uint32_t</span> get<span class="Delimiter">();</span>  <span class="Comment">// unicode codepoint</span>
-<span id="L246" class="LineNr">246 </span>  <span class="Normal">uint32_t</span> peek<span class="Delimiter">();</span>  <span class="Comment">// unicode codepoint</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Normal">bool</span> at_end<span class="Delimiter">()</span> <span class="Normal">const</span><span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>  <span class="Normal">void</span> <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
-<span id="L249" class="LineNr">249 </span><span class="Delimiter">};</span>
-<span id="L250" class="LineNr">250 </span>
-<span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
-<span id="L252" class="LineNr">252 </span><span class="Normal">void</span> check_screen<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected_contents<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> color<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L253" class="LineNr">253 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">);</span>
-<span id="L254" class="LineNr">254 </span>  <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L255" class="LineNr">255 </span>  assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L256" class="LineNr">256 </span>  <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span>  <span class="Comment">// type: address:array:character</span>
-<span id="L257" class="LineNr">257 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">);</span>  <span class="Comment">// type: array:character</span>
-<span id="L258" class="LineNr">258 </span>  <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L259" class="LineNr">259 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
-<span id="L260" class="LineNr">260 </span>  <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L261" class="LineNr">261 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
-<span id="L262" class="LineNr">262 </span>  raw_string_stream cursor<span class="Delimiter">(</span>expected_contents<span class="Delimiter">);</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Comment">// todo: too-long expected_contents should fail</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
-<span id="L266" class="LineNr">266 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L267" class="LineNr">267 </span>    cursor<span class="Delimiter">.</span><a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
-<span id="L268" class="LineNr">268 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L269" class="LineNr">269 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'.'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L270" class="LineNr">270 </span>      <a href='003trace.cc.html#L174'>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;each row of the expected screen should start with a '.'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L271" class="LineNr">271 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L272" class="LineNr">272 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L273" class="LineNr">273 </span>    <span class="Delimiter">}</span>
-<span id="L274" class="LineNr">274 </span>    <span class="Normal">int</span> addr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
-<span id="L275" class="LineNr">275 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> column = <span class="Constant">0</span><span class="Delimiter">;</span>  column &lt; screen_width<span class="Delimiter">;</span>  ++column<span class="Delimiter">,</span> addr+= <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L276" class="LineNr">276 </span>      <span class="Normal">const</span> <span class="Normal">int</span> cell_color_offset = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L277" class="LineNr">277 </span>      <span class="Normal">uint32_t</span> curr = cursor<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
-<span id="L278" class="LineNr">278 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L279" class="LineNr">279 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L280" class="LineNr">280 </span>        <span class="Comment">// filter out other colors</span>
-<span id="L281" class="LineNr">281 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L282" class="LineNr">282 </span>      <span class="Delimiter">}</span>
-<span id="L283" class="LineNr">283 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L284" class="LineNr">284 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L285" class="LineNr">285 </span>        <span class="Comment">// contents match but color is off</span>
-<span id="L286" class="LineNr">286 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L287" class="LineNr">287 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L288" class="LineNr">288 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
-<span id="L289" class="LineNr">289 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L290" class="LineNr">290 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L291" class="LineNr">291 </span>      <span class="Delimiter">}</span>
-<span id="L292" class="LineNr">292 </span>
-<span id="L293" class="LineNr">293 </span>      <span class="Comment">// really a mismatch</span>
-<span id="L294" class="LineNr">294 </span>      <span class="Comment">// can't print multi-byte unicode characters in errors just yet. not very useful for debugging anyway.</span>
-<span id="L295" class="LineNr">295 </span>      <span class="Normal">char</span> expected_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
-<span id="L296" class="LineNr">296 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>curr &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L297" class="LineNr">297 </span>        <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
-<span id="L298" class="LineNr">298 </span>        expected_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span>curr<span class="Delimiter">),</span> expected_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
-<span id="L299" class="LineNr">299 </span>      <span class="Delimiter">}</span>
-<span id="L300" class="LineNr">300 </span>      <span class="Normal">char</span> actual_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
-<span id="L301" class="LineNr">301 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L302" class="LineNr">302 </span>        <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
-<span id="L303" class="LineNr">303 </span>        actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
-<span id="L304" class="LineNr">304 </span>      <span class="Delimiter">}</span>
-<span id="L305" class="LineNr">305 </span>
-<span id="L306" class="LineNr">306 </span>      ostringstream color_phrase<span class="Delimiter">;</span>
-<span id="L307" class="LineNr">307 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>color != -<span class="Constant">1</span><span class="Delimiter">)</span> color_phrase &lt;&lt; <span class="Constant">&quot; in color &quot;</span> &lt;&lt; color<span class="Delimiter">;</span>
-<span id="L308" class="LineNr">308 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L309" class="LineNr">309 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L310" class="LineNr">310 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
-<span id="L311" class="LineNr">311 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L312" class="LineNr">312 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L313" class="LineNr">313 </span>    <span class="Delimiter">}</span>
-<span id="L314" class="LineNr">314 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'.'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L315" class="LineNr">315 </span>      <a href='003trace.cc.html#L174'>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;row &quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot; of the expected screen is too long</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L316" class="LineNr">316 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L317" class="LineNr">317 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L318" class="LineNr">318 </span>    <span class="Delimiter">}</span>
-<span id="L319" class="LineNr">319 </span>  <span class="Delimiter">}</span>
-<span id="L320" class="LineNr">320 </span>  cursor<span class="Delimiter">.</span><a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
-<span id="L321" class="LineNr">321 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L322" class="LineNr">322 </span>    <a href='003trace.cc.html#L174'>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;expected screen has too many rows</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L323" class="LineNr">323 </span>    Passed = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L324" class="LineNr">324 </span>  <span class="Delimiter">}</span>
-<span id="L325" class="LineNr">325 </span><span class="Delimiter">}</span>
-<span id="L326" class="LineNr">326 </span>
-<span id="L327" class="LineNr">327 </span><span class="Normal">const</span> <span class="Normal">char</span>* unicode_character_at<span class="Delimiter">(</span><span class="Normal">int</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L328" class="LineNr">328 </span>  <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
-<span id="L329" class="LineNr">329 </span>  <span class="Identifier">return</span> to_unicode<span class="Delimiter">(</span>unicode_code_point<span class="Delimiter">);</span>
-<span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
-<span id="L331" class="LineNr">331 </span>
-<span id="L332" class="LineNr">332 </span>raw_string_stream::raw_string_stream<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; backing<span class="Delimiter">)</span> :index<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> max<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>backing<span class="Delimiter">)),</span> buf<span class="Delimiter">(</span>backing<span class="Delimiter">.</span>c_str<span class="Delimiter">())</span> <span class="Delimiter">{}</span>
-<span id="L333" class="LineNr">333 </span>
-<span id="L334" class="LineNr">334 </span><span class="Normal">bool</span> raw_string_stream::at_end<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
-<span id="L335" class="LineNr">335 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index &gt;= max<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L336" class="LineNr">336 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tb_utf8_char_length<span class="Delimiter">(</span>buf[index]<span class="Delimiter">)</span> &gt; max-index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L337" class="LineNr">337 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;unicode string seems corrupted at index &quot;</span>&lt;&lt; index &lt;&lt; <span class="Constant">&quot; character &quot;</span> &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>buf[index]<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L338" class="LineNr">338 </span>    <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L339" class="LineNr">339 </span>  <span class="Delimiter">}</span>
-<span id="L340" class="LineNr">340 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
-<span id="L342" class="LineNr">342 </span>
-<span id="L343" class="LineNr">343 </span><span class="Normal">uint32_t</span> raw_string_stream::get<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L344" class="LineNr">344 </span>  assert<span class="Delimiter">(</span>index &lt; max<span class="Delimiter">);</span>  <span class="Comment">// caller must check bounds before calling 'get'</span>
-<span id="L345" class="LineNr">345 </span>  <span class="Normal">uint32_t</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L346" class="LineNr">346 </span>  <span class="Normal">int</span> length = tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;result<span class="Delimiter">,</span> &amp;buf[index]<span class="Delimiter">);</span>
-<span id="L347" class="LineNr">347 </span>  assert<span class="Delimiter">(</span>length != TB_EOF<span class="Delimiter">);</span>
-<span id="L348" class="LineNr">348 </span>  index += length<span class="Delimiter">;</span>
-<span id="L349" class="LineNr">349 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L350" class="LineNr">350 </span><span class="Delimiter">}</span>
-<span id="L351" class="LineNr">351 </span>
-<span id="L352" class="LineNr">352 </span><span class="Normal">uint32_t</span> raw_string_stream::peek<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L353" class="LineNr">353 </span>  assert<span class="Delimiter">(</span>index &lt; max<span class="Delimiter">);</span>  <span class="Comment">// caller must check bounds before calling 'get'</span>
-<span id="L354" class="LineNr">354 </span>  <span class="Normal">uint32_t</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L355" class="LineNr">355 </span>  <span class="Normal">int</span> length = tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;result<span class="Delimiter">,</span> &amp;buf[index]<span class="Delimiter">);</span>
-<span id="L356" class="LineNr">356 </span>  assert<span class="Delimiter">(</span>length != TB_EOF<span class="Delimiter">);</span>
-<span id="L357" class="LineNr">357 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L358" class="LineNr">358 </span><span class="Delimiter">}</span>
-<span id="L359" class="LineNr">359 </span>
-<span id="L360" class="LineNr">360 </span><span class="Normal">void</span> raw_string_stream::<a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>!at_end<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L362" class="LineNr">362 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>peek<span class="Delimiter">()))</span> get<span class="Delimiter">();</span>
-<span id="L363" class="LineNr">363 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L364" class="LineNr">364 </span>      <span class="Comment">// skip comment</span>
-<span id="L365" class="LineNr">365 </span>      get<span class="Delimiter">();</span>
-<span id="L366" class="LineNr">366 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> get<span class="Delimiter">();</span>  <span class="Comment">// implicitly also handles CRLF</span>
-<span id="L367" class="LineNr">367 </span>    <span class="Delimiter">}</span>
-<span id="L368" class="LineNr">368 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L369" class="LineNr">369 </span>  <span class="Delimiter">}</span>
-<span id="L370" class="LineNr">370 </span><span class="Delimiter">}</span>
-<span id="L371" class="LineNr">371 </span>
-<span id="L372" class="LineNr">372 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L373" class="LineNr">373 </span>_DUMP_SCREEN<span class="Delimiter">,</span>
-<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L375" class="LineNr">375 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$dump-screen&quot;</span><span class="Delimiter">,</span> _DUMP_SCREEN<span class="Delimiter">);</span>
-<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L377" class="LineNr">377 </span><span class="Normal">case</span> _DUMP_SCREEN: <span class="Delimiter">{</span>
-<span id="L378" class="LineNr">378 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L379" class="LineNr">379 </span><span class="Delimiter">}</span>
-<span id="L380" class="LineNr">380 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L381" class="LineNr">381 </span><span class="Normal">case</span> _DUMP_SCREEN: <span class="Delimiter">{</span>
-<span id="L382" class="LineNr">382 </span>  dump_screen<span class="Delimiter">();</span>
-<span id="L383" class="LineNr">383 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(code)</span>
+<span id="L151" class="LineNr">151 </span><span class="Normal">int</span> next_predefined_global_for_scenarios<span class="Delimiter">(</span><span class="Normal">int</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">int</span> result = Next_predefined_global_for_scenarios<span class="Delimiter">;</span>
+<span id="L153" class="LineNr">153 </span>  Next_predefined_global_for_scenarios += size<span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span><span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span>
+<span id="L157" class="LineNr">157 </span><span class="Comment">//: give 'screen' a fixed location in scenarios</span>
+<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
+<span id="L159" class="LineNr">159 </span>Name[r][<span class="Constant">&quot;screen&quot;</span>] = SCREEN<span class="Delimiter">;</span>
+<span id="L160" class="LineNr">160 </span><span class="Comment">//: make 'screen' always a raw location in scenarios</span>
+<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L162" class="LineNr">162 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">:(before &quot;End Rewrite Instruction(curr, <a href='010vm.cc.html#L19'>recipe</a> result)&quot;)</span>
+<span id="L165" class="LineNr">165 </span><span class="Comment">// rewrite 'assume-screen width, height' to</span>
+<span id="L166" class="LineNr">166 </span><span class="Comment">// 'screen:&amp;:screen &lt;- new-fake-screen width, height'</span>
+<span id="L167" class="LineNr">167 </span><span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;assume-screen&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L168" class="LineNr">168 </span>  curr<span class="Delimiter">.</span>name = <span class="Constant">&quot;new-fake-screen&quot;</span><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: 'assume-screen' has no products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Delimiter">}</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span>result<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; result<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot;: 'assume-screen' can't be called here, only in scenarios</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Delimiter">}</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L176" class="LineNr">176 </span>    assert<span class="Delimiter">(</span>curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L177" class="LineNr">177 </span>    curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>reagent<span class="Delimiter">(</span><span class="Constant">&quot;screen:&amp;:screen/raw&quot;</span><span class="Delimiter">));</span>
+<span id="L178" class="LineNr">178 </span>    curr<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='010vm.cc.html#L67'>set_value</a><span class="Delimiter">(</span>SCREEN<span class="Delimiter">);</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Delimiter">}</span>
+<span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
+<span id="L181" class="LineNr">181 </span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">:(scenario assume_screen_shows_up_in_errors)</span>
+<span id="L183" class="LineNr">183 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L184" class="LineNr">184 </span><span class="muScenario"><a href='050scenario.cc.html#L57'>scenario</a></span> assume-screen-shows-up-in-errors [
+<span id="L185" class="LineNr">185 </span>  assume-screen width<span class="Delimiter">,</span> <span class="Constant">5</span>
+<span id="L186" class="LineNr">186 </span>]
+<span id="L187" class="LineNr">187 </span><span class="traceContains">+error: assume-screen-shows-up-in-errors: missing type for 'width' in 'assume-screen width, 5'</span>
+<span id="L188" class="LineNr">188 </span>
+<span id="L189" class="LineNr">189 </span><span class="Comment">//: screen-should-contain is a regular instruction</span>
+<span id="L190" class="LineNr">190 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L191" class="LineNr">191 </span>SCREEN_SHOULD_CONTAIN<span class="Delimiter">,</span>
+<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L193" class="LineNr">193 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen-should-contain&quot;</span><span class="Delimiter">,</span> SCREEN_SHOULD_CONTAIN<span class="Delimiter">);</span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L195" class="LineNr">195 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN: <span class="Delimiter">{</span>
+<span id="L196" class="LineNr">196 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L197" class="LineNr">197 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'screen-should-contain' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L198" class="LineNr">198 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>  <span class="Delimiter">}</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L201" class="LineNr">201 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'screen-should-contain' should be a literal string, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L202" class="LineNr">202 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Delimiter">}</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L207" class="LineNr">207 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN: <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L209" class="LineNr">209 </span>  assert<span class="Delimiter">(</span>scalar<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="L210" class="LineNr">210 </span>  check_screen<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>name<span class="Delimiter">,</span> -<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L212" class="LineNr">212 </span><span class="Delimiter">}</span>
+<span id="L213" class="LineNr">213 </span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L215" class="LineNr">215 </span>SCREEN_SHOULD_CONTAIN_IN_COLOR<span class="Delimiter">,</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L217" class="LineNr">217 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen-should-contain-in-color&quot;</span><span class="Delimiter">,</span> SCREEN_SHOULD_CONTAIN_IN_COLOR<span class="Delimiter">);</span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L219" class="LineNr">219 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN_IN_COLOR: <span class="Delimiter">{</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L221" class="LineNr">221 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'screen-should-contain-in-color' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L222" class="LineNr">222 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Delimiter">}</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L225" class="LineNr">225 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'screen-should-contain-in-color' should be a number (color code), but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L226" class="LineNr">226 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Delimiter">}</span>
+<span id="L228" class="LineNr">228 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_literal_text<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L229" class="LineNr">229 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of 'screen-should-contain-in-color' should be a literal string, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L230" class="LineNr">230 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Delimiter">}</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L233" class="LineNr">233 </span><span class="Delimiter">}</span>
+<span id="L234" class="LineNr">234 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L235" class="LineNr">235 </span><span class="Normal">case</span> SCREEN_SHOULD_CONTAIN_IN_COLOR: <span class="Delimiter">{</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L237" class="LineNr">237 </span>  assert<span class="Delimiter">(</span>scalar<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="L238" class="LineNr">238 </span>  assert<span class="Delimiter">(</span>scalar<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)));</span>
+<span id="L239" class="LineNr">239 </span>  check_screen<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">1</span><span class="Delimiter">).</span>name<span class="Delimiter">,</span> ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">}</span>
+<span id="L242" class="LineNr">242 </span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L244" class="LineNr">244 </span><span class="Comment">// scan an array of characters in a unicode-aware, bounds-checked manner</span>
+<span id="L245" class="LineNr">245 </span><span class="Normal">struct</span> raw_string_stream <span class="Delimiter">{</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Normal">int</span> index<span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Normal">const</span> <span class="Normal">int</span> max<span class="Delimiter">;</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* buf<span class="Delimiter">;</span>
+<span id="L249" class="LineNr">249 </span>
+<span id="L250" class="LineNr">250 </span>  raw_string_stream<span class="Delimiter">(</span><span class="Normal">const</span> string&amp;<span class="Delimiter">);</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Normal">uint32_t</span> get<span class="Delimiter">();</span>  <span class="Comment">// unicode codepoint</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Normal">uint32_t</span> peek<span class="Delimiter">();</span>  <span class="Comment">// unicode codepoint</span>
+<span id="L253" class="LineNr">253 </span>  <span class="Normal">bool</span> at_end<span class="Delimiter">()</span> <span class="Normal">const</span><span class="Delimiter">;</span>
+<span id="L254" class="LineNr">254 </span>  <span class="Normal">void</span> <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
+<span id="L255" class="LineNr">255 </span><span class="Delimiter">};</span>
+<span id="L256" class="LineNr">256 </span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(code)</span>
+<span id="L258" class="LineNr">258 </span><span class="Normal">void</span> check_screen<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; expected_contents<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">int</span> color<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN+<span class="Comment">/*</span><span class="Comment">skip <a href='043space.cc.html#L101'>address</a> alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip payload alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L260" class="LineNr">260 </span>  reagent screen<span class="Delimiter">(</span><span class="Constant">&quot;x:screen&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// just to ensure screen.type is reclaimed</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Normal">int</span> screen_data_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// type: address:array:character</span>
+<span id="L262" class="LineNr">262 </span>  assert<span class="Delimiter">(</span>screen_data_location &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L263" class="LineNr">263 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen data is at location &quot; &lt;&lt; screen_data_location &lt;&lt; '\n';</span>
+<span id="L264" class="LineNr">264 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location+<span class="Comment">/*</span><span class="Comment">skip <a href='043space.cc.html#L101'>address</a> alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip payload alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
+<span id="L265" class="LineNr">265 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen data start is at &quot; &lt;&lt; screen_data_start &lt;&lt; '\n';</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Normal">int</span> screen_width_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L267" class="LineNr">267 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen width is at location &quot; &lt;&lt; screen_width_location &lt;&lt; '\n';</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_width_location<span class="Delimiter">);</span>
+<span id="L269" class="LineNr">269 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen width: &quot; &lt;&lt; screen_width &lt;&lt; '\n';</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Normal">int</span> screen_height_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L271" class="LineNr">271 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen height is at location &quot; &lt;&lt; screen_height_location &lt;&lt; '\n';</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_height_location<span class="Delimiter">);</span>
+<span id="L273" class="LineNr">273 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen height: &quot; &lt;&lt; screen_height &lt;&lt; '\n';</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Normal">int</span> top_index_location= <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L275" class="LineNr">275 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;top of screen is at location &quot; &lt;&lt; top_index_location &lt;&lt; '\n';</span>
+<span id="L276" class="LineNr">276 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> top_index_location<span class="Delimiter">);</span>
+<span id="L277" class="LineNr">277 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;top of screen is index &quot; &lt;&lt; top_index &lt;&lt; '\n';</span>
+<span id="L278" class="LineNr">278 </span>  raw_string_stream cursor<span class="Delimiter">(</span>expected_contents<span class="Delimiter">);</span>
+<span id="L279" class="LineNr">279 </span>  <span class="Comment">// todo: too-long expected_contents should fail</span>
+<span id="L280" class="LineNr">280 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L281" class="LineNr">281 </span>    cursor<span class="Delimiter">.</span><a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
+<span id="L282" class="LineNr">282 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L283" class="LineNr">283 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'.'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L284" class="LineNr">284 </span>      <a href='003trace.cc.html#L197'>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;each row of the expected screen should start with a '.'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L285" class="LineNr">285 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L286" class="LineNr">286 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L287" class="LineNr">287 </span>    <span class="Delimiter">}</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">int</span> addr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L289" class="LineNr">289 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> column = <span class="Constant">0</span><span class="Delimiter">;</span>  column &lt; screen_width<span class="Delimiter">;</span>  ++column<span class="Delimiter">,</span> addr+= <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L290" class="LineNr">290 </span>      <span class="Normal">const</span> <span class="Normal">int</span> cell_color_offset = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L291" class="LineNr">291 </span>      <span class="Normal">uint32_t</span> curr = cursor<span class="Delimiter">.</span>get<span class="Delimiter">();</span>
+<span id="L292" class="LineNr">292 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == <span class="Constant">0</span> &amp;&amp; isspace<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L293" class="LineNr">293 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>curr == <span class="Constant">' '</span> &amp;&amp; color != -<span class="Constant">1</span> &amp;&amp; color != <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L294" class="LineNr">294 </span>        <span class="Comment">// filter out other colors</span>
+<span id="L295" class="LineNr">295 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L296" class="LineNr">296 </span>      <span class="Delimiter">}</span>
+<span id="L297" class="LineNr">297 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> != <span class="Constant">0</span> &amp;&amp; <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> == curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L298" class="LineNr">298 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>color == -<span class="Constant">1</span> || color == <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L299" class="LineNr">299 </span>        <span class="Comment">// contents match but color is off</span>
+<span id="L300" class="LineNr">300 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L301" class="LineNr">301 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain '&quot;</span> &lt;&lt; unicode_character_at<span class="Delimiter">(</span>addr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' in color &quot;</span> &lt;&lt; color &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr+cell_color_offset<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L302" class="LineNr">302 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
+<span id="L303" class="LineNr">303 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L304" class="LineNr">304 </span>        <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L305" class="LineNr">305 </span>      <span class="Delimiter">}</span>
+<span id="L306" class="LineNr">306 </span>
+<span id="L307" class="LineNr">307 </span>      <span class="Comment">// really a mismatch</span>
+<span id="L308" class="LineNr">308 </span>      <span class="Comment">// can't print multi-byte unicode characters in errors just yet. not very useful for debugging anyway.</span>
+<span id="L309" class="LineNr">309 </span>      <span class="Normal">char</span> expected_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
+<span id="L310" class="LineNr">310 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>curr &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span>curr<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L311" class="LineNr">311 </span>        <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
+<span id="L312" class="LineNr">312 </span>        expected_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span>curr<span class="Delimiter">),</span> expected_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> expected_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L313" class="LineNr">313 </span>      <span class="Delimiter">}</span>
+<span id="L314" class="LineNr">314 </span>      <span class="Normal">char</span> actual_pretty[<span class="Constant">10</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
+<span id="L315" class="LineNr">315 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)</span> &lt; <span class="Constant">256</span> &amp;&amp; !iscntrl<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L316" class="LineNr">316 </span>        <span class="Comment">// &quot; ('&lt;curr&gt;')&quot;</span>
+<span id="L317" class="LineNr">317 </span>        actual_pretty[<span class="Constant">0</span>] = <span class="Constant">' '</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">1</span>] = <span class="Constant">'('</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">2</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">3</span>] = <span class="Normal">static_cast</span>&lt;<span class="Normal">unsigned</span> <span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">)),</span> actual_pretty[<span class="Constant">4</span>] = <span class="cSpecial">'\''</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">5</span>] = <span class="Constant">')'</span><span class="Delimiter">,</span> actual_pretty[<span class="Constant">6</span>] = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L318" class="LineNr">318 </span>      <span class="Delimiter">}</span>
+<span id="L319" class="LineNr">319 </span>
+<span id="L320" class="LineNr">320 </span>      ostringstream color_phrase<span class="Delimiter">;</span>
+<span id="L321" class="LineNr">321 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>color != -<span class="Constant">1</span><span class="Delimiter">)</span> color_phrase &lt;&lt; <span class="Constant">&quot; in color &quot;</span> &lt;&lt; color<span class="Delimiter">;</span>
+<span id="L322" class="LineNr">322 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L323" class="LineNr">323 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;F - &quot;</span> &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;expected screen location (&quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; column &lt;&lt; <span class="Constant">&quot;) to contain &quot;</span> &lt;&lt; curr &lt;&lt; expected_pretty &lt;&lt; color_phrase<span class="Delimiter">.</span>str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot; instead of &quot;</span> &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">))</span> &lt;&lt; actual_pretty &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L324" class="LineNr">324 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Hide_errors<span class="Delimiter">)</span> dump_screen<span class="Delimiter">();</span>
+<span id="L325" class="LineNr">325 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L326" class="LineNr">326 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L327" class="LineNr">327 </span>    <span class="Delimiter">}</span>
+<span id="L328" class="LineNr">328 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>cursor<span class="Delimiter">.</span>get<span class="Delimiter">()</span> != <span class="Constant">'.'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L329" class="LineNr">329 </span>      <a href='003trace.cc.html#L197'>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;row &quot;</span> &lt;&lt; row &lt;&lt; <span class="Constant">&quot; of the expected screen is too long</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L330" class="LineNr">330 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>!Scenario_testing_scenario<span class="Delimiter">)</span> Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L332" class="LineNr">332 </span>    <span class="Delimiter">}</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Delimiter">}</span>
+<span id="L334" class="LineNr">334 </span>  cursor<span class="Delimiter">.</span><a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">();</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!cursor<span class="Delimiter">.</span>at_end<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L336" class="LineNr">336 </span>    <a href='003trace.cc.html#L197'>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;expected screen has too many rows</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L337" class="LineNr">337 </span>    Passed =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L338" class="LineNr">338 </span>  <span class="Delimiter">}</span>
+<span id="L339" class="LineNr">339 </span><span class="Delimiter">}</span>
+<span id="L340" class="LineNr">340 </span>
+<span id="L341" class="LineNr">341 </span><span class="Normal">const</span> <span class="Normal">char</span>* unicode_character_at<span class="Delimiter">(</span><span class="Normal">int</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L342" class="LineNr">342 </span>  <span class="Normal">int</span> unicode_code_point = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> addr<span class="Delimiter">));</span>
+<span id="L343" class="LineNr">343 </span>  <span class="Identifier">return</span> to_unicode<span class="Delimiter">(</span>unicode_code_point<span class="Delimiter">);</span>
+<span id="L344" class="LineNr">344 </span><span class="Delimiter">}</span>
+<span id="L345" class="LineNr">345 </span>
+<span id="L346" class="LineNr">346 </span>raw_string_stream::raw_string_stream<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; backing<span class="Delimiter">)</span> :index<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> max<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>backing<span class="Delimiter">)),</span> buf<span class="Delimiter">(</span>backing<span class="Delimiter">.</span>c_str<span class="Delimiter">())</span> <span class="Delimiter">{}</span>
+<span id="L347" class="LineNr">347 </span>
+<span id="L348" class="LineNr">348 </span><span class="Normal">bool</span> raw_string_stream::at_end<span class="Delimiter">()</span> <span class="Normal">const</span> <span class="Delimiter">{</span>
+<span id="L349" class="LineNr">349 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index &gt;= max<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>tb_utf8_char_length<span class="Delimiter">(</span>buf[index]<span class="Delimiter">)</span> &gt; max-index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L351" class="LineNr">351 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;unicode string seems corrupted at index &quot;</span>&lt;&lt; index &lt;&lt; <span class="Constant">&quot; character &quot;</span> &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span>buf[index]<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L352" class="LineNr">352 </span>    <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L353" class="LineNr">353 </span>  <span class="Delimiter">}</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L355" class="LineNr">355 </span><span class="Delimiter">}</span>
+<span id="L356" class="LineNr">356 </span>
+<span id="L357" class="LineNr">357 </span><span class="Normal">uint32_t</span> raw_string_stream::get<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L358" class="LineNr">358 </span>  assert<span class="Delimiter">(</span>index &lt; max<span class="Delimiter">);</span>  <span class="Comment">// caller must check bounds before calling 'get'</span>
+<span id="L359" class="LineNr">359 </span>  <span class="Normal">uint32_t</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr">360 </span>  <span class="Normal">int</span> length = tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;result<span class="Delimiter">,</span> &amp;buf[index]<span class="Delimiter">);</span>
+<span id="L361" class="LineNr">361 </span>  assert<span class="Delimiter">(</span>length != TB_EOF<span class="Delimiter">);</span>
+<span id="L362" class="LineNr">362 </span>  index += length<span class="Delimiter">;</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L364" class="LineNr">364 </span><span class="Delimiter">}</span>
+<span id="L365" class="LineNr">365 </span>
+<span id="L366" class="LineNr">366 </span><span class="Normal">uint32_t</span> raw_string_stream::peek<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L367" class="LineNr">367 </span>  assert<span class="Delimiter">(</span>index &lt; max<span class="Delimiter">);</span>  <span class="Comment">// caller must check bounds before calling 'get'</span>
+<span id="L368" class="LineNr">368 </span>  <span class="Normal">uint32_t</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L369" class="LineNr">369 </span>  <span class="Normal">int</span> length = tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;result<span class="Delimiter">,</span> &amp;buf[index]<span class="Delimiter">);</span>
+<span id="L370" class="LineNr">370 </span>  assert<span class="Delimiter">(</span>length != TB_EOF<span class="Delimiter">);</span>
+<span id="L371" class="LineNr">371 </span>  <span class="Identifier">return</span> result<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="Normal">void</span> raw_string_stream::<a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>!at_end<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L376" class="LineNr">376 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>isspace<span class="Delimiter">(</span>peek<span class="Delimiter">()))</span> get<span class="Delimiter">();</span>
+<span id="L377" class="LineNr">377 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>peek<span class="Delimiter">()</span> == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L378" class="LineNr">378 </span>      <span class="Comment">// skip comment</span>
+<span id="L379" class="LineNr">379 </span>      get<span class="Delimiter">();</span>
+<span id="L380" class="LineNr">380 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span>peek<span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> get<span class="Delimiter">();</span>  <span class="Comment">// implicitly also handles CRLF</span>
+<span id="L381" class="LineNr">381 </span>    <span class="Delimiter">}</span>
+<span id="L382" class="LineNr">382 </span>    <span class="Normal">else</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L383" class="LineNr">383 </span>  <span class="Delimiter">}</span>
 <span id="L384" class="LineNr">384 </span><span class="Delimiter">}</span>
 <span id="L385" class="LineNr">385 </span>
-<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(code)</span>
-<span id="L387" class="LineNr">387 </span><span class="Normal">void</span> dump_screen<span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L388" class="LineNr">388 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN<span class="Delimiter">);</span>
-<span id="L389" class="LineNr">389 </span>  <span class="Normal">int</span> width_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L390" class="LineNr">390 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+width_offset<span class="Delimiter">);</span>
-<span id="L391" class="LineNr">391 </span>  <span class="Normal">int</span> height_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L392" class="LineNr">392 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+height_offset<span class="Delimiter">);</span>
-<span id="L393" class="LineNr">393 </span>  <span class="Normal">int</span> data_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L394" class="LineNr">394 </span>  assert<span class="Delimiter">(</span>data_offset &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L395" class="LineNr">395 </span>  <span class="Normal">int</span> screen_data_location = screen_location+data_offset<span class="Delimiter">;</span>  <span class="Comment">// type: address:array:character</span>
-<span id="L396" class="LineNr">396 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location<span class="Delimiter">);</span>  <span class="Comment">// type: array:character</span>
-<span id="L397" class="LineNr">397 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_start<span class="Delimiter">)</span> == screen_width*screen_height<span class="Delimiter">);</span>
-<span id="L398" class="LineNr">398 </span>  <span class="Normal">int</span> top_index_offset = <a href='042name.cc.html#L138'>find_element_name</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;screen&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L399" class="LineNr">399 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_location+top_index_offset<span class="Delimiter">);</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L401" class="LineNr">401 </span>    cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
-<span id="L402" class="LineNr">402 </span>    <span class="Normal">int</span> curr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
-<span id="L403" class="LineNr">403 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> col = <span class="Constant">0</span><span class="Delimiter">;</span>  col &lt; screen_width<span class="Delimiter">;</span>  ++col<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L404" class="LineNr">404 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
-<span id="L405" class="LineNr">405 </span>        cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
-<span id="L406" class="LineNr">406 </span>      <span class="Normal">else</span>
-<span id="L407" class="LineNr">407 </span>        cerr &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L408" class="LineNr">408 </span>      curr += <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
-<span id="L409" class="LineNr">409 </span>    <span class="Delimiter">}</span>
-<span id="L410" class="LineNr">410 </span>    cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L411" class="LineNr">411 </span>  <span class="Delimiter">}</span>
-<span id="L412" class="LineNr">412 </span><span class="Delimiter">}</span>
+<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L387" class="LineNr">387 </span>_DUMP_SCREEN<span class="Delimiter">,</span>
+<span id="L388" class="LineNr">388 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L389" class="LineNr">389 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$dump-screen&quot;</span><span class="Delimiter">,</span> _DUMP_SCREEN<span class="Delimiter">);</span>
+<span id="L390" class="LineNr">390 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L391" class="LineNr">391 </span><span class="Normal">case</span> _DUMP_SCREEN: <span class="Delimiter">{</span>
+<span id="L392" class="LineNr">392 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L393" class="LineNr">393 </span><span class="Delimiter">}</span>
+<span id="L394" class="LineNr">394 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L395" class="LineNr">395 </span><span class="Normal">case</span> _DUMP_SCREEN: <span class="Delimiter">{</span>
+<span id="L396" class="LineNr">396 </span>  dump_screen<span class="Delimiter">();</span>
+<span id="L397" class="LineNr">397 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L398" class="LineNr">398 </span><span class="Delimiter">}</span>
+<span id="L399" class="LineNr">399 </span>
+<span id="L400" class="LineNr">400 </span><span class="Delimiter">:(code)</span>
+<span id="L401" class="LineNr">401 </span><span class="Normal">void</span> dump_screen<span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Normal">int</span> screen_location = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> SCREEN+<span class="Comment">/*</span><span class="Comment">skip <a href='043space.cc.html#L101'>address</a> alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip payload alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L403" class="LineNr">403 </span>  reagent screen<span class="Delimiter">(</span><span class="Constant">&quot;x:screen&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// just to ensure screen.type is reclaimed</span>
+<span id="L404" class="LineNr">404 </span>  <span class="Normal">int</span> screen_data_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;data&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>  <span class="Comment">// type: address:array:character</span>
+<span id="L405" class="LineNr">405 </span>  assert<span class="Delimiter">(</span>screen_data_location &gt;= <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L406" class="LineNr">406 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen data is at location &quot; &lt;&lt; screen_data_location &lt;&lt; '\n';</span>
+<span id="L407" class="LineNr">407 </span>  <span class="Normal">int</span> screen_data_start = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_data_location+<span class="Comment">/*</span><span class="Comment">skip <a href='043space.cc.html#L101'>address</a> alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> + <span class="Comment">/*</span><span class="Comment">skip payload alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// type: array:character</span>
+<span id="L408" class="LineNr">408 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen data start is at &quot; &lt;&lt; screen_data_start &lt;&lt; '\n';</span>
+<span id="L409" class="LineNr">409 </span>  <span class="Normal">int</span> screen_width_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;num-columns&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L410" class="LineNr">410 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen width is at location &quot; &lt;&lt; screen_width_location &lt;&lt; '\n';</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Normal">int</span> screen_width = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_width_location<span class="Delimiter">);</span>
+<span id="L412" class="LineNr">412 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen width: &quot; &lt;&lt; screen_width &lt;&lt; '\n';</span>
+<span id="L413" class="LineNr">413 </span>  <span class="Normal">int</span> screen_height_location = <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;num-rows&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L414" class="LineNr">414 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen height is at location &quot; &lt;&lt; screen_height_location &lt;&lt; '\n';</span>
+<span id="L415" class="LineNr">415 </span>  <span class="Normal">int</span> screen_height = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> screen_height_location<span class="Delimiter">);</span>
+<span id="L416" class="LineNr">416 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;screen height: &quot; &lt;&lt; screen_height &lt;&lt; '\n';</span>
+<span id="L417" class="LineNr">417 </span>  <span class="Normal">int</span> top_index_location= <a href='042name.cc.html#L148'>find_element_location</a><span class="Delimiter">(</span>screen_location<span class="Delimiter">,</span> <span class="Constant">&quot;top-idx&quot;</span><span class="Delimiter">,</span> screen<span class="Delimiter">.</span>type<span class="Delimiter">,</span> <span class="Constant">&quot;check_screen&quot;</span><span class="Delimiter">);</span>
+<span id="L418" class="LineNr">418 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;top of screen is at location &quot; &lt;&lt; top_index_location &lt;&lt; '\n';</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Normal">int</span> top_index = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> top_index_location<span class="Delimiter">);</span>
+<span id="L420" class="LineNr">420 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;top of screen is index &quot; &lt;&lt; top_index &lt;&lt; '\n';</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i=<span class="Constant">0</span><span class="Delimiter">,</span> row=top_index/screen_width<span class="Delimiter">;</span>  i &lt; screen_height<span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> row=<span class="Delimiter">(</span>row+<span class="Constant">1</span><span class="Delimiter">)</span>%screen_height<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L422" class="LineNr">422 </span>    cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
+<span id="L423" class="LineNr">423 </span>    <span class="Normal">int</span> curr = screen_data_start+<span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span>+row*screen_width* <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L424" class="LineNr">424 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> col = <span class="Constant">0</span><span class="Delimiter">;</span>  col &lt; screen_width<span class="Delimiter">;</span>  ++col<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L425" class="LineNr">425 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">))</span>
+<span id="L426" class="LineNr">426 </span>        cerr &lt;&lt; to_unicode<span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)));</span>
+<span id="L427" class="LineNr">427 </span>      <span class="Normal">else</span>
+<span id="L428" class="LineNr">428 </span>        cerr &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L429" class="LineNr">429 </span>      curr += <span class="Comment">/*</span><span class="Comment">size of screen-cell</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L430" class="LineNr">430 </span>    <span class="Delimiter">}</span>
+<span id="L431" class="LineNr">431 </span>    cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L432" class="LineNr">432 </span>  <span class="Delimiter">}</span>
+<span id="L433" class="LineNr">433 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/083scenario_screen_test.mu.html b/html/083scenario_screen_test.mu.html
index 410ddfd7..9c275760 100644
--- a/html/083scenario_screen_test.mu.html
+++ b/html/083scenario_screen_test.mu.html
@@ -15,12 +15,12 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/084console.mu.html b/html/084console.mu.html
index 7928454d..58efc4c0 100644
--- a/html/084console.mu.html
+++ b/html/084console.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -23,7 +24,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
 -->
 </style>
 
@@ -104,16 +104,16 @@ if ('onhashchange' in window) {
 <span id="L44" class="LineNr"> 44 </span>      done?:bool <span class="Special">&lt;-</span> greater-or-equal current-event-index, max
 <span id="L45" class="LineNr"> 45 </span>      <span class="muControl">break-unless</span> done?
 <span id="L46" class="LineNr"> 46 </span>      dummy:&amp;:<a href='084console.mu.html#L4'>event</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='084console.mu.html#L4'>event</a>:type</span>
-<span id="L47" class="LineNr"> 47 </span>     <span class="muControl"> return</span> *dummy, <span class="Constant">1/found</span>, <span class="Constant">1/quit</span>
+<span id="L47" class="LineNr"> 47 </span>     <span class="muControl"> return</span> *dummy,<span class="Constant"> true/found, true/quit</span>
 <span id="L48" class="LineNr"> 48 </span>    <span class="Delimiter">}</span>
 <span id="L49" class="LineNr"> 49 </span>    result <span class="Special">&lt;-</span> index *buf, current-event-index
 <span id="L50" class="LineNr"> 50 </span>    current-event-index <span class="Special">&lt;-</span> add current-event-index,<span class="Constant"> 1</span>
 <span id="L51" class="LineNr"> 51 </span>    *console <span class="Special">&lt;-</span> put *console, <span class="Constant">current-event-index:offset</span>, current-event-index
-<span id="L52" class="LineNr"> 52 </span>   <span class="muControl"> return</span> result, <span class="Constant">1/found</span>, <span class="Constant">0/quit</span>
+<span id="L52" class="LineNr"> 52 </span>   <span class="muControl"> return</span> result,<span class="Constant"> true/found, false/quit</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Delimiter">}</span>
 <span id="L54" class="LineNr"> 54 </span>  switch  <span class="Comment"># real event source is infrequent; avoid polling it too much</span>
 <span id="L55" class="LineNr"> 55 </span>  result:<a href='084console.mu.html#L4'>event</a>, found?:bool <span class="Special">&lt;-</span> check-for-interaction
-<span id="L56" class="LineNr"> 56 </span> <span class="muControl"> return</span> result, found?, <span class="Constant">0/quit</span>
+<span id="L56" class="LineNr"> 56 </span> <span class="muControl"> return</span> result, found?,<span class="Constant"> false/quit</span>
 <span id="L57" class="LineNr"> 57 </span>]
 <span id="L58" class="LineNr"> 58 </span>
 <span id="L59" class="LineNr"> 59 </span><span class="Comment"># variant of read-event for just keyboard events. Discards everything that</span>
@@ -126,8 +126,8 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> 0</span>, found?, quit?
 <span id="L67" class="LineNr"> 67 </span>  <span class="muControl">return-unless</span> found?,<span class="Constant"> 0</span>, found?, quit?
 <span id="L68" class="LineNr"> 68 </span>  c:char, converted?:bool <span class="Special">&lt;-</span> maybe-convert x, <span class="Constant">text:variant</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="muControl">return-unless</span> converted?,<span class="Constant"> 0</span>, <span class="Constant">0/found</span>, <span class="Constant">0/quit</span>
-<span id="L70" class="LineNr"> 70 </span> <span class="muControl"> return</span> c, <span class="Constant">1/found</span>, <span class="Constant">0/quit</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="muControl">return-unless</span> converted?,<span class="Constant"> 0</span>,<span class="Constant"> false/found, false/quit</span>
+<span id="L70" class="LineNr"> 70 </span> <span class="muControl"> return</span> c,<span class="Constant"> true/found, false/quit</span>
 <span id="L71" class="LineNr"> 71 </span>]
 <span id="L72" class="LineNr"> 72 </span>
 <span id="L73" class="LineNr"> 73 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L73'>send-keys-to-channel</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span><a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a>, chan:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, <a href='081print.mu.html#L16'>screen</a>:&amp;:<a href='081print.mu.html#L16'>screen</a> [
@@ -159,7 +159,7 @@ if ('onhashchange' in window) {
 <span id="L99" class="LineNr"> 99 </span><span class="muRecipe">def</span> <a href='084console.mu.html#L99'>has-more-events?</a> <a href='084console.mu.html#L23'>console</a>:&amp;:<a href='084console.mu.html#L23'>console</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L100" class="LineNr">100 </span>  <span class="Constant">local-scope</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Constant">load-inputs</span>
-<span id="L102" class="LineNr">102 </span>  <span class="muControl">return-if</span> <a href='084console.mu.html#L23'>console</a>, <span class="Constant">0/false</span>  <span class="Comment"># fake events are processed as soon as they arrive</span>
+<span id="L102" class="LineNr">102 </span>  <span class="muControl">return-if</span> <a href='084console.mu.html#L23'>console</a>,<span class="Constant"> false</span>  <span class="Comment"># fake events are processed as soon as they arrive</span>
 <span id="L103" class="LineNr">103 </span>  result <span class="Special">&lt;-</span> interactions-left?
 <span id="L104" class="LineNr">104 </span>]
 </pre>
diff --git a/html/085scenario_console.cc.html b/html/085scenario_console.cc.html
index 4b7506b1..85acaf08 100644
--- a/html/085scenario_console.cc.html
+++ b/html/085scenario_console.cc.html
@@ -95,13 +95,13 @@ if ('onhashchange' in window) {
 <span id="L34" class="LineNr"> 34 </span>]
 <span id="L35" class="LineNr"> 35 </span>
 <span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End Scenario Globals&quot;)</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> CONSOLE = Next_predefined_global_for_scenarios++<span class="Delimiter">;</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> CONSOLE = next_predefined_global_for_scenarios<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">size_of(address:console)</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L38" class="LineNr"> 38 </span><span class="Comment">//: give 'console' a fixed location in scenarios</span>
 <span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
 <span id="L40" class="LineNr"> 40 </span>Name[r][<span class="Constant">&quot;console&quot;</span>] = CONSOLE<span class="Delimiter">;</span>
 <span id="L41" class="LineNr"> 41 </span><span class="Comment">//: make 'console' always a raw location in scenarios</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;console&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;console&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L44" class="LineNr"> 44 </span>
 <span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L46" class="LineNr"> 46 </span>ASSUME_CONSOLE<span class="Delimiter">,</span>
@@ -116,18 +116,18 @@ if ('onhashchange' in window) {
 <span id="L55" class="LineNr"> 55 </span>  <span class="Comment">// create a temporary recipe just for parsing; it won't contain valid instructions</span>
 <span id="L56" class="LineNr"> 56 </span>  istringstream in<span class="Delimiter">(</span><span class="Constant">&quot;[&quot;</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>name + <span class="Constant">&quot;]&quot;</span><span class="Delimiter">);</span>
 <span id="L57" class="LineNr"> 57 </span>  <a href='010vm.cc.html#L19'>recipe</a> r<span class="Delimiter">;</span>
-<span id="L58" class="LineNr"> 58 </span>  <a href='011load.cc.html#L81'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
+<span id="L58" class="LineNr"> 58 </span>  <a href='011load.cc.html#L83'>slurp_body</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L59" class="LineNr"> 59 </span>  <span class="Normal">int</span> num_events = <a href='085scenario_console.cc.html#L280'>count_events</a><span class="Delimiter">(</span>r<span class="Delimiter">);</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Comment">// initialize the events like in new-fake-console</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Normal">int</span> size = <span class="Comment">/*</span><span class="Comment">length</span><span class="Comment">*/</span><span class="Constant">1</span> + num_events*size_of_event<span class="Delimiter">();</span>
 <span id="L62" class="LineNr"> 62 </span>  <span class="Normal">int</span> event_data_address = allocate<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// store length</span>
-<span id="L64" class="LineNr"> 64 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> event_data_address<span class="Delimiter">,</span> num_events<span class="Delimiter">);</span>
-<span id="L65" class="LineNr"> 65 </span>  <span class="Normal">int</span> curr_address = event_data_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L64" class="LineNr"> 64 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> event_data_address+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> num_events<span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Normal">int</span> curr_address = event_data_address + <span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span> + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L66" class="LineNr"> 66 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L67" class="LineNr"> 67 </span>    <span class="Normal">const</span> instruction&amp; inst = r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L68" class="LineNr"> 68 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;left-click&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'left-click' event starting at &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L69" class="LineNr"> 69 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'left-click' event starting at &quot;</span> &lt;&lt; Current_routine<span class="Delimiter">-&gt;</span>alloc &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L70" class="LineNr"> 70 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">tag for 'touch-event' variant of 'event' exclusive-container</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L71" class="LineNr"> 71 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">offset of 'type' in 'mouse-event'</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">,</span> TB_KEY_MOUSE_LEFT<span class="Delimiter">);</span>
 <span id="L72" class="LineNr"> 72 </span>      <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Comment">/*</span><span class="Comment">skip tag</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">offset of 'row' in 'mouse-event'</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> to_integer<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">));</span>
@@ -135,14 +135,14 @@ if ('onhashchange' in window) {
 <span id="L74" class="LineNr"> 74 </span>      curr_address += <a href='085scenario_console.cc.html#L292'>size_of_event</a><span class="Delimiter">();</span>
 <span id="L75" class="LineNr"> 75 </span>    <span class="Delimiter">}</span>
 <span id="L76" class="LineNr"> 76 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;press&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L77" class="LineNr"> 77 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'press' event starting at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L77" class="LineNr"> 77 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'press' event starting at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L78" class="LineNr"> 78 </span>      string key = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L79" class="LineNr"> 79 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>is_integer<span class="Delimiter">(</span>key<span class="Delimiter">))</span>
 <span id="L80" class="LineNr"> 80 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">,</span> to_integer<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
-<span id="L81" class="LineNr"> 81 </span>      <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Key<span class="Delimiter">,</span> key<span class="Delimiter">))</span>
+<span id="L81" class="LineNr"> 81 </span>      <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Key<span class="Delimiter">,</span> key<span class="Delimiter">))</span>
 <span id="L82" class="LineNr"> 82 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">,</span> Key[key]<span class="Delimiter">);</span>
 <span id="L83" class="LineNr"> 83 </span>      <span class="Normal">else</span>
-<span id="L84" class="LineNr"> 84 </span>        <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;assume-console: can't press '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L84" class="LineNr"> 84 </span>        <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;assume-console: can't press '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L85" class="LineNr"> 85 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Constant">1</span><span class="Delimiter">)</span> &lt; <span class="Constant">256</span><span class="Delimiter">)</span>
 <span id="L86" class="LineNr"> 86 </span>        <span class="Comment">// these keys are in ascii</span>
 <span id="L87" class="LineNr"> 87 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">tag for 'text' variant of 'event' exclusive-container</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
@@ -156,31 +156,31 @@ if ('onhashchange' in window) {
 <span id="L95" class="LineNr"> 95 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L96" class="LineNr"> 96 </span>      <span class="Comment">// keyboard input</span>
 <span id="L97" class="LineNr"> 97 </span>      assert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>name == <span class="Constant">&quot;type&quot;</span><span class="Delimiter">);</span>
-<span id="L98" class="LineNr"> 98 </span>      <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'type' event starting at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span>      <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'type' event starting at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L99" class="LineNr"> 99 </span>      <span class="Normal">const</span> string&amp; contents = inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">;</span>
 <span id="L100" class="LineNr">100 </span>      <span class="Normal">const</span> <span class="Normal">char</span>* raw_contents = contents<span class="Delimiter">.</span>c_str<span class="Delimiter">();</span>
-<span id="L101" class="LineNr">101 </span>      <span class="Normal">int</span> num_keyboard_events = <a href='038new_text.cc.html#L129'>unicode_length</a><span class="Delimiter">(</span>contents<span class="Delimiter">);</span>
+<span id="L101" class="LineNr">101 </span>      <span class="Normal">int</span> num_keyboard_events = <a href='038new_text.cc.html#L130'>unicode_length</a><span class="Delimiter">(</span>contents<span class="Delimiter">);</span>
 <span id="L102" class="LineNr">102 </span>      <span class="Normal">int</span> curr = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L103" class="LineNr">103 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; num_keyboard_events<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L104" class="LineNr">104 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'text' tag at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 'text' tag at &quot;</span> &lt;&lt; curr_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L105" class="LineNr">105 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">tag for 'text' variant of 'event' exclusive-container</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L106" class="LineNr">106 </span>        <span class="Normal">uint32_t</span> curr_character<span class="Delimiter">;</span>
 <span id="L107" class="LineNr">107 </span>        assert<span class="Delimiter">(</span>curr &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>
 <span id="L108" class="LineNr">108 </span>        tb_utf8_char_to_unicode<span class="Delimiter">(</span>&amp;curr_character<span class="Delimiter">,</span> &amp;raw_contents[curr]<span class="Delimiter">);</span>
-<span id="L109" class="LineNr">109 </span>        <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing character &quot;</span> &lt;&lt; curr_character &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; curr_address+<span class="Comment">/*</span><span class="Comment">skip exclusive container tag</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L109" class="LineNr">109 </span>        <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing character &quot;</span> &lt;&lt; curr_character &lt;&lt; <span class="Constant">&quot; at &quot;</span> &lt;&lt; curr_address+<span class="Comment">/*</span><span class="Comment">skip exclusive container tag</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L110" class="LineNr">110 </span>        <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr_address+<span class="Comment">/*</span><span class="Comment">skip exclusive container tag</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> curr_character<span class="Delimiter">);</span>
 <span id="L111" class="LineNr">111 </span>        curr += tb_utf8_char_length<span class="Delimiter">(</span>raw_contents[curr]<span class="Delimiter">);</span>
 <span id="L112" class="LineNr">112 </span>        curr_address += <a href='085scenario_console.cc.html#L292'>size_of_event</a><span class="Delimiter">();</span>
 <span id="L113" class="LineNr">113 </span>      <span class="Delimiter">}</span>
 <span id="L114" class="LineNr">114 </span>    <span class="Delimiter">}</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Delimiter">}</span>
-<span id="L116" class="LineNr">116 </span>  assert<span class="Delimiter">(</span>curr_address == event_data_address+size<span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>  assert<span class="Delimiter">(</span>curr_address == event_data_address+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span>+size<span class="Delimiter">);</span>
 <span id="L117" class="LineNr">117 </span>  <span class="Comment">// wrap the array of events in a console object</span>
 <span id="L118" class="LineNr">118 </span>  <span class="Normal">int</span> console_address = allocate<span class="Delimiter">(</span><a href='085scenario_console.cc.html#L302'>size_of_console</a><span class="Delimiter">());</span>
-<span id="L119" class="LineNr">119 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing console in &quot;</span> &lt;&lt; console_address &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L120" class="LineNr">120 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">,</span> console_address<span class="Delimiter">);</span>
-<span id="L121" class="LineNr">121 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing console data in &quot;</span> &lt;&lt; console_address+<span class="Comment">/*</span><span class="Comment">offset of 'data' in container 'events'</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L122" class="LineNr">122 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Comment">/*</span><span class="Comment">offset of 'data' in container 'events'</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> event_data_address<span class="Delimiter">);</span>
+<span id="L119" class="LineNr">119 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing console in &quot;</span> &lt;&lt; console_address &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L120" class="LineNr">120 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> console_address<span class="Delimiter">);</span>
+<span id="L121" class="LineNr">121 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing console data in &quot;</span> &lt;&lt; console_address+<span class="Comment">/*</span><span class="Comment">offset of 'data' in container 'events'</span><span class="Comment">*/</span><span class="Constant">1</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L122" class="LineNr">122 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> console_address+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">offset of 'data' in container 'events'</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">skip alloc id of 'data'</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> event_data_address<span class="Delimiter">);</span>
 <span id="L123" class="LineNr">123 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L124" class="LineNr">124 </span><span class="Delimiter">}</span>
 <span id="L125" class="LineNr">125 </span>
@@ -255,7 +255,7 @@ if ('onhashchange' in window) {
 <span id="L194" class="LineNr">194 </span><span class="Normal">void</span> <a href='085scenario_console.cc.html#L194'>initialize_special_name</a><span class="Delimiter">(</span>reagent&amp; r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L195" class="LineNr">195 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>type<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L196" class="LineNr">196 </span>  <span class="Comment">// no need for screen</span>
-<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name == <span class="Constant">&quot;console&quot;</span><span class="Delimiter">)</span> r<span class="Delimiter">.</span>type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:console&quot;</span><span class="Delimiter">);</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name == <span class="Constant">&quot;console&quot;</span><span class="Delimiter">)</span> r<span class="Delimiter">.</span>type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:console&quot;</span><span class="Delimiter">);</span>
 <span id="L198" class="LineNr">198 </span>  <span class="Comment">// End Initialize Type Of Special Name In Scenario(r)</span>
 <span id="L199" class="LineNr">199 </span><span class="Delimiter">}</span>
 <span id="L200" class="LineNr">200 </span>
@@ -322,7 +322,7 @@ if ('onhashchange' in window) {
 <span id="L261" class="LineNr">261 </span><span class="Normal">case</span> REPLACE_IN_CONSOLE: <span class="Delimiter">{</span>
 <span id="L262" class="LineNr">262 </span>  assert<span class="Delimiter">(</span>scalar<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="L263" class="LineNr">263 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!get_or_insert<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L264" class="LineNr">264 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;console not initialized</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L264" class="LineNr">264 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;console not initialized</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L265" class="LineNr">265 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L266" class="LineNr">266 </span>  <span class="Delimiter">}</span>
 <span id="L267" class="LineNr">267 </span>  <span class="Normal">int</span> console_address = <a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> CONSOLE<span class="Delimiter">);</span>
@@ -343,7 +343,7 @@ if ('onhashchange' in window) {
 <span id="L282" class="LineNr">282 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>r<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L283" class="LineNr">283 </span>    <span class="Normal">const</span> instruction&amp; curr = r<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L284" class="LineNr">284 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span>name == <span class="Constant">&quot;type&quot;</span><span class="Delimiter">)</span>
-<span id="L285" class="LineNr">285 </span>      result += <a href='038new_text.cc.html#L129'>unicode_length</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
+<span id="L285" class="LineNr">285 </span>      result += <a href='038new_text.cc.html#L130'>unicode_length</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">);</span>
 <span id="L286" class="LineNr">286 </span>    <span class="Normal">else</span>
 <span id="L287" class="LineNr">287 </span>      ++result<span class="Delimiter">;</span>
 <span id="L288" class="LineNr">288 </span>  <span class="Delimiter">}</span>
diff --git a/html/086scenario_console_test.mu.html b/html/086scenario_console_test.mu.html
index 6bc9bb19..4451efa9 100644
--- a/html/086scenario_console_test.mu.html
+++ b/html/086scenario_console_test.mu.html
@@ -15,12 +15,12 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/087file.cc.html b/html/087file.cc.html
index 6967ce4c..711733f1 100644
--- a/html/087file.cc.html
+++ b/html/087file.cc.html
@@ -22,7 +22,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -76,26 +75,26 @@ if ('onhashchange' in window) {
 <span id="L16" class="LineNr"> 16 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L17" class="LineNr"> 17 </span><span class="Normal">case</span> _OPEN_FILE_FOR_READING: <span class="Delimiter">{</span>
 <span id="L18" class="LineNr"> 18 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L19" class="LineNr"> 19 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-reading' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L19" class="LineNr"> 19 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-reading' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L20" class="LineNr"> 20 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L21" class="LineNr"> 21 </span>  <span class="Delimiter">}</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-file-for-reading' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L23" class="LineNr"> 23 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-file-for-reading' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L24" class="LineNr"> 24 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">}</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L27" class="LineNr"> 27 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-reading' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-reading' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L28" class="LineNr"> 28 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L29" class="LineNr"> 29 </span>  <span class="Delimiter">}</span>
 <span id="L30" class="LineNr"> 30 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L31" class="LineNr"> 31 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-file-for-reading' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L31" class="LineNr"> 31 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-file-for-reading' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L32" class="LineNr"> 32 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L33" class="LineNr"> 33 </span>  <span class="Delimiter">}</span>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L35" class="LineNr"> 35 </span><span class="Delimiter">}</span>
 <span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L37" class="LineNr"> 37 </span><span class="Normal">case</span> _OPEN_FILE_FOR_READING: <span class="Delimiter">{</span>
-<span id="L38" class="LineNr"> 38 </span>  string filename = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L38" class="LineNr"> 38 </span>  string filename = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L39" class="LineNr"> 39 </span>  assert<span class="Delimiter">(</span><span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">)</span> &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">FILE</span>*<span class="Delimiter">));</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Normal">FILE</span>* f = fopen<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> <span class="Constant">&quot;r&quot;</span><span class="Delimiter">);</span>
 <span id="L41" class="LineNr"> 41 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> result = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>f<span class="Delimiter">);</span>
@@ -111,26 +110,26 @@ if ('onhashchange' in window) {
 <span id="L51" class="LineNr"> 51 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L52" class="LineNr"> 52 </span><span class="Normal">case</span> _OPEN_FILE_FOR_WRITING: <span class="Delimiter">{</span>
 <span id="L53" class="LineNr"> 53 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L54" class="LineNr"> 54 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-writing' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L54" class="LineNr"> 54 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-writing' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L55" class="LineNr"> 55 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L56" class="LineNr"> 56 </span>  <span class="Delimiter">}</span>
 <span id="L57" class="LineNr"> 57 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L58" class="LineNr"> 58 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-file-for-writing' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L58" class="LineNr"> 58 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-file-for-writing' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L59" class="LineNr"> 59 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Delimiter">}</span>
 <span id="L61" class="LineNr"> 61 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L62" class="LineNr"> 62 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-writing' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L62" class="LineNr"> 62 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-file-for-writing' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L63" class="LineNr"> 63 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L64" class="LineNr"> 64 </span>  <span class="Delimiter">}</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L66" class="LineNr"> 66 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-file-for-writing' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L66" class="LineNr"> 66 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-file-for-writing' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L67" class="LineNr"> 67 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L68" class="LineNr"> 68 </span>  <span class="Delimiter">}</span>
 <span id="L69" class="LineNr"> 69 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L70" class="LineNr"> 70 </span><span class="Delimiter">}</span>
 <span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L72" class="LineNr"> 72 </span><span class="Normal">case</span> _OPEN_FILE_FOR_WRITING: <span class="Delimiter">{</span>
-<span id="L73" class="LineNr"> 73 </span>  string filename = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L73" class="LineNr"> 73 </span>  string filename = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L74" class="LineNr"> 74 </span>  assert<span class="Delimiter">(</span><span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span><span class="Delimiter">)</span> &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">FILE</span>*<span class="Delimiter">));</span>
 <span id="L75" class="LineNr"> 75 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> result = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>fopen<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> <span class="Constant">&quot;w&quot;</span><span class="Delimiter">));</span>
 <span id="L76" class="LineNr"> 76 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
@@ -145,23 +144,23 @@ if ('onhashchange' in window) {
 <span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L86" class="LineNr"> 86 </span><span class="Normal">case</span> _READ_FROM_FILE: <span class="Delimiter">{</span>
 <span id="L87" class="LineNr"> 87 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-file' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-file' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L89" class="LineNr"> 89 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Delimiter">}</span>
 <span id="L91" class="LineNr"> 91 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L92" class="LineNr"> 92 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$read-from-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$read-from-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L93" class="LineNr"> 93 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Delimiter">}</span>
 <span id="L95" class="LineNr"> 95 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L96" class="LineNr"> 96 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-file' requires exactly two products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L96" class="LineNr"> 96 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-file' requires exactly two products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L97" class="LineNr"> 97 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Delimiter">}</span>
 <span id="L99" class="LineNr"> 99 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_character<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L100" class="LineNr">100 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$read-from-file' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L100" class="LineNr">100 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$read-from-file' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L101" class="LineNr">101 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L102" class="LineNr">102 </span>  <span class="Delimiter">}</span>
 <span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_boolean<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L104" class="LineNr">104 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product of '$read-from-file' should be a boolean, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product of '$read-from-file' should be a boolean, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L105" class="LineNr">105 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L106" class="LineNr">106 </span>  <span class="Delimiter">}</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -171,7 +170,7 @@ if ('onhashchange' in window) {
 <span id="L111" class="LineNr">111 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L112" class="LineNr">112 </span>  <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L113" class="LineNr">113 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L114" class="LineNr">114 </span>    <a href='003trace.cc.html#L174'>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;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L114" class="LineNr">114 </span>    <a href='003trace.cc.html#L197'>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;can't read from null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L115" class="LineNr">115 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L116" class="LineNr">116 </span>  <span class="Delimiter">}</span>
 <span id="L117" class="LineNr">117 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
@@ -181,7 +180,7 @@ if ('onhashchange' in window) {
 <span id="L121" class="LineNr">121 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Delimiter">}</span>
 <span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L124" class="LineNr">124 </span>    <a href='003trace.cc.html#L174'>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;file in invalid state in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L124" class="LineNr">124 </span>    <a href='003trace.cc.html#L197'>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;file in invalid state in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L125" class="LineNr">125 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>  <span class="Normal">char</span> c = getc<span class="Delimiter">(</span>f<span class="Delimiter">);</span>  <span class="Comment">// todo: unicode</span>
@@ -191,8 +190,8 @@ if ('onhashchange' in window) {
 <span id="L131" class="LineNr">131 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L132" class="LineNr">132 </span>  <span class="Delimiter">}</span>
 <span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L134" class="LineNr">134 </span>    <a href='003trace.cc.html#L174'>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;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>    <a href='003trace.cc.html#L197'>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;couldn't read from file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L136" class="LineNr">136 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Delimiter">}</span>
 <span id="L138" class="LineNr">138 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>c<span class="Delimiter">);</span>
@@ -200,7 +199,7 @@ if ('onhashchange' in window) {
 <span id="L140" class="LineNr">140 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
 <span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L143" class="LineNr">143 </span><span class="PreProc">#include </span><span class="Constant">&lt;errno.h&gt;</span>
+<span id="L143" class="LineNr">143 </span><span class="Comment">#include &lt;errno.h&gt;</span>
 <span id="L144" class="LineNr">144 </span>
 <span id="L145" class="LineNr">145 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
 <span id="L146" class="LineNr">146 </span>_WRITE_TO_FILE<span class="Delimiter">,</span>
@@ -209,19 +208,19 @@ if ('onhashchange' in window) {
 <span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L150" class="LineNr">150 </span><span class="Normal">case</span> _WRITE_TO_FILE: <span class="Delimiter">{</span>
 <span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L152" class="LineNr">152 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-file' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L152" class="LineNr">152 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-file' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L153" class="LineNr">153 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
 <span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L156" class="LineNr">156 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$write-to-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L156" class="LineNr">156 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$write-to-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L157" class="LineNr">157 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L158" class="LineNr">158 </span>  <span class="Delimiter">}</span>
 <span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_character<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L160" class="LineNr">160 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of '$write-to-file' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L160" class="LineNr">160 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of '$write-to-file' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L161" class="LineNr">161 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Delimiter">}</span>
 <span id="L163" class="LineNr">163 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L164" class="LineNr">164 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-file' writes to no products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L164" class="LineNr">164 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-file' writes to no products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L165" class="LineNr">165 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L166" class="LineNr">166 </span>  <span class="Delimiter">}</span>
 <span id="L167" class="LineNr">167 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -231,20 +230,20 @@ if ('onhashchange' in window) {
 <span id="L171" class="LineNr">171 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> x = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Normal">FILE</span>* f = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">FILE</span>*&gt;<span class="Delimiter">(</span>x<span class="Delimiter">);</span>
 <span id="L173" class="LineNr">173 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>f == <span class="Constant">NULL</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L174" class="LineNr">174 </span>    <a href='003trace.cc.html#L174'>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;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>    <a href='003trace.cc.html#L197'>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;can't write to null file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L175" class="LineNr">175 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L176" class="LineNr">176 </span>  <span class="Delimiter">}</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>feof<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L178" class="LineNr">178 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L179" class="LineNr">179 </span>    <a href='003trace.cc.html#L174'>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;file in invalid state in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L179" class="LineNr">179 </span>    <a href='003trace.cc.html#L197'>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;file in invalid state in '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>current_instruction<span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L180" class="LineNr">180 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L181" class="LineNr">181 </span>  <span class="Delimiter">}</span>
 <span id="L182" class="LineNr">182 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> y = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L183" class="LineNr">183 </span>  <span class="Normal">char</span> c = <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>y<span class="Delimiter">);</span>
 <span id="L184" class="LineNr">184 </span>  putc<span class="Delimiter">(</span>c<span class="Delimiter">,</span> f<span class="Delimiter">);</span>  <span class="Comment">// todo: unicode</span>
 <span id="L185" class="LineNr">185 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ferror<span class="Delimiter">(</span>f<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L186" class="LineNr">186 </span>    <a href='003trace.cc.html#L174'>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;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
-<span id="L187" class="LineNr">187 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L186" class="LineNr">186 </span>    <a href='003trace.cc.html#L197'>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;couldn't write to file in '&quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">())</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L187" class="LineNr">187 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;  errno: &quot;</span> &lt;&lt; errno &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L188" class="LineNr">188 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L189" class="LineNr">189 </span>  <span class="Delimiter">}</span>
 <span id="L190" class="LineNr">190 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -257,19 +256,19 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr">197 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L198" class="LineNr">198 </span><span class="Normal">case</span> _CLOSE_FILE: <span class="Delimiter">{</span>
 <span id="L199" class="LineNr">199 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L200" class="LineNr">200 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L200" class="LineNr">200 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L201" class="LineNr">201 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L202" class="LineNr">202 </span>  <span class="Delimiter">}</span>
 <span id="L203" class="LineNr">203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L204" class="LineNr">204 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$close-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L204" class="LineNr">204 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$close-file' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L205" class="LineNr">205 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L206" class="LineNr">206 </span>  <span class="Delimiter">}</span>
 <span id="L207" class="LineNr">207 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L208" class="LineNr">208 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L208" class="LineNr">208 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L209" class="LineNr">209 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L210" class="LineNr">210 </span>  <span class="Delimiter">}</span>
 <span id="L211" class="LineNr">211 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L212" class="LineNr">212 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires its product to be the same as its ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L212" class="LineNr">212 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-file' requires its product to be the same as its ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L213" class="LineNr">213 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L214" class="LineNr">214 </span>  <span class="Delimiter">}</span>
 <span id="L215" class="LineNr">215 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
diff --git a/html/088file.mu.html b/html/088file.mu.html
index 6f3a124d..d769c5ff 100644
--- a/html/088file.mu.html
+++ b/html/088file.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -23,7 +24,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
 -->
 </style>
 
@@ -81,7 +81,7 @@ if ('onhashchange' in window) {
 <span id="L21" class="LineNr"> 21 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L36'>source</a>:char, error?:bool [
 <span id="L22" class="LineNr"> 22 </span>  <span class="Constant">local-scope</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Constant">load-inputs</span>
-<span id="L24" class="LineNr"> 24 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L24" class="LineNr"> 24 </span>  error? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">{</span>
 <span id="L26" class="LineNr"> 26 </span>    <span class="muControl">break-unless</span> <a href='088file.mu.html#L11'>resources</a>
 <span id="L27" class="LineNr"> 27 </span>    <span class="Comment"># fake file system</span>
@@ -90,7 +90,7 @@ if ('onhashchange' in window) {
 <span id="L30" class="LineNr"> 30 </span>  <span class="Delimiter">}</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Comment"># real file system</span>
 <span id="L32" class="LineNr"> 32 </span>  file:num <span class="Special">&lt;-</span> $open-file-for-reading filename
-<span id="L33" class="LineNr"> 33 </span>  <span class="muControl">return-unless</span> file, <span class="Constant">0/contents</span>, <span class="Constant">1/error?</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="muControl">return-unless</span> file,<span class="Constant"> null/no-contents, true/error</span>
 <span id="L34" class="LineNr"> 34 </span>  contents:&amp;:<a href='075channel.mu.html#L36'>source</a>:char, <a href='075channel.mu.html#L40'>sink</a>:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L44'>new-channel</a><span class="Constant"> 30</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="muControl">start-running</span> <a href='088file.mu.html#L76'>receive-from-file</a> file, <a href='075channel.mu.html#L40'>sink</a>
 <span id="L36" class="LineNr"> 36 </span>]
@@ -99,7 +99,7 @@ if ('onhashchange' in window) {
 <span id="L39" class="LineNr"> 39 </span>  <span class="Constant">local-scope</span>
 <span id="L40" class="LineNr"> 40 </span>  <span class="Constant">load-inputs</span>
 <span id="L41" class="LineNr"> 41 </span>  <a href='075channel.mu.html#L36'>source</a>:&amp;:<a href='075channel.mu.html#L36'>source</a>:char, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L21'>start-reading</a> <a href='088file.mu.html#L11'>resources</a>, filename
-<span id="L42" class="LineNr"> 42 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/contents</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/no-contents</span>
 <span id="L43" class="LineNr"> 43 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a> <span class="Constant">30/capacity</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Delimiter">{</span>
 <span id="L45" class="LineNr"> 45 </span>    c:char, done?:bool, <a href='075channel.mu.html#L36'>source</a> <span class="Special">&lt;-</span> read <a href='075channel.mu.html#L36'>source</a>
@@ -113,7 +113,7 @@ if ('onhashchange' in window) {
 <span id="L53" class="LineNr"> 53 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L53'>start-reading-from-fake-resource</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, <a href='088file.mu.html#L16'>resource</a>:text<span class="muRecipe"> -&gt; </span>contents:&amp;:<a href='075channel.mu.html#L36'>source</a>:char, error?:bool [
 <span id="L54" class="LineNr"> 54 </span>  <span class="Constant">local-scope</span>
 <span id="L55" class="LineNr"> 55 </span>  <span class="Constant">load-inputs</span>
-<span id="L56" class="LineNr"> 56 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/no-error</span>
+<span id="L56" class="LineNr"> 56 </span>  error? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L57" class="LineNr"> 57 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L58" class="LineNr"> 58 </span>  data:&amp;:@:<a href='088file.mu.html#L16'>resource</a> <span class="Special">&lt;-</span> get *resources, <span class="Constant">data:offset</span>
 <span id="L59" class="LineNr"> 59 </span>  len:num <span class="Special">&lt;-</span> length *data
@@ -130,7 +130,7 @@ if ('onhashchange' in window) {
 <span id="L70" class="LineNr"> 70 </span>    <span class="muControl">start-running</span> <a href='088file.mu.html#L89'>receive-from-text</a> curr-contents, <a href='075channel.mu.html#L40'>sink</a>
 <span id="L71" class="LineNr"> 71 </span>   <span class="muControl"> return</span>
 <span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">}</span>
-<span id="L73" class="LineNr"> 73 </span> <span class="muControl"> return</span> <span class="Constant">0/not-found</span>, <span class="Constant">1/error</span>
+<span id="L73" class="LineNr"> 73 </span> <span class="muControl"> return</span><span class="Constant"> null/no-such-resource, true/error-found</span>
 <span id="L74" class="LineNr"> 74 </span>]
 <span id="L75" class="LineNr"> 75 </span>
 <span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L76'>receive-from-file</a> file:num, <a href='075channel.mu.html#L40'>sink</a>:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L40'>sink</a>:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char [
@@ -165,7 +165,7 @@ if ('onhashchange' in window) {
 <span id="L105" class="LineNr">105 </span><span class="muRecipe">def</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>:&amp;:<a href='088file.mu.html#L11'>resources</a>, filename:text<span class="muRecipe"> -&gt; </span><a href='075channel.mu.html#L40'>sink</a>:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, routine-id:num, error?:bool [
 <span id="L106" class="LineNr">106 </span>  <span class="Constant">local-scope</span>
 <span id="L107" class="LineNr">107 </span>  <span class="Constant">load-inputs</span>
-<span id="L108" class="LineNr">108 </span>  error? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L108" class="LineNr">108 </span>  error? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L109" class="LineNr">109 </span>  <a href='075channel.mu.html#L36'>source</a>:&amp;:<a href='075channel.mu.html#L36'>source</a>:char, <a href='075channel.mu.html#L40'>sink</a>:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char <span class="Special">&lt;-</span> <a href='075channel.mu.html#L44'>new-channel</a><span class="Constant"> 30</span>
 <span id="L110" class="LineNr">110 </span>  <span class="Delimiter">{</span>
 <span id="L111" class="LineNr">111 </span>    <span class="muControl">break-unless</span> <a href='088file.mu.html#L11'>resources</a>
@@ -175,7 +175,7 @@ if ('onhashchange' in window) {
 <span id="L115" class="LineNr">115 </span>  <span class="Delimiter">}</span>
 <span id="L116" class="LineNr">116 </span>  <span class="Comment"># real file system</span>
 <span id="L117" class="LineNr">117 </span>  file:num <span class="Special">&lt;-</span> $open-file-for-writing filename
-<span id="L118" class="LineNr">118 </span>  <span class="muControl">return-unless</span> file, <span class="Constant">0/sink</span>, <span class="Constant">0/routine-id</span>, <span class="Constant">1/error?</span>
+<span id="L118" class="LineNr">118 </span>  <span class="muControl">return-unless</span> file,<span class="Constant"> null/sink,</span> <span class="Constant">0/routine-id</span>,<span class="Constant"> true/error</span>
 <span id="L119" class="LineNr">119 </span>  <span class="Delimiter">{</span>
 <span id="L120" class="LineNr">120 </span>    <span class="muControl">break-if</span> file
 <span id="L121" class="LineNr">121 </span>    msg:text <span class="Special">&lt;-</span> append <span class="Constant">[no such file: ]</span> filename
@@ -188,7 +188,7 @@ if ('onhashchange' in window) {
 <span id="L128" class="LineNr">128 </span>  <span class="Constant">local-scope</span>
 <span id="L129" class="LineNr">129 </span>  <span class="Constant">load-inputs</span>
 <span id="L130" class="LineNr">130 </span>  <span class="Comment"># todo: really create an empty file</span>
-<span id="L131" class="LineNr">131 </span>  <span class="muControl">return-unless</span> contents, <a href='088file.mu.html#L11'>resources</a>, <span class="Constant">0/no-error</span>
+<span id="L131" class="LineNr">131 </span>  <span class="muControl">return-unless</span> contents, <a href='088file.mu.html#L11'>resources</a>,<span class="Constant"> false/no-error</span>
 <span id="L132" class="LineNr">132 </span>  sink-file:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, write-routine:num, error?:bool <span class="Special">&lt;-</span> <a href='088file.mu.html#L105'>start-writing</a> <a href='088file.mu.html#L11'>resources</a>, filename
 <span id="L133" class="LineNr">133 </span>  <span class="muControl">return-if</span> error?
 <span id="L134" class="LineNr">134 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
@@ -235,7 +235,7 @@ if ('onhashchange' in window) {
 <span id="L175" class="LineNr">175 </span>  contents:text <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
 <span id="L176" class="LineNr">176 </span>  new-resource:<a href='088file.mu.html#L16'>resource</a> <span class="Special">&lt;-</span> merge filename, contents
 <span id="L177" class="LineNr">177 </span>  <span class="Comment"># write to resources</span>
-<span id="L178" class="LineNr">178 </span>  curr-filename:text <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L178" class="LineNr">178 </span>  curr-filename:text <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L179" class="LineNr">179 </span>  data:&amp;:@:<a href='088file.mu.html#L16'>resource</a> <span class="Special">&lt;-</span> get *resources, <span class="Constant">data:offset</span>
 <span id="L180" class="LineNr">180 </span>  <span class="Comment"># replace file contents if it already exists</span>
 <span id="L181" class="LineNr">181 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
diff --git a/html/089scenario_filesystem.cc.html b/html/089scenario_filesystem.cc.html
index d9d727b6..5d9d7c6a 100644
--- a/html/089scenario_filesystem.cc.html
+++ b/html/089scenario_filesystem.cc.html
@@ -132,15 +132,15 @@ if ('onhashchange' in window) {
 <span id="L71" class="LineNr"> 71 </span>]
 <span id="L72" class="LineNr"> 72 </span>
 <span id="L73" class="LineNr"> 73 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L74" class="LineNr"> 74 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> RESOURCES = Next_predefined_global_for_scenarios++<span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> RESOURCES = next_predefined_global_for_scenarios<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">size_of(address:resources)</span><span class="Comment">*/</span><span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L75" class="LineNr"> 75 </span><span class="Comment">//: give 'resources' a fixed location in scenarios</span>
 <span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(before &quot;End Special Scenario Variable Names(r)&quot;)</span>
 <span id="L77" class="LineNr"> 77 </span>Name[r][<span class="Constant">&quot;resources&quot;</span>] = RESOURCES<span class="Delimiter">;</span>
 <span id="L78" class="LineNr"> 78 </span><span class="Comment">//: make 'resources' always a raw location in scenarios</span>
-<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L161'>is_special_name</a> Special-cases&quot;)</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End <a href='042name.cc.html#L172'>is_special_name</a> Special-cases&quot;)</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Normal">if</span> <span class="Delimiter">(</span>s == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(before &quot;End Initialize Type Of Special Name In Scenario(r)&quot;)</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> r<span class="Delimiter">.</span>type = <a href='018type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:resources&quot;</span><span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Normal">if</span> <span class="Delimiter">(</span>r<span class="Delimiter">.</span>name == <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">)</span> r<span class="Delimiter">.</span>type = <a href='019type_abbreviations.cc.html#L58'>new_type_tree</a><span class="Delimiter">(</span><span class="Constant">&quot;address:resources&quot;</span><span class="Delimiter">);</span>
 <span id="L83" class="LineNr"> 83 </span>
 <span id="L84" class="LineNr"> 84 </span><span class="Delimiter">:(before &quot;End initialize_transform_rewrite_literal_string_to_text()&quot;)</span>
 <span id="L85" class="LineNr"> 85 </span>recipes_taking_literal_strings<span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;assume-resources&quot;</span><span class="Delimiter">);</span>
@@ -173,54 +173,54 @@ if ('onhashchange' in window) {
 <span id="L112" class="LineNr">112 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
 <span id="L113" class="LineNr">113 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L114" class="LineNr">114 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L115" class="LineNr">115 </span>    <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>    <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L116" class="LineNr">116 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>    string filename = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span>    string filename = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L118" class="LineNr">118 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>filename<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L119" class="LineNr">119 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L120" class="LineNr">120 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L203'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L120" class="LineNr">120 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L226'>end</a> of file (0)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L121" class="LineNr">121 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L122" class="LineNr">122 </span>    <span class="Delimiter">}</span>
 <span id="L123" class="LineNr">123 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*filename<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L124" class="LineNr">124 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L124" class="LineNr">124 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L125" class="LineNr">125 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L126" class="LineNr">126 </span>    <span class="Delimiter">}</span>
 <span id="L127" class="LineNr">127 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*filename<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> != <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L203'>end</a> with a ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L128" class="LineNr">128 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L226'>end</a> with a ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L129" class="LineNr">129 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L130" class="LineNr">130 </span>    <span class="Delimiter">}</span>
 <span id="L131" class="LineNr">131 </span>    filename<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="L132" class="LineNr">132 </span>    filename<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>filename<span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L133" class="LineNr">133 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L134" class="LineNr">134 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L135" class="LineNr">135 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L136" class="LineNr">136 </span>    <span class="Delimiter">}</span>
-<span id="L137" class="LineNr">137 </span>    string arrow = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L137" class="LineNr">137 </span>    string arrow = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L138" class="LineNr">138 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>arrow<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L139" class="LineNr">139 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L140" class="LineNr">140 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L203'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L140" class="LineNr">140 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L226'>end</a> of file (1)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L141" class="LineNr">141 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L142" class="LineNr">142 </span>    <span class="Delimiter">}</span>
 <span id="L143" class="LineNr">143 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>arrow != <span class="Constant">&quot;&lt;-&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L144" class="LineNr">144 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: expected '&lt;-' after filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' but got '&quot;</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L144" class="LineNr">144 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: expected '&lt;-' after filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' but got '&quot;</span> &lt;&lt; arrow &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L145" class="LineNr">145 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L146" class="LineNr">146 </span>    <span class="Delimiter">}</span>
 <span id="L147" class="LineNr">147 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L148" class="LineNr">148 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' after '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L148" class="LineNr">148 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: no data for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' after '&lt;-'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L149" class="LineNr">149 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L150" class="LineNr">150 </span>    <span class="Delimiter">}</span>
-<span id="L151" class="LineNr">151 </span>    string contents = <a href='011load.cc.html#L167'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L151" class="LineNr">151 </span>    string contents = <a href='011load.cc.html#L169'>next_word</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L152" class="LineNr">152 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L153" class="LineNr">153 </span>      assert<span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">));</span>
-<span id="L154" class="LineNr">154 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L203'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L154" class="LineNr">154 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;incomplete 'resources' block at <a href='003trace.cc.html#L226'>end</a> of file (2)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L155" class="LineNr">155 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L156" class="LineNr">156 </span>    <span class="Delimiter">}</span>
 <span id="L157" class="LineNr">157 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*contents<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> != <span class="Constant">'['</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L158" class="LineNr">158 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must begin with a '['</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L159" class="LineNr">159 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L160" class="LineNr">160 </span>    <span class="Delimiter">}</span>
 <span id="L161" class="LineNr">161 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*contents<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> != <span class="Constant">']'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L203'>end</a> with a ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L162" class="LineNr">162 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents '&quot;</span> &lt;&lt; contents &lt;&lt; <span class="Constant">&quot;' for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must <a href='003trace.cc.html#L226'>end</a> with a ']'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L163" class="LineNr">163 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L164" class="LineNr">164 </span>    <span class="Delimiter">}</span>
 <span id="L165" class="LineNr">165 </span>    contents<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>
@@ -233,14 +233,14 @@ if ('onhashchange' in window) {
 <span id="L172" class="LineNr">172 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>data<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
 <span id="L173" class="LineNr">173 </span>  istringstream in<span class="Delimiter">(</span>data<span class="Delimiter">);</span>
 <span id="L174" class="LineNr">174 </span>  in &gt;&gt; std::noskipws<span class="Delimiter">;</span>
-<span id="L175" class="LineNr">175 </span>  <a href='011load.cc.html#L209'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  <a href='011load.cc.html#L211'>skip_whitespace_and_comments</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L176" class="LineNr">176 </span>  ostringstream out<span class="Delimiter">;</span>
 <span id="L177" class="LineNr">177 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L178" class="LineNr">178 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>    <a href='038new_text.cc.html#L220'>skip_whitespace</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L179" class="LineNr">179 </span>    <a href='038new_text.cc.html#L229'>skip_whitespace</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
 <span id="L180" class="LineNr">180 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_data<span class="Delimiter">(</span>in<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L181" class="LineNr">181 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>peek<span class="Delimiter">()</span> != <span class="Constant">'|'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L182" class="LineNr">182 </span>      <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must be delimited in '|'s</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L182" class="LineNr">182 </span>      <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents for filename '&quot;</span> &lt;&lt; filename &lt;&lt; <span class="Constant">&quot;' must be delimited in '|'s</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L183" class="LineNr">183 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L184" class="LineNr">184 </span>    <span class="Delimiter">}</span>
 <span id="L185" class="LineNr">185 </span>    in<span class="Delimiter">.</span>get<span class="Delimiter">();</span>  <span class="Comment">// skip leading '|'</span>
@@ -251,7 +251,7 @@ if ('onhashchange' in window) {
 <span id="L190" class="LineNr">190 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> == <span class="cSpecial">'\\'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L191" class="LineNr">191 </span>        ++i<span class="Delimiter">;</span>  <span class="Comment">// skip</span>
 <span id="L192" class="LineNr">192 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>i == <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>line<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L193" class="LineNr">193 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents can't end a line with '</span><span class="cSpecial">\\</span><span class="Constant">'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L193" class="LineNr">193 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; caller &lt;&lt; <span class="Constant">&quot;: assume-resources: file contents can't end a line with '</span><span class="cSpecial">\\</span><span class="Constant">'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L194" class="LineNr">194 </span>          <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L195" class="LineNr">195 </span>        <span class="Delimiter">}</span>
 <span id="L196" class="LineNr">196 </span>      <span class="Delimiter">}</span>
@@ -264,39 +264,41 @@ if ('onhashchange' in window) {
 <span id="L203" class="LineNr">203 </span><span class="Delimiter">}</span>
 <span id="L204" class="LineNr">204 </span>
 <span id="L205" class="LineNr">205 </span><span class="Normal">void</span> <a href='089scenario_filesystem.cc.html#L205'>construct_resources_object</a><span class="Delimiter">(</span><span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> string&gt;&amp; contents<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L206" class="LineNr">206 </span>  <span class="Normal">int</span> resources_data_address = allocate<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">)</span>*<span class="Constant">2</span> + <span class="Comment">/*</span><span class="Comment">array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L207" class="LineNr">207 </span>  <span class="Normal">int</span> curr = resources_data_address + <span class="Comment">/*</span><span class="Comment">skip length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::const_iterator p = contents<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != contents<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L209" class="LineNr">209 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">));</span>
-<span id="L210" class="LineNr">210 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file name &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L211" class="LineNr">211 </span>    ++curr<span class="Delimiter">;</span>
-<span id="L212" class="LineNr">212 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">));</span>
-<span id="L213" class="LineNr">213 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file contents &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L214" class="LineNr">214 </span>    ++curr<span class="Delimiter">;</span>
-<span id="L215" class="LineNr">215 </span>  <span class="Delimiter">}</span>
-<span id="L216" class="LineNr">216 </span>  curr = resources_data_address<span class="Delimiter">;</span>
-<span id="L217" class="LineNr">217 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>  <span class="Comment">// size of array</span>
-<span id="L218" class="LineNr">218 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources size &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L219" class="LineNr">219 </span>  <span class="Comment">// wrap the resources data in a 'resources' object</span>
-<span id="L220" class="LineNr">220 </span>  <span class="Normal">int</span> resources_address = allocate<span class="Delimiter">(</span><a href='089scenario_filesystem.cc.html#L229'>size_of_resources</a><span class="Delimiter">());</span>
-<span id="L221" class="LineNr">221 </span>  curr = resources_address+<span class="Comment">/*</span><span class="Comment">offset of 'data' element</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L222" class="LineNr">222 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> resources_data_address<span class="Delimiter">);</span>
-<span id="L223" class="LineNr">223 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources data <a href='043space.cc.html#L80'>address</a> &quot;</span> &lt;&lt; resources_data_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L224" class="LineNr">224 </span>  <span class="Comment">// save in product</span>
-<span id="L225" class="LineNr">225 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> RESOURCES<span class="Delimiter">,</span> resources_address<span class="Delimiter">);</span>
-<span id="L226" class="LineNr">226 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources <a href='043space.cc.html#L80'>address</a> &quot;</span> &lt;&lt; resources_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; RESOURCES &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L227" class="LineNr">227 </span><span class="Delimiter">}</span>
-<span id="L228" class="LineNr">228 </span>
-<span id="L229" class="LineNr">229 </span><span class="Normal">int</span> <a href='089scenario_filesystem.cc.html#L229'>size_of_resources</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L230" class="LineNr">230 </span>  <span class="Comment">// memoize result if already computed</span>
-<span id="L231" class="LineNr">231 </span>  <span class="Normal">static</span> <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L233" class="LineNr">233 </span>  assert<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">));</span>
-<span id="L234" class="LineNr">234 </span>  type_tree* type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;resources&quot;</span><span class="Delimiter">);</span>
-<span id="L235" class="LineNr">235 </span>  result = size_of<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
-<span id="L236" class="LineNr">236 </span>  <span class="Normal">delete</span> type<span class="Delimiter">;</span>
-<span id="L237" class="LineNr">237 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L238" class="LineNr">238 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Normal">int</span> resources_data_address = allocate<span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">)</span> * <span class="Comment">/*</span><span class="Comment">size of resource</span><span class="Comment">*/</span><span class="Constant">4</span> + <span class="Comment">/*</span><span class="Comment">array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L207" class="LineNr">207 </span>  <span class="Normal">int</span> curr = resources_data_address + <span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span> + <span class="Comment">/*</span><span class="Comment">skip array length</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L208" class="LineNr">208 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::const_iterator p = contents<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != contents<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L209" class="LineNr">209 </span>    ++curr<span class="Delimiter">;</span>  <span class="Comment">// skip alloc id of resource.name</span>
+<span id="L210" class="LineNr">210 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">));</span>
+<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file name &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L212" class="LineNr">212 </span>    ++curr<span class="Delimiter">;</span>
+<span id="L213" class="LineNr">213 </span>    ++curr<span class="Delimiter">;</span>  <span class="Comment">// skip alloc id of resource.contents</span>
+<span id="L214" class="LineNr">214 </span>    <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">));</span>
+<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing file contents &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L216" class="LineNr">216 </span>    ++curr<span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
+<span id="L218" class="LineNr">218 </span>  curr = resources_data_address + <span class="Comment">/*</span><span class="Comment">skip alloc id of resources.data</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>contents<span class="Delimiter">));</span>  <span class="Comment">// array length</span>
+<span id="L220" class="LineNr">220 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources size &quot;</span> &lt;&lt; get<span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Comment">// wrap the resources data in a 'resources' object</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Normal">int</span> resources_address = allocate<span class="Delimiter">(</span><a href='089scenario_filesystem.cc.html#L231'>size_of_resources</a><span class="Delimiter">());</span>
+<span id="L223" class="LineNr">223 </span>  curr = resources_address+<span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">offset of 'data' element</span><span class="Comment">*/</span><span class="Constant">1</span>+<span class="Comment">/*</span><span class="Comment">skip alloc id of 'data' element</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> resources_data_address<span class="Delimiter">);</span>
+<span id="L225" class="LineNr">225 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources data <a href='043space.cc.html#L101'>address</a> &quot;</span> &lt;&lt; resources_data_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; curr &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Comment">// save in product</span>
+<span id="L227" class="LineNr">227 </span>  <a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> RESOURCES+<span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">,</span> resources_address<span class="Delimiter">);</span>
+<span id="L228" class="LineNr">228 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;mem&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing resources <a href='043space.cc.html#L101'>address</a> &quot;</span> &lt;&lt; resources_address &lt;&lt; <span class="Constant">&quot; in location &quot;</span> &lt;&lt; RESOURCES &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L229" class="LineNr">229 </span><span class="Delimiter">}</span>
+<span id="L230" class="LineNr">230 </span>
+<span id="L231" class="LineNr">231 </span><span class="Normal">int</span> <a href='089scenario_filesystem.cc.html#L231'>size_of_resources</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Comment">// memoize result if already computed</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Normal">static</span> <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">)</span> <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L235" class="LineNr">235 </span>  assert<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Type_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;resources&quot;</span><span class="Delimiter">));</span>
+<span id="L236" class="LineNr">236 </span>  type_tree* type = <span class="Normal">new</span> type_tree<span class="Delimiter">(</span><span class="Constant">&quot;resources&quot;</span><span class="Delimiter">);</span>
+<span id="L237" class="LineNr">237 </span>  result = size_of<span class="Delimiter">(</span>type<span class="Delimiter">);</span>
+<span id="L238" class="LineNr">238 </span>  <span class="Normal">delete</span> type<span class="Delimiter">;</span>
+<span id="L239" class="LineNr">239 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">}</span>
 </pre>
 </body>
 </html>
diff --git a/html/090scenario_filesystem_test.mu.html b/html/090scenario_filesystem_test.mu.html
index 917665b1..8291c5fb 100644
--- a/html/090scenario_filesystem_test.mu.html
+++ b/html/090scenario_filesystem_test.mu.html
@@ -15,12 +15,12 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/091socket.cc.html b/html/091socket.cc.html
index bcd1288d..1509b08e 100644
--- a/html/091socket.cc.html
+++ b/html/091socket.cc.html
@@ -22,7 +22,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .CommentedCode { color: #6c6c6c; }
 .cSpecial { color: #008000; }
 -->
@@ -66,7 +65,7 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr">  5 </span>  <span class="Normal">bool</span> polled<span class="Delimiter">;</span>
 <span id="L6" class="LineNr">  6 </span>  socket_t<span class="Delimiter">()</span> <span class="Delimiter">{</span>
 <span id="L7" class="LineNr">  7 </span>    fd = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L8" class="LineNr">  8 </span>    polled = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L8" class="LineNr">  8 </span>    polled =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L9" class="LineNr">  9 </span>    bzero<span class="Delimiter">(</span>&amp;addr<span class="Delimiter">,</span> <span class="Normal">sizeof</span><span class="Delimiter">(</span>addr<span class="Delimiter">));</span>
 <span id="L10" class="LineNr"> 10 </span>  <span class="Delimiter">}</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Delimiter">};</span>
@@ -78,30 +77,30 @@ if ('onhashchange' in window) {
 <span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L18" class="LineNr"> 18 </span><span class="Normal">case</span> _OPEN_CLIENT_SOCKET: <span class="Delimiter">{</span>
 <span id="L19" class="LineNr"> 19 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-client-socket' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-client-socket' requires exactly two ingredients, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L21" class="LineNr"> 21 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Delimiter">}</span>
 <span id="L23" class="LineNr"> 23 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L24" class="LineNr"> 24 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-client-socket' should be text (the hostname), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L24" class="LineNr"> 24 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-client-socket' should be text (the hostname), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L25" class="LineNr"> 25 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L26" class="LineNr"> 26 </span>  <span class="Delimiter">}</span>
 <span id="L27" class="LineNr"> 27 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L28" class="LineNr"> 28 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of '$open-client-socket' should be a number (the port of the hostname to connect to), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L28" class="LineNr"> 28 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second ingredient of '$open-client-socket' should be a number (the port of the hostname to connect to), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L29" class="LineNr"> 29 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L30" class="LineNr"> 30 </span>  <span class="Delimiter">}</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L32" class="LineNr"> 32 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-client-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L32" class="LineNr"> 32 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-client-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L33" class="LineNr"> 33 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Delimiter">}</span>
 <span id="L35" class="LineNr"> 35 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L36" class="LineNr"> 36 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-client-socket' should be a number (socket handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L36" class="LineNr"> 36 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-client-socket' should be a number (socket handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L37" class="LineNr"> 37 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L38" class="LineNr"> 38 </span>  <span class="Delimiter">}</span>
 <span id="L39" class="LineNr"> 39 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L40" class="LineNr"> 40 </span><span class="Delimiter">}</span>
 <span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
 <span id="L42" class="LineNr"> 42 </span><span class="Normal">case</span> _OPEN_CLIENT_SOCKET: <span class="Delimiter">{</span>
-<span id="L43" class="LineNr"> 43 </span>  string host = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L43" class="LineNr"> 43 </span>  string host = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L44" class="LineNr"> 44 </span>  <span class="Normal">int</span> port = ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L45" class="LineNr"> 45 </span>  socket_t* client = <a href='091socket.cc.html#L57'>client_socket</a><span class="Delimiter">(</span>host<span class="Delimiter">,</span> port<span class="Delimiter">);</span>
 <span id="L46" class="LineNr"> 46 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
@@ -119,7 +118,7 @@ if ('onhashchange' in window) {
 <span id="L58" class="LineNr"> 58 </span>  socket_t* result = <span class="Normal">new</span> socket_t<span class="Delimiter">;</span>
 <span id="L59" class="LineNr"> 59 </span>  result<span class="Delimiter">-&gt;</span>fd = socket<span class="Delimiter">(</span>AF_INET<span class="Delimiter">,</span> SOCK_STREAM<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L60" class="LineNr"> 60 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>fd &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L61" class="LineNr"> 61 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to create socket.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L61" class="LineNr"> 61 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to create socket.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L62" class="LineNr"> 62 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L63" class="LineNr"> 63 </span>  <span class="Delimiter">}</span>
 <span id="L64" class="LineNr"> 64 </span>  result<span class="Delimiter">-&gt;</span>addr<span class="Delimiter">.</span>sin_family = AF_INET<span class="Delimiter">;</span>
@@ -129,7 +128,7 @@ if ('onhashchange' in window) {
 <span id="L68" class="LineNr"> 68 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>connect<span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>fd<span class="Delimiter">,</span> <span class="Normal">reinterpret_cast</span>&lt;sockaddr*&gt;<span class="Delimiter">(</span>&amp;result<span class="Delimiter">-&gt;</span>addr<span class="Delimiter">),</span> <span class="Normal">sizeof</span><span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>addr<span class="Delimiter">))</span> &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L69" class="LineNr"> 69 </span>    close<span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>fd<span class="Delimiter">);</span>
 <span id="L70" class="LineNr"> 70 </span>    result<span class="Delimiter">-&gt;</span>fd = -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L71" class="LineNr"> 71 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to connect to &quot;</span> &lt;&lt; host &lt;&lt; <span class="Constant">':'</span> &lt;&lt; port &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L71" class="LineNr"> 71 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to connect to &quot;</span> &lt;&lt; host &lt;&lt; <span class="Constant">':'</span> &lt;&lt; port &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">}</span>
 <span id="L73" class="LineNr"> 73 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
@@ -141,19 +140,19 @@ if ('onhashchange' in window) {
 <span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L81" class="LineNr"> 81 </span><span class="Normal">case</span> _OPEN_SERVER_SOCKET: <span class="Delimiter">{</span>
 <span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L83" class="LineNr"> 83 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-server-socket' requires exactly one ingredient (the port to listen for requests on), but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L83" class="LineNr"> 83 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-server-socket' requires exactly one ingredient (the port to listen for requests on), but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L84" class="LineNr"> 84 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L85" class="LineNr"> 85 </span>  <span class="Delimiter">}</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-server-socket' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$open-server-socket' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L88" class="LineNr"> 88 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Delimiter">}</span>
 <span id="L90" class="LineNr"> 90 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L91" class="LineNr"> 91 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-server-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$open-server-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L92" class="LineNr"> 92 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L93" class="LineNr"> 93 </span>  <span class="Delimiter">}</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-server-socket' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L95" class="LineNr"> 95 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$open-server-socket' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L96" class="LineNr"> 96 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L97" class="LineNr"> 97 </span>  <span class="Delimiter">}</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -177,7 +176,7 @@ if ('onhashchange' in window) {
 <span id="L116" class="LineNr">116 </span>  socket_t* result = <span class="Normal">new</span> socket_t<span class="Delimiter">;</span>
 <span id="L117" class="LineNr">117 </span>  result<span class="Delimiter">-&gt;</span>fd = socket<span class="Delimiter">(</span>AF_INET<span class="Delimiter">,</span> SOCK_STREAM<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>fd &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L119" class="LineNr">119 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to create server socket.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L119" class="LineNr">119 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to create server socket.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L120" class="LineNr">120 </span>    <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L121" class="LineNr">121 </span>  <span class="Delimiter">}</span>
 <span id="L122" class="LineNr">122 </span>  <span class="Normal">int</span> dummy = <span class="Constant">0</span><span class="Delimiter">;</span>
@@ -191,7 +190,7 @@ if ('onhashchange' in window) {
 <span id="L130" class="LineNr">130 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
 <span id="L131" class="LineNr">131 </span>    close<span class="Delimiter">(</span>result<span class="Delimiter">-&gt;</span>fd<span class="Delimiter">);</span>
 <span id="L132" class="LineNr">132 </span>    result<span class="Delimiter">-&gt;</span>fd = -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L133" class="LineNr">133 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to bind result socket to port &quot;</span> &lt;&lt; port &lt;&lt; <span class="Constant">&quot;. Something's already using that port.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L133" class="LineNr">133 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <span class="Constant">&quot;Failed to bind result socket to port &quot;</span> &lt;&lt; port &lt;&lt; <span class="Constant">&quot;. Something's already using that port.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
 <span id="L134" class="LineNr">134 </span>  <span class="Delimiter">}</span>
 <span id="L135" class="LineNr">135 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L136" class="LineNr">136 </span><span class="Delimiter">}</span>
@@ -203,19 +202,19 @@ if ('onhashchange' in window) {
 <span id="L142" class="LineNr">142 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L143" class="LineNr">143 </span><span class="Normal">case</span> _ACCEPT: <span class="Delimiter">{</span>
 <span id="L144" class="LineNr">144 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L145" class="LineNr">145 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$accept' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L145" class="LineNr">145 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$accept' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L146" class="LineNr">146 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L147" class="LineNr">147 </span>  <span class="Delimiter">}</span>
 <span id="L148" class="LineNr">148 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L149" class="LineNr">149 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$accept' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L149" class="LineNr">149 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$accept' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L150" class="LineNr">150 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
 <span id="L152" class="LineNr">152 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$accept' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$accept' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L154" class="LineNr">154 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L155" class="LineNr">155 </span>  <span class="Delimiter">}</span>
 <span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L157" class="LineNr">157 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$accept' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L157" class="LineNr">157 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$accept' should be a number (file handle), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L158" class="LineNr">158 </span>    <span class="Identifier">break</span><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">break</span><span class="Delimiter">;</span>
@@ -252,32 +251,32 @@ if ('onhashchange' in window) {
 <span id="L191" class="LineNr">191 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L192" class="LineNr">192 </span><span class="Normal">case</span> _READ_FROM_SOCKET: <span class="Delimiter">{</span>
 <span id="L193" class="LineNr">193 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L194" class="LineNr">194 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-socket' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L194" class="LineNr">194 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-socket' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L195" class="LineNr">195 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L196" class="LineNr">196 </span>  <span class="Delimiter">}</span>
 <span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L198" class="LineNr">198 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$read-from-socket' should be a number (socket), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L198" class="LineNr">198 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$read-from-socket' should be a number (socket), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L199" class="LineNr">199 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L200" class="LineNr">200 </span>  <span class="Delimiter">}</span>
 <span id="L201" class="LineNr">201 </span>  <span class="Normal">int</span> nprod = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">);</span>
 <span id="L202" class="LineNr">202 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>nprod == <span class="Constant">0</span> || nprod &gt; <span class="Constant">4</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L203" class="LineNr">203 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-socket' requires 1-4 products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L203" class="LineNr">203 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$read-from-socket' requires 1-4 products, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L204" class="LineNr">204 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L205" class="LineNr">205 </span>  <span class="Delimiter">}</span>
 <span id="L206" class="LineNr">206 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_character<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L207" class="LineNr">207 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$read-from-socket' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L207" class="LineNr">207 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first product of '$read-from-socket' should be a character, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L208" class="LineNr">208 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Delimiter">}</span>
 <span id="L210" class="LineNr">210 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>nprod &gt; <span class="Constant">1</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product of '$read-from-socket' should be a boolean (data received?), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L211" class="LineNr">211 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;second product of '$read-from-socket' should be a boolean (data received?), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L212" class="LineNr">212 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L213" class="LineNr">213 </span>  <span class="Delimiter">}</span>
 <span id="L214" class="LineNr">214 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>nprod &gt; <span class="Constant">2</span> &amp;&amp; !is_mu_boolean<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;third product of '$read-from-socket' should be a boolean (eof?), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L215" class="LineNr">215 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;third product of '$read-from-socket' should be a boolean (eof?), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L216" class="LineNr">216 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
 <span id="L218" class="LineNr">218 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>nprod &gt; <span class="Constant">3</span> &amp;&amp; !is_mu_number<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L219" class="LineNr">219 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;fourth product of '$read-from-socket' should be a number (error code), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L219" class="LineNr">219 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;fourth product of '$read-from-socket' should be a number (error code), but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L220" class="LineNr">220 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L221" class="LineNr">221 </span>  <span class="Delimiter">}</span>
 <span id="L222" class="LineNr">222 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -313,14 +312,14 @@ if ('onhashchange' in window) {
 <span id="L252" class="LineNr">252 </span>    <span class="Delimiter">}</span>
 <span id="L253" class="LineNr">253 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>poll_result &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L254" class="LineNr">254 </span>      <span class="Normal">int</span> error_code = errno<span class="Delimiter">;</span>
-<span id="L255" class="LineNr">255 </span>      <a href='003trace.cc.html#L174'>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;error in $read-from-socket</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L255" class="LineNr">255 </span>      <a href='003trace.cc.html#L197'>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;error in $read-from-socket</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L256" class="LineNr">256 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">no data</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L257" class="LineNr">257 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">found</span><span class="Comment">*/</span><span class="Constant">false</span><span class="Delimiter">);</span>
 <span id="L258" class="LineNr">258 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">eof</span><span class="Comment">*/</span><span class="Constant">false</span><span class="Delimiter">);</span>
 <span id="L259" class="LineNr">259 </span>      products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span>error_code<span class="Delimiter">);</span>
 <span id="L260" class="LineNr">260 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L261" class="LineNr">261 </span>    <span class="Delimiter">}</span>
-<span id="L262" class="LineNr">262 </span>    socket<span class="Delimiter">-&gt;</span>polled = <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L262" class="LineNr">262 </span>    socket<span class="Delimiter">-&gt;</span>polled =<span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L263" class="LineNr">263 </span>  <span class="Delimiter">}</span>
 <span id="L264" class="LineNr">264 </span>  <span class="Normal">char</span> c = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
 <span id="L265" class="LineNr">265 </span>  <span class="Normal">int</span> error_code = <span class="Constant">0</span><span class="Delimiter">;</span>
@@ -345,7 +344,7 @@ if ('onhashchange' in window) {
 <span id="L284" class="LineNr">284 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L285" class="LineNr">285 </span><span class="Normal">case</span> _WRITE_TO_SOCKET: <span class="Delimiter">{</span>
 <span id="L286" class="LineNr">286 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L287" class="LineNr">287 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-socket' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L287" class="LineNr">287 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$write-to-socket' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L288" class="LineNr">288 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L289" class="LineNr">289 </span>  <span class="Delimiter">}</span>
 <span id="L290" class="LineNr">290 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -358,7 +357,7 @@ if ('onhashchange' in window) {
 <span id="L297" class="LineNr">297 </span>  <span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span> y = <span class="Normal">static_cast</span>&lt;<span class="Normal">long</span> <span class="Normal">long</span> <span class="Normal">int</span>&gt;<span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
 <span id="L298" class="LineNr">298 </span>  <span class="Normal">char</span> c = <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span>y<span class="Delimiter">);</span>
 <span id="L299" class="LineNr">299 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>write<span class="Delimiter">(</span>socket<span class="Delimiter">-&gt;</span>fd<span class="Delimiter">,</span> &amp;c<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L300" class="LineNr">300 </span>    <a href='003trace.cc.html#L174'>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;failed to write to socket</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L300" class="LineNr">300 </span>    <a href='003trace.cc.html#L197'>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;failed to write to socket</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L301" class="LineNr">301 </span>    exit<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
 <span id="L302" class="LineNr">302 </span>  <span class="Delimiter">}</span>
 <span id="L303" class="LineNr">303 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
@@ -373,19 +372,19 @@ if ('onhashchange' in window) {
 <span id="L312" class="LineNr">312 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
 <span id="L313" class="LineNr">313 </span><span class="Normal">case</span> _CLOSE_SOCKET: <span class="Delimiter">{</span>
 <span id="L314" class="LineNr">314 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L315" class="LineNr">315 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-socket' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L315" class="LineNr">315 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-socket' requires exactly two ingredient, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L316" class="LineNr">316 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L317" class="LineNr">317 </span>  <span class="Delimiter">}</span>
 <span id="L318" class="LineNr">318 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_number<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L319" class="LineNr">319 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$close-socket' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L319" class="LineNr">319 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of '$close-socket' should be a number, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L320" class="LineNr">320 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L321" class="LineNr">321 </span>  <span class="Delimiter">}</span>
 <span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L323" class="LineNr">323 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L323" class="LineNr">323 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'$close-socket' requires exactly one product, but got '&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L324" class="LineNr">324 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L325" class="LineNr">325 </span>  <span class="Delimiter">}</span>
 <span id="L326" class="LineNr">326 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name != inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>name<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L327" class="LineNr">327 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of '$close-socket' 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L327" class="LineNr">327 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;product of '$close-socket' 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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L328" class="LineNr">328 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L329" class="LineNr">329 </span>  <span class="Delimiter">}</span>
 <span id="L330" class="LineNr">330 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
@@ -402,11 +401,11 @@ if ('onhashchange' in window) {
 <span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
 <span id="L342" class="LineNr">342 </span>
 <span id="L343" class="LineNr">343 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L344" class="LineNr">344 </span><span class="PreProc">#include </span><span class="Constant">&lt;netinet/in.h&gt;</span>
-<span id="L345" class="LineNr">345 </span><span class="PreProc">#include </span><span class="Constant">&lt;netdb.h&gt;</span>
-<span id="L346" class="LineNr">346 </span><span class="PreProc">#include </span><span class="Constant">&lt;poll.h&gt;</span>
-<span id="L347" class="LineNr">347 </span><span class="PreProc">#include </span><span class="Constant">&lt;sys/socket.h&gt;</span>
-<span id="L348" class="LineNr">348 </span><span class="PreProc">#include </span><span class="Constant">&lt;unistd.h&gt;</span>
+<span id="L344" class="LineNr">344 </span><span class="Comment">#include &lt;netinet/in.h&gt;</span>
+<span id="L345" class="LineNr">345 </span><span class="Comment">#include &lt;netdb.h&gt;</span>
+<span id="L346" class="LineNr">346 </span><span class="Comment">#include &lt;poll.h&gt;</span>
+<span id="L347" class="LineNr">347 </span><span class="Comment">#include &lt;sys/socket.h&gt;</span>
+<span id="L348" class="LineNr">348 </span><span class="Comment">#include &lt;unistd.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/092socket.mu.html b/html/092socket.mu.html
index c4f4b080..bf293b90 100644
--- a/html/092socket.mu.html
+++ b/html/092socket.mu.html
@@ -16,15 +16,15 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .muControl { color: #c0a020; }
-.muScenario { color: #00af00; }
+.muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
+.muData { color: #ffff00; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muRecipe { color: #ff8700; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -68,14 +68,14 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span>  <span class="Comment"># that way repeatedly running the test will give ports time to timeout and</span>
 <span id="L8" class="LineNr">  8 </span>  <span class="Comment"># close before reusing them</span>
 <span id="L9" class="LineNr">  9 </span>  make-random-nondeterministic
-<span id="L10" class="LineNr"> 10 </span>  port:num <span class="Special">&lt;-</span> <a href='068random.mu.html#L58'>random-in-range</a> <span class="Constant">0/real-random-numbers</span>,<span class="Constant"> 8000</span>,<span class="Constant"> 8100</span>
+<span id="L10" class="LineNr"> 10 </span>  port:num <span class="Special">&lt;-</span> <a href='068random.mu.html#L58'>random-in-range</a><span class="Constant"> null/real-random-numbers, 8000</span>,<span class="Constant"> 8100</span>
 <span id="L11" class="LineNr"> 11 </span>  run [
 <span id="L12" class="LineNr"> 12 </span>    socket:num <span class="Special">&lt;-</span> $open-server-socket port
 <span id="L13" class="LineNr"> 13 </span>    assert socket, <span class="Constant">[ </span>
 <span id="L14" class="LineNr"> 14 </span><span class="Constant">F - example-server-test: $open-server-socket failed]</span>
 <span id="L15" class="LineNr"> 15 </span>    handler-routine:number <span class="Special">&lt;-</span> <span class="muControl">start-running</span> <a href='092socket.mu.html#L55'>serve-one-request</a> socket, <a href='092socket.mu.html#L26'>example-handler</a>
 <span id="L16" class="LineNr"> 16 </span>  ]
-<span id="L17" class="LineNr"> 17 </span>  <a href='075channel.mu.html#L36'>source</a>:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <span class="Constant">0/real-resources</span>, <span class="Constant">[localhost/]</span>, port
+<span id="L17" class="LineNr"> 17 </span>  <a href='075channel.mu.html#L36'>source</a>:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a><span class="Constant"> null/real-resources,</span> <span class="Constant">[localhost/]</span>, port
 <span id="L18" class="LineNr"> 18 </span>  response:text <span class="Special">&lt;-</span> <a href='075channel.mu.html#L499'>drain</a> <a href='075channel.mu.html#L36'>source</a>
 <span id="L19" class="LineNr"> 19 </span>  10:@:char/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *response
 <span id="L20" class="LineNr"> 20 </span>  memory-should-contain [
diff --git a/html/099hardware_checks.cc.html b/html/099hardware_checks.cc.html
index 7889d8a7..c9e32494 100644
--- a/html/099hardware_checks.cc.html
+++ b/html/099hardware_checks.cc.html
@@ -97,7 +97,7 @@ if ('onhashchange' in window) {
 <span id="L35" class="LineNr">35 </span>  <span class="Normal">const</span> recipe&amp; caller = get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">);</span>
 <span id="L36" class="LineNr">36 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
 <span id="L37" class="LineNr">37 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L77'>starts_with</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">,</span> <span class="Constant">&quot;scenario_&quot;</span><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L38" class="LineNr">38 </span>  <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check if <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has any dependency-injection mistakes&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr">38 </span>  <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9991</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;--- check if <a href='010vm.cc.html#L19'>recipe</a> &quot;</span> &lt;&lt; caller<span class="Delimiter">.</span>name &lt;&lt; <span class="Constant">&quot; has any dependency-injection mistakes&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L39" class="LineNr">39 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>steps<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L40" class="LineNr">40 </span>    <span class="Normal">const</span> instruction&amp; inst = caller<span class="Delimiter">.</span>steps<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L41" class="LineNr">41 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='028call_return.cc.html#L115'>is_primitive</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>operation<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
@@ -110,7 +110,7 @@ if ('onhashchange' in window) {
 <span id="L48" class="LineNr">48 </span>      <span class="Normal">const</span> reagent&amp; expected_ing = callee<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
 <span id="L49" class="LineNr">49 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Real_hardware_types<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L50" class="LineNr">50 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>*Real_hardware_types<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">)</span> == *expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span>
-<span id="L51" class="LineNr">51 </span>          <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
+<span id="L51" class="LineNr">51 </span>          <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>caller<span class="Delimiter">.</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_original_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': only 'main' can pass 0 into a &quot;</span> &lt;&lt; <a href='028call_return.cc.html#L163'>to_string</a><span class="Delimiter">(</span>expected_ing<span class="Delimiter">.</span>type<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
 <span id="L52" class="LineNr">52 </span>      <span class="Delimiter">}</span>
 <span id="L53" class="LineNr">53 </span>    <span class="Delimiter">}</span>
 <span id="L54" class="LineNr">54 </span>  <span class="Delimiter">}</span>
diff --git a/html/100trace_browser.cc.html b/html/100trace_browser.cc.html
index 23ac48c7..2e0bb574 100644
--- a/html/100trace_browser.cc.html
+++ b/html/100trace_browser.cc.html
@@ -229,7 +229,7 @@ if ('onhashchange' in window) {
 <span id="L170" class="LineNr">170 </span>    <span class="Delimiter">}</span>
 <span id="L171" class="LineNr">171 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">'J'</span> || key == TB_KEY_PGDN || key == TB_KEY_CTRL_F<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L172" class="LineNr">172 </span>      <span class="Comment">// page-down</span>
-<span id="L173" class="LineNr">173 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_index<span class="Delimiter">.</span>find<span class="Delimiter">(</span>tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">)</span> != Trace_index<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L173" class="LineNr">173 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>Trace_index<span class="Delimiter">.</span>find<span class="Delimiter">(</span>tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">)</span> != Trace_index<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
 <span id="L174" class="LineNr">174 </span>        Top_of_screen = get<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> tb_height<span class="Delimiter">()</span>-<span class="Constant">1</span><span class="Delimiter">)</span> + <span class="Constant">1</span><span class="Delimiter">;</span>
 <span id="L175" class="LineNr">175 </span>        <a href='100trace_browser.cc.html#L402'>refresh_screen_rows</a><span class="Delimiter">();</span>
 <span id="L176" class="LineNr">176 </span>      <span class="Delimiter">}</span>
@@ -267,13 +267,13 @@ if ('onhashchange' in window) {
 <span id="L208" class="LineNr">208 </span>    <span class="Delimiter">}</span>
 <span id="L209" class="LineNr">209 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == TB_KEY_CARRIAGE_RETURN<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L210" class="LineNr">210 </span>      <span class="Comment">// expand lines under current by one level</span>
-<span id="L211" class="LineNr">211 </span>      assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">));</span>
+<span id="L211" class="LineNr">211 </span>      assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">));</span>
 <span id="L212" class="LineNr">212 </span>      <span class="Normal">int</span> start_index = get<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">);</span>
 <span id="L213" class="LineNr">213 </span>      <span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L214" class="LineNr">214 </span>      <span class="Comment">// simultaneously compute end_index and min_depth</span>
 <span id="L215" class="LineNr">215 </span>      <span class="Normal">int</span> min_depth = <span class="Constant">9999</span><span class="Delimiter">;</span>
 <span id="L216" class="LineNr">216 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span>index = start_index+<span class="Constant">1</span><span class="Delimiter">;</span>  index &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">);</span>  ++index<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L217" class="LineNr">217 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Visible<span class="Delimiter">,</span> index<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Visible<span class="Delimiter">,</span> index<span class="Delimiter">))</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L218" class="LineNr">218 </span>        trace_line&amp; curr_line = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>index<span class="Delimiter">);</span>
 <span id="L219" class="LineNr">219 </span>        assert<span class="Delimiter">(</span>curr_line<span class="Delimiter">.</span>depth &gt; Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>start_index<span class="Delimiter">).</span>depth<span class="Delimiter">);</span>
 <span id="L220" class="LineNr">220 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>curr_line<span class="Delimiter">.</span>depth &lt; min_depth<span class="Delimiter">)</span> min_depth = curr_line<span class="Delimiter">.</span>depth<span class="Delimiter">;</span>
@@ -290,7 +290,7 @@ if ('onhashchange' in window) {
 <span id="L231" class="LineNr">231 </span>    <span class="Delimiter">}</span>
 <span id="L232" class="LineNr">232 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == TB_KEY_BACKSPACE || key == TB_KEY_BACKSPACE2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L233" class="LineNr">233 </span>      <span class="Comment">// collapse all lines under current</span>
-<span id="L234" class="LineNr">234 </span>      assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">));</span>
+<span id="L234" class="LineNr">234 </span>      assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">));</span>
 <span id="L235" class="LineNr">235 </span>      <span class="Normal">int</span> start_index = get<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> Display_row<span class="Delimiter">);</span>
 <span id="L236" class="LineNr">236 </span>      <span class="Normal">int</span> index = <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L237" class="LineNr">237 </span>      <span class="Comment">// end_index is the next line at a depth same as or lower than start_index</span>
@@ -343,10 +343,10 @@ if ('onhashchange' in window) {
 <span id="L284" class="LineNr">284 </span>        Current_search_pattern = pattern<span class="Delimiter">;</span>
 <span id="L285" class="LineNr">285 </span>        Current_search_direction = dir<span class="Delimiter">;</span>
 <span id="L286" class="LineNr">286 </span>      <span class="Delimiter">}</span>
-<span id="L287" class="LineNr">287 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L287" class="LineNr">287 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L288" class="LineNr">288 </span>    <span class="Delimiter">}</span>
 <span id="L289" class="LineNr">289 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == TB_KEY_ESC || key == TB_KEY_CTRL_C<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L290" class="LineNr">290 </span>      <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L290" class="LineNr">290 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L291" class="LineNr">291 </span>    <span class="Delimiter">}</span>
 <span id="L292" class="LineNr">292 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>key == TB_KEY_ARROW_LEFT<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L293" class="LineNr">293 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>col &gt; <span class="Comment">/*</span><span class="Comment">slash</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -500,7 +500,7 @@ if ('onhashchange' in window) {
 <span id="L441" class="LineNr">441 </span><span class="Delimiter">}</span>
 <span id="L442" class="LineNr">442 </span>
 <span id="L443" class="LineNr">443 </span><span class="Normal">int</span> <a href='100trace_browser.cc.html#L443'>lines_hidden</a><span class="Delimiter">(</span><span class="Normal">int</span> screen_row<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L444" class="LineNr">444 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> screen_row<span class="Delimiter">));</span>
+<span id="L444" class="LineNr">444 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> screen_row<span class="Delimiter">));</span>
 <span id="L445" class="LineNr">445 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> screen_row+<span class="Constant">1</span><span class="Delimiter">))</span>
 <span id="L446" class="LineNr">446 </span>    <span class="Identifier">return</span> <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">)</span> - get<span class="Delimiter">(</span>Trace_index<span class="Delimiter">,</span> screen_row<span class="Delimiter">);</span>
 <span id="L447" class="LineNr">447 </span>  <span class="Normal">else</span>
@@ -544,10 +544,10 @@ if ('onhashchange' in window) {
 <span id="L485" class="LineNr">485 </span><span class="Normal">bool</span> <a href='100trace_browser.cc.html#L485'>in_range</a><span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;pair&lt;<span class="Normal">size_t</span><span class="Delimiter">,</span> <span class="Normal">size_t</span>&gt; &gt;&amp; highlight_ranges<span class="Delimiter">,</span> <span class="Normal">size_t</span> idx<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L486" class="LineNr">486 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>highlight_ranges<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
 <span id="L487" class="LineNr">487 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>idx &gt;= highlight_ranges<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>first &amp;&amp; idx &lt; highlight_ranges<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span>
-<span id="L488" class="LineNr">488 </span>      <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
 <span id="L489" class="LineNr">489 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>idx &lt; highlight_ranges<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>second<span class="Delimiter">)</span> <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L490" class="LineNr">490 </span>  <span class="Delimiter">}</span>
-<span id="L491" class="LineNr">491 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L491" class="LineNr">491 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L492" class="LineNr">492 </span><span class="Delimiter">}</span>
 <span id="L493" class="LineNr">493 </span>
 <span id="L494" class="LineNr">494 </span><span class="Normal">void</span> <a href='100trace_browser.cc.html#L494'>load_trace</a><span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">char</span>* filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
@@ -570,7 +570,7 @@ if ('onhashchange' in window) {
 <span id="L511" class="LineNr">511 </span>    tin &gt;&gt; depth<span class="Delimiter">;</span>
 <span id="L512" class="LineNr">512 </span>    string label<span class="Delimiter">;</span>
 <span id="L513" class="LineNr">513 </span>    tin &gt;&gt; label<span class="Delimiter">;</span>
-<span id="L514" class="LineNr">514 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--label<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span> label<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>--label<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">());</span>
+<span id="L514" class="LineNr">514 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--label<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span> label<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>--label<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">());</span>
 <span id="L515" class="LineNr">515 </span>    string line<span class="Delimiter">;</span>
 <span id="L516" class="LineNr">516 </span>    getline<span class="Delimiter">(</span>tin<span class="Delimiter">,</span> line<span class="Delimiter">);</span>
 <span id="L517" class="LineNr">517 </span>    Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span>depth<span class="Delimiter">,</span> label<span class="Delimiter">,</span> line<span class="Delimiter">));</span>
diff --git a/html/101run_sandboxed.cc.html b/html/101run_sandboxed.cc.html
index 59f27f05..9cd09613 100644
--- a/html/101run_sandboxed.cc.html
+++ b/html/101run_sandboxed.cc.html
@@ -17,15 +17,15 @@ a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .Constant { color: #00a0a0; }
 .Special { color: #c00000; }
-.CommentedCode { color: #6c6c6c; }
 .muRecipe { color: #ff8700; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Delimiter { color: #800080; }
 .LineNr { color: #444444; }
-.Identifier { color: #c0a020; }
+.CommentedCode { color: #6c6c6c; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
 .traceContains { color: #008000; }
+.Identifier { color: #c0a020; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -66,602 +66,637 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr">  3 </span>
 <span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(scenario run_interactive_code)</span>
 <span id="L5" class="LineNr">  5 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L6" class="LineNr">  6 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L7" class="LineNr">  7 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [<span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">34</span>]
-<span id="L8" class="LineNr">  8 </span>  run-sandboxed <span class="Constant">2</span>:text
-<span id="L9" class="LineNr">  9 </span>  <span class="Constant">3</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
-<span id="L10" class="LineNr"> 10 </span>]
-<span id="L11" class="LineNr"> 11 </span><span class="traceContains">+mem: storing 34 in location 3</span>
-<span id="L12" class="LineNr"> 12 </span>
-<span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(scenario run_interactive_empty)</span>
-<span id="L14" class="LineNr"> 14 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L15" class="LineNr"> 15 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>/unsafe
-<span id="L16" class="LineNr"> 16 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L17" class="LineNr"> 17 </span>]
-<span id="L18" class="LineNr"> 18 </span><span class="Comment"># result is null</span>
-<span id="L19" class="LineNr"> 19 </span><span class="traceContains">+mem: storing 0 in location 2</span>
-<span id="L20" class="LineNr"> 20 </span>
-<span id="L21" class="LineNr"> 21 </span><span class="Comment">//: As the name suggests, 'run-sandboxed' will prevent certain operations that</span>
-<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: regular Mu code can perform.</span>
-<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L24" class="LineNr"> 24 </span><span class="Normal">bool</span> Sandbox_mode = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L25" class="LineNr"> 25 </span><span class="Comment">//: for starters, users can't override 'main' when the environment is running</span>
-<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">:(before &quot;End Load Recipe Name&quot;)</span>
-<span id="L27" class="LineNr"> 27 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Sandbox_mode &amp;&amp; result<span class="Delimiter">.</span>name == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L28" class="LineNr"> 28 </span>  <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
-<span id="L29" class="LineNr"> 29 </span>  <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L30" class="LineNr"> 30 </span><span class="Delimiter">}</span>
-<span id="L31" class="LineNr"> 31 </span>
-<span id="L32" class="LineNr"> 32 </span><span class="Comment">//: run code in 'interactive mode', i.e. with errors off and return:</span>
-<span id="L33" class="LineNr"> 33 </span><span class="Comment">//:   stringified output in case we want to print it to screen</span>
-<span id="L34" class="LineNr"> 34 </span><span class="Comment">//:   any errors encountered</span>
-<span id="L35" class="LineNr"> 35 </span><span class="Comment">//:   simulated screen any prints went to</span>
-<span id="L36" class="LineNr"> 36 </span><span class="Comment">//:   any 'app' layer traces generated</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L38" class="LineNr"> 38 </span>RUN_SANDBOXED<span class="Delimiter">,</span>
-<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L40" class="LineNr"> 40 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;run-sandboxed&quot;</span><span class="Delimiter">,</span> RUN_SANDBOXED<span class="Delimiter">);</span>
-<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Normal">case</span> RUN_SANDBOXED: <span class="Delimiter">{</span>
-<span id="L43" class="LineNr"> 43 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L44" class="LineNr"> 44 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'run-sandboxed' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L45" class="LineNr"> 45 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L46" class="LineNr"> 46 </span>  <span class="Delimiter">}</span>
-<span id="L47" class="LineNr"> 47 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L48" class="LineNr"> 48 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'run-sandboxed' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L49" class="LineNr"> 49 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span>  <span class="Delimiter">}</span>
-<span id="L51" class="LineNr"> 51 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
-<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L54" class="LineNr"> 54 </span><span class="Normal">case</span> RUN_SANDBOXED: <span class="Delimiter">{</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Normal">bool</span> new_code_pushed_to_stack = <a href='101run_sandboxed.cc.html#L92'>run_interactive</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!new_code_pushed_to_stack<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr"> 57 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">5</span><span class="Delimiter">);</span>
-<span id="L58" class="LineNr"> 58 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L59" class="LineNr"> 59 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L495'>trace_error_contents</a><span class="Delimiter">());</span>
-<span id="L60" class="LineNr"> 60 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L61" class="LineNr"> 61 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L509'>trace_app_contents</a><span class="Delimiter">());</span>
-<span id="L62" class="LineNr"> 62 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>  <span class="Comment">// completed</span>
-<span id="L63" class="LineNr"> 63 </span>    <a href='101run_sandboxed.cc.html#L158'>run_code_end</a><span class="Delimiter">();</span>
-<span id="L64" class="LineNr"> 64 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// done with this instruction</span>
-<span id="L65" class="LineNr"> 65 </span>  <span class="Delimiter">}</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L67" class="LineNr"> 67 </span>    <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// not done with caller; don't increment current_step_index()</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Delimiter">}</span>
-<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">}</span>
-<span id="L70" class="LineNr"> 70 </span>
-<span id="L71" class="LineNr"> 71 </span><span class="Comment">//: To show results in the sandbox Mu uses a hack: it saves the products</span>
-<span id="L72" class="LineNr"> 72 </span><span class="Comment">//: returned by each instruction while Track_most_recent_products is true, and</span>
-<span id="L73" class="LineNr"> 73 </span><span class="Comment">//: keeps the most recent such result around so that it can be returned as the</span>
-<span id="L74" class="LineNr"> 74 </span><span class="Comment">//: result of a sandbox.</span>
-<span id="L75" class="LineNr"> 75 </span>
-<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L77" class="LineNr"> 77 </span><span class="Normal">bool</span> Track_most_recent_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L78" class="LineNr"> 78 </span><span class="Normal">int</span> Call_depth_to_track_most_recent_products_at = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L79" class="LineNr"> 79 </span>string Most_recent_products<span class="Delimiter">;</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L81" class="LineNr"> 81 </span>Track_most_recent_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L82" class="LineNr"> 82 </span>Call_depth_to_track_most_recent_products_at = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L83" class="LineNr"> 83 </span>Most_recent_products = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span>
-<span id="L85" class="LineNr"> 85 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L86" class="LineNr"> 86 </span>trace_stream* Save_trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L87" class="LineNr"> 87 </span>string Save_trace_file<span class="Delimiter">;</span>
-<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(code)</span>
-<span id="L89" class="LineNr"> 89 </span><span class="Comment">// reads a string, tries to call it as code (treating it as a test), saving</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Comment">// all errors.</span>
-<span id="L91" class="LineNr"> 91 </span><span class="Comment">// returns true if successfully called (no errors found during load and transform)</span>
-<span id="L92" class="LineNr"> 92 </span><span class="Normal">bool</span> <a href='101run_sandboxed.cc.html#L92'>run_interactive</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L93" class="LineNr"> 93 </span>  assert<span class="Delimiter">(</span>contains_key<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> &amp;&amp; get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">);</span>
-<span id="L94" class="LineNr"> 94 </span>  <span class="Comment">// try to sandbox the run as best you can</span>
-<span id="L95" class="LineNr"> 95 </span>  <span class="Comment">// todo: test this</span>
-<span id="L96" class="LineNr"> 96 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Current_scenario<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L97" class="LineNr"> 97 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span> i &lt; Reserved_for_tests<span class="Delimiter">;</span> ++i<span class="Delimiter">)</span>
-<span id="L98" class="LineNr"> 98 </span>      Memory<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L99" class="LineNr"> 99 </span>  <span class="Delimiter">}</span>
-<span id="L100" class="LineNr">100 </span>  string command = <a href='003trace.cc.html#L369'>trim</a><span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L474'>strip_comments</a><span class="Delimiter">(</span><a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span><a href='043space.cc.html#L80'>address</a><span class="Delimiter">)));</span>
-<span id="L101" class="LineNr">101 </span>  Name[get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>]<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L102" class="LineNr">102 </span>  <a href='101run_sandboxed.cc.html#L145'>run_code_begin</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">should_stash_snapshots</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>command<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L104" class="LineNr">104 </span>  <span class="Comment">// don't kill the current routine on parse errors</span>
-<span id="L105" class="LineNr">105 </span>  routine* save_current_routine = Current_routine<span class="Delimiter">;</span>
-<span id="L106" class="LineNr">106 </span>  Current_routine = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L107" class="LineNr">107 </span>  <span class="Comment">// call run(string) but without the scheduling</span>
-<span id="L108" class="LineNr">108 </span>  load<span class="Delimiter">(</span>string<span class="Delimiter">(</span><span class="Constant">&quot;recipe! interactive [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">)</span> +
-<span id="L109" class="LineNr">109 </span>          <span class="Constant">&quot;local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L110" class="LineNr">110 </span>          <span class="Constant">&quot;screen:&amp;:screen &lt;- next-ingredient</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L111" class="LineNr">111 </span>          <span class="Constant">&quot;$start-tracking-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L112" class="LineNr">112 </span>          command + <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L113" class="LineNr">113 </span>          <span class="Constant">&quot;$stop-tracking-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L114" class="LineNr">114 </span>          <span class="Constant">&quot;return screen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L115" class="LineNr">115 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L116" class="LineNr">116 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L117" class="LineNr">117 </span>  Current_routine = save_current_routine<span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><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="Comment">// now call 'sandbox' which will run 'interactive' in a separate routine,</span>
-<span id="L120" class="LineNr">120 </span>  <span class="Comment">// and wait for it</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L122" class="LineNr">122 </span>    ++Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
-<span id="L123" class="LineNr">123 </span>    <a href='003trace.cc.html#L167'>trace</a><span class="Delimiter">(</span><span class="Constant">9999</span><span class="Delimiter">,</span> <span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;run-sandboxed: incrementing callstack depth to &quot;</span> &lt;&lt; Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L124" class="LineNr">124 </span>    assert<span class="Delimiter">(</span>Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
-<span id="L125" class="LineNr">125 </span>  <span class="Delimiter">}</span>
-<span id="L126" class="LineNr">126 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;sandbox&quot;</span><span class="Delimiter">)));</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">}</span>
-<span id="L129" class="LineNr">129 </span>
-<span id="L130" class="LineNr">130 </span><span class="Comment">//: Carefully update all state to exactly how it was -- including snapshots.</span>
-<span id="L131" class="LineNr">131 </span>
-<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L133" class="LineNr">133 </span><span class="Normal">bool</span> Run_profiler_stash = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L134" class="LineNr">134 </span>map&lt;string<span class="Delimiter">,</span> recipe_ordinal&gt; Recipe_ordinal_snapshot_stash<span class="Delimiter">;</span>
-<span id="L135" class="LineNr">135 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt; Recipe_snapshot_stash<span class="Delimiter">;</span>
-<span id="L136" class="LineNr">136 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal_snapshot_stash<span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type_snapshot_stash<span class="Delimiter">;</span>
-<span id="L138" class="LineNr">138 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt; Name_snapshot_stash<span class="Delimiter">;</span>
-<span id="L139" class="LineNr">139 </span>map&lt;string<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt; &gt; Recipe_variants_snapshot_stash<span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt; Type_abbreviations_snapshot_stash<span class="Delimiter">;</span>
-<span id="L141" class="LineNr">141 </span>vector&lt;scenario&gt; Scenarios_snapshot_stash<span class="Delimiter">;</span>
-<span id="L142" class="LineNr">142 </span>set&lt;string&gt; Scenario_names_snapshot_stash<span class="Delimiter">;</span>
-<span id="L143" class="LineNr">143 </span>
-<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(code)</span>
-<span id="L145" class="LineNr">145 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L145'>run_code_begin</a><span class="Delimiter">(</span><span class="Normal">bool</span> should_stash_snapshots<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Comment">// stuff to undo later, in run_code_end()</span>
-<span id="L147" class="LineNr">147 </span>  Hide_errors = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>  Disable_redefine_checks = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>  Run_profiler_stash = Run_profiler<span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span>  Run_profiler = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>should_stash_snapshots<span class="Delimiter">)</span>
-<span id="L152" class="LineNr">152 </span>    <a href='101run_sandboxed.cc.html#L176'>stash_snapshots</a><span class="Delimiter">();</span>
-<span id="L153" class="LineNr">153 </span>  Save_trace_stream = Trace_stream<span class="Delimiter">;</span>
-<span id="L154" class="LineNr">154 </span>  Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>  Trace_stream<span class="Delimiter">-&gt;</span>collect_depth = App_depth<span class="Delimiter">;</span>
-<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
-<span id="L157" class="LineNr">157 </span>
-<span id="L158" class="LineNr">158 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L158'>run_code_end</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L159" class="LineNr">159 </span>  Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L160" class="LineNr">160 </span>  Disable_redefine_checks = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L161" class="LineNr">161 </span>  Run_profiler = Run_profiler_stash<span class="Delimiter">;</span>
-<span id="L162" class="LineNr">162 </span>  Run_profiler_stash = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L163" class="LineNr">163 </span><span class="CommentedCode">//?   ofstream fout(&quot;sandbox.log&quot;);</span>
-<span id="L164" class="LineNr">164 </span><span class="CommentedCode">//?   fout &lt;&lt; Trace_stream-&gt;readable_contents(&quot;&quot;);</span>
-<span id="L165" class="LineNr">165 </span><span class="CommentedCode">//?   fout.close();</span>
-<span id="L166" class="LineNr">166 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
-<span id="L167" class="LineNr">167 </span>  Trace_stream = Save_trace_stream<span class="Delimiter">;</span>
-<span id="L168" class="LineNr">168 </span>  Save_trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L169" class="LineNr">169 </span>  Save_trace_file<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L170" class="LineNr">170 </span>  Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">));</span>  <span class="Comment">// keep past sandboxes from inserting errors</span>
-<span id="L171" class="LineNr">171 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Recipe_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
-<span id="L172" class="LineNr">172 </span>    <a href='101run_sandboxed.cc.html#L197'>unstash_snapshots</a><span class="Delimiter">();</span>
-<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
-<span id="L174" class="LineNr">174 </span>
-<span id="L175" class="LineNr">175 </span><span class="Comment">// keep sync'd with save_snapshots and restore_snapshots</span>
-<span id="L176" class="LineNr">176 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L176'>stash_snapshots</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L177" class="LineNr">177 </span>  assert<span class="Delimiter">(</span>Recipe_ordinal_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L178" class="LineNr">178 </span>  Recipe_ordinal_snapshot_stash = Recipe_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L179" class="LineNr">179 </span>  assert<span class="Delimiter">(</span>Recipe_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L180" class="LineNr">180 </span>  Recipe_snapshot_stash = Recipe_snapshot<span class="Delimiter">;</span>
-<span id="L181" class="LineNr">181 </span>  assert<span class="Delimiter">(</span>Type_ordinal_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L182" class="LineNr">182 </span>  Type_ordinal_snapshot_stash = Type_ordinal_snapshot<span class="Delimiter">;</span>
-<span id="L183" class="LineNr">183 </span>  assert<span class="Delimiter">(</span>Type_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L184" class="LineNr">184 </span>  Type_snapshot_stash = Type_snapshot<span class="Delimiter">;</span>
-<span id="L185" class="LineNr">185 </span>  assert<span class="Delimiter">(</span>Name_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L186" class="LineNr">186 </span>  Name_snapshot_stash = Name_snapshot<span class="Delimiter">;</span>
-<span id="L187" class="LineNr">187 </span>  assert<span class="Delimiter">(</span>Recipe_variants_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L188" class="LineNr">188 </span>  Recipe_variants_snapshot_stash = Recipe_variants_snapshot<span class="Delimiter">;</span>
-<span id="L189" class="LineNr">189 </span>  assert<span class="Delimiter">(</span>Type_abbreviations_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L190" class="LineNr">190 </span>  Type_abbreviations_snapshot_stash = Type_abbreviations_snapshot<span class="Delimiter">;</span>
-<span id="L191" class="LineNr">191 </span>  assert<span class="Delimiter">(</span>Scenarios_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L192" class="LineNr">192 </span>  Scenarios_snapshot_stash = Scenarios_snapshot<span class="Delimiter">;</span>
-<span id="L193" class="LineNr">193 </span>  assert<span class="Delimiter">(</span>Scenario_names_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
-<span id="L194" class="LineNr">194 </span>  Scenario_names_snapshot_stash = Scenario_names_snapshot<span class="Delimiter">;</span>
-<span id="L195" class="LineNr">195 </span>  save_snapshots<span class="Delimiter">();</span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">}</span>
-<span id="L197" class="LineNr">197 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L197'>unstash_snapshots</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L198" class="LineNr">198 </span>  restore_snapshots<span class="Delimiter">();</span>
-<span id="L199" class="LineNr">199 </span>  Recipe_ordinal_snapshot = Recipe_ordinal_snapshot_stash<span class="Delimiter">;</span>  Recipe_ordinal_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L200" class="LineNr">200 </span>  Recipe_snapshot = Recipe_snapshot_stash<span class="Delimiter">;</span>  Recipe_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L201" class="LineNr">201 </span>  Type_ordinal_snapshot = Type_ordinal_snapshot_stash<span class="Delimiter">;</span>  Type_ordinal_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L202" class="LineNr">202 </span>  Type_snapshot = Type_snapshot_stash<span class="Delimiter">;</span>  Type_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L203" class="LineNr">203 </span>  Name_snapshot = Name_snapshot_stash<span class="Delimiter">;</span>  Name_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L204" class="LineNr">204 </span>  Recipe_variants_snapshot = Recipe_variants_snapshot_stash<span class="Delimiter">;</span>  Recipe_variants_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L205" class="LineNr">205 </span>  Type_abbreviations_snapshot = Type_abbreviations_snapshot_stash<span class="Delimiter">;</span>  Type_abbreviations_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L206" class="LineNr">206 </span>  Scenarios_snapshot = Scenarios_snapshot_stash<span class="Delimiter">;</span>  Scenarios_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L207" class="LineNr">207 </span>  Scenario_names_snapshot = Scenario_names_snapshot_stash<span class="Delimiter">;</span>  Scenario_names_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
-<span id="L208" class="LineNr">208 </span><span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>
-<span id="L210" class="LineNr">210 </span><span class="Delimiter">:(before &quot;End Load Recipes&quot;)</span>
-<span id="L211" class="LineNr">211 </span>load<span class="Delimiter">(</span>string<span class="Delimiter">(</span>
-<span id="L212" class="LineNr">212 </span><span class="Constant">&quot;recipe interactive [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">)</span> +  <span class="Comment">// just a dummy version to initialize the Recipe_ordinal and so on</span>
-<span id="L213" class="LineNr">213 </span><span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L214" class="LineNr">214 </span><span class="Constant">&quot;recipe sandbox [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L215" class="LineNr">215 </span>  <span class="Constant">&quot;local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L216" class="LineNr">216 </span>  <span class="Constant">&quot;screen:&amp;:screen &lt;- new-fake-screen 30, 5</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L217" class="LineNr">217 </span>  <span class="Constant">&quot;routine-id:num &lt;- start-running interactive, screen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L218" class="LineNr">218 </span>  <span class="Constant">&quot;limit-time routine-id, 100000/instructions</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L219" class="LineNr">219 </span>  <span class="Constant">&quot;wait-for-routine routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L220" class="LineNr">220 </span>  <span class="Constant">&quot;instructions-run:num &lt;- number-of-instructions routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L221" class="LineNr">221 </span>  <span class="Constant">&quot;stash instructions-run [instructions run]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L222" class="LineNr">222 </span>  <span class="Constant">&quot;sandbox-state:num &lt;- routine-state routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L223" class="LineNr">223 </span>  <span class="Constant">&quot;completed?:bool &lt;- equal sandbox-state, 1/completed</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L224" class="LineNr">224 </span>  <span class="Constant">&quot;output:text &lt;- $most-recent-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L225" class="LineNr">225 </span>  <span class="Constant">&quot;errors:text &lt;- save-errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L226" class="LineNr">226 </span>  <span class="Constant">&quot;stashes:text &lt;- save-app-trace</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L227" class="LineNr">227 </span>  <span class="Constant">&quot;$cleanup-run-sandboxed</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L228" class="LineNr">228 </span>  <span class="Constant">&quot;return output, errors, screen, stashes, completed?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
-<span id="L229" class="LineNr">229 </span><span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L230" class="LineNr">230 </span>
-<span id="L231" class="LineNr">231 </span><span class="Comment">//: adjust errors in the sandbox</span>
-<span id="L232" class="LineNr">232 </span><span class="Delimiter">:(before &quot;End maybe(recipe_name) Special-cases&quot;)</span>
-<span id="L233" class="LineNr">233 </span><span class="Normal">if</span> <span class="Delimiter">(</span>recipe_name == <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L234" class="LineNr">234 </span>
-<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(scenario run_interactive_comments)</span>
-<span id="L236" class="LineNr">236 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L237" class="LineNr">237 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [<span class="Comment"># ab</span>
-<span id="L238" class="LineNr">238 </span>add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>]
-<span id="L239" class="LineNr">239 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L240" class="LineNr">240 </span>  <span class="Constant">3</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L241" class="LineNr">241 </span>]
-<span id="L242" class="LineNr">242 </span><span class="traceContains">+mem: storing 52 in location 4</span>
+<span id="L6" class="LineNr">  6 </span>  <span class="Constant">1</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># reserve space for the sandbox</span>
+<span id="L7" class="LineNr">  7 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [<span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">34</span>]
+<span id="L8" class="LineNr">  8 </span><span class="CommentedCode">#?   $print 10:num [|] 11:num [: ] 1000:num [|] *10:text [ (] 10:text [)] 10/newline</span>
+<span id="L9" class="LineNr">  9 </span>  run-sandboxed <span class="Constant">10</span>:text
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1</span>:num
+<span id="L11" class="LineNr"> 11 </span>]
+<span id="L12" class="LineNr"> 12 </span><span class="traceContains">+mem: storing 34 in location 20</span>
+<span id="L13" class="LineNr"> 13 </span>
+<span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(scenario run_interactive_empty)</span>
+<span id="L15" class="LineNr"> 15 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L16" class="LineNr"> 16 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span>copy<span class="Constant"> null</span>
+<span id="L17" class="LineNr"> 17 </span>  <span class="Constant">20</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L18" class="LineNr"> 18 </span>]
+<span id="L19" class="LineNr"> 19 </span><span class="Comment"># result is null</span>
+<span id="L20" class="LineNr"> 20 </span><span class="traceContains">+mem: storing 0 in location 20</span>
+<span id="L21" class="LineNr"> 21 </span><span class="traceContains">+mem: storing 0 in location 21</span>
+<span id="L22" class="LineNr"> 22 </span>
+<span id="L23" class="LineNr"> 23 </span><span class="Comment">//: As the name suggests, 'run-sandboxed' will prevent certain operations that</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">//: regular Mu code can perform.</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Normal">bool</span> Sandbox_mode =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Comment">//: for starters, users can't override 'main' when the environment is running</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Delimiter">:(before &quot;End Load Recipe Name&quot;)</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Sandbox_mode &amp;&amp; result<span class="Delimiter">.</span>name == <span class="Constant">&quot;main&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L30" class="LineNr"> 30 </span>  <a href='016dilated_reagent.cc.html#L57'>slurp_balanced_bracket</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">}</span>
+<span id="L33" class="LineNr"> 33 </span>
+<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: run code in 'interactive mode', i.e. with errors off and return:</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Comment">//:   stringified output in case we want to print it to screen</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Comment">//:   any errors encountered</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Comment">//:   simulated screen any prints went to</span>
+<span id="L38" class="LineNr"> 38 </span><span class="Comment">//:   any 'app' layer traces generated</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L40" class="LineNr"> 40 </span>RUN_SANDBOXED<span class="Delimiter">,</span>
+<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L42" class="LineNr"> 42 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;run-sandboxed&quot;</span><span class="Delimiter">,</span> RUN_SANDBOXED<span class="Delimiter">);</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Normal">case</span> RUN_SANDBOXED: <span class="Delimiter">{</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L46" class="LineNr"> 46 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'run-sandboxed' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L47" class="LineNr"> 47 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Delimiter">}</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L50" class="LineNr"> 50 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'run-sandboxed' should be a string, but got '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L51" class="LineNr"> 51 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Delimiter">}</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">}</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Normal">case</span> RUN_SANDBOXED: <span class="Delimiter">{</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">bool</span> new_code_pushed_to_stack = <a href='101run_sandboxed.cc.html#L98'>run_interactive</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!new_code_pushed_to_stack<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L59" class="LineNr"> 59 </span>    products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">5</span><span class="Delimiter">);</span>
+<span id="L60" class="LineNr"> 60 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L61" class="LineNr"> 61 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L62" class="LineNr"> 62 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L63" class="LineNr"> 63 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L515'>trace_error_contents</a><span class="Delimiter">());</span>
+<span id="L64" class="LineNr"> 64 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">3</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L529'>trace_app_contents</a><span class="Delimiter">());</span>
+<span id="L68" class="LineNr"> 68 </span>    products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>  <span class="Comment">// completed</span>
+<span id="L69" class="LineNr"> 69 </span>    <a href='101run_sandboxed.cc.html#L166'>run_code_end</a><span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// done with this instruction</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Delimiter">}</span>
+<span id="L72" class="LineNr"> 72 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L73" class="LineNr"> 73 </span>    <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// not done with caller; don't increment current_step_index()</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Delimiter">}</span>
+<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">}</span>
+<span id="L76" class="LineNr"> 76 </span>
+<span id="L77" class="LineNr"> 77 </span><span class="Comment">//: To show results in the sandbox Mu uses a hack: it saves the products</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Comment">//: returned by each instruction while Track_most_recent_products is true, and</span>
+<span id="L79" class="LineNr"> 79 </span><span class="Comment">//: keeps the most recent such result around so that it can be returned as the</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment">//: result of a sandbox.</span>
+<span id="L81" class="LineNr"> 81 </span>
+<span id="L82" class="LineNr"> 82 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Normal">bool</span> Track_most_recent_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Normal">int</span> Call_depth_to_track_most_recent_products_at = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>string Most_recent_products<span class="Delimiter">;</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L87" class="LineNr"> 87 </span>Track_most_recent_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span>Call_depth_to_track_most_recent_products_at = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span>Most_recent_products = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L90" class="LineNr"> 90 </span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L92" class="LineNr"> 92 </span>trace_stream* Save_trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span>string Save_trace_file<span class="Delimiter">;</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">:(code)</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Comment">// reads a string, tries to call it as code (treating it as a test), saving</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Comment">// all errors.</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Comment">// returns true if successfully called (no errors found during load and transform)</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Normal">bool</span> <a href='101run_sandboxed.cc.html#L98'>run_interactive</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;run_interactive: &quot; &lt;&lt; address &lt;&lt; '\n';</span>
+<span id="L100" class="LineNr">100 </span>  assert<span class="Delimiter">(</span><a href='001help.cc.html#L226'>contains_key</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> &amp;&amp; get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Comment">// try to sandbox the run as best you can</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Comment">// todo: test this</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Current_scenario<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L104" class="LineNr">104 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">1</span><span class="Delimiter">;</span> i &lt; Reserved_for_tests<span class="Delimiter">;</span> ++i<span class="Delimiter">)</span>
+<span id="L105" class="LineNr">105 </span>      Memory<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Delimiter">}</span>
+<span id="L107" class="LineNr">107 </span>  string command = <a href='003trace.cc.html#L391'>trim</a><span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L494'>strip_comments</a><span class="Delimiter">(</span><a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span><a href='043space.cc.html#L101'>address</a><span class="Delimiter">)));</span>
+<span id="L108" class="LineNr">108 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;command: &quot; &lt;&lt; command &lt;&lt; '\n';</span>
+<span id="L109" class="LineNr">109 </span>  Name[get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span>]<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L110" class="LineNr">110 </span>  <a href='101run_sandboxed.cc.html#L153'>run_code_begin</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">should_stash_snapshots</span><span class="Comment">*/</span><span class="Constant">true</span><span class="Delimiter">);</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>command<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L112" class="LineNr">112 </span>  <span class="Comment">// don't kill the current routine on parse errors</span>
+<span id="L113" class="LineNr">113 </span>  routine* save_current_routine = Current_routine<span class="Delimiter">;</span>
+<span id="L114" class="LineNr">114 </span>  Current_routine = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Comment">// call run(string) but without the scheduling</span>
+<span id="L116" class="LineNr">116 </span>  load<span class="Delimiter">(</span>string<span class="Delimiter">(</span><span class="Constant">&quot;recipe! interactive [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">)</span> +
+<span id="L117" class="LineNr">117 </span>          <span class="Constant">&quot;local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L118" class="LineNr">118 </span>          <span class="Constant">&quot;screen:&amp;:screen &lt;- next-ingredient</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L119" class="LineNr">119 </span>          <span class="Constant">&quot;$start-tracking-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L120" class="LineNr">120 </span>          command + <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L121" class="LineNr">121 </span>          <span class="Constant">&quot;$stop-tracking-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L122" class="LineNr">122 </span>          <span class="Constant">&quot;return screen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L123" class="LineNr">123 </span>       <span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
+<span id="L124" class="LineNr">124 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L125" class="LineNr">125 </span>  Current_routine = save_current_routine<span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Comment">// now call 'sandbox' which will run 'interactive' in a separate routine,</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Comment">// and wait for it</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Save_trace_stream<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L130" class="LineNr">130 </span>    ++Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth<span class="Delimiter">;</span>
+<span id="L131" class="LineNr">131 </span>    <a href='003trace.cc.html#L190'>trace</a><span class="Delimiter">(</span><span class="Constant">9999</span><span class="Delimiter">,</span> <span class="Constant">&quot;trace&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;run-sandboxed: incrementing callstack depth to &quot;</span> &lt;&lt; Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L132" class="LineNr">132 </span>    assert<span class="Delimiter">(</span>Save_trace_stream<span class="Delimiter">-&gt;</span>callstack_depth &lt; <span class="Constant">9000</span><span class="Delimiter">);</span>  <span class="Comment">// 9998-101 plus cushion</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Delimiter">}</span>
+<span id="L134" class="LineNr">134 </span>  Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">.</span>push_front<span class="Delimiter">(</span>call<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;sandbox&quot;</span><span class="Delimiter">)));</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span><span class="Delimiter">}</span>
+<span id="L137" class="LineNr">137 </span>
+<span id="L138" class="LineNr">138 </span><span class="Comment">//: Carefully update all state to exactly how it was -- including snapshots.</span>
+<span id="L139" class="LineNr">139 </span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L141" class="LineNr">141 </span><span class="Normal">bool</span> Run_profiler_stash =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L142" class="LineNr">142 </span>map&lt;string<span class="Delimiter">,</span> recipe_ordinal&gt; Recipe_ordinal_snapshot_stash<span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> recipe&gt; Recipe_snapshot_stash<span class="Delimiter">;</span>
+<span id="L144" class="LineNr">144 </span>map&lt;string<span class="Delimiter">,</span> type_ordinal&gt; Type_ordinal_snapshot_stash<span class="Delimiter">;</span>
+<span id="L145" class="LineNr">145 </span>map&lt;type_ordinal<span class="Delimiter">,</span> type_info&gt; Type_snapshot_stash<span class="Delimiter">;</span>
+<span id="L146" class="LineNr">146 </span>map&lt;recipe_ordinal<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int</span>&gt; &gt; Name_snapshot_stash<span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>map&lt;string<span class="Delimiter">,</span> vector&lt;recipe_ordinal&gt; &gt; Recipe_variants_snapshot_stash<span class="Delimiter">;</span>
+<span id="L148" class="LineNr">148 </span>map&lt;string<span class="Delimiter">,</span> type_tree*&gt; Type_abbreviations_snapshot_stash<span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span>vector&lt;scenario&gt; Scenarios_snapshot_stash<span class="Delimiter">;</span>
+<span id="L150" class="LineNr">150 </span>set&lt;string&gt; Scenario_names_snapshot_stash<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>
+<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(code)</span>
+<span id="L153" class="LineNr">153 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L153'>run_code_begin</a><span class="Delimiter">(</span><span class="Normal">bool</span> should_stash_snapshots<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Comment">// stuff to undo later, in run_code_end()</span>
+<span id="L155" class="LineNr">155 </span>  Hide_errors =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L156" class="LineNr">156 </span>  Disable_redefine_checks =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span>  Run_profiler_stash = Run_profiler<span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>  Run_profiler =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L159" class="LineNr">159 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>should_stash_snapshots<span class="Delimiter">)</span>
+<span id="L160" class="LineNr">160 </span>    <a href='101run_sandboxed.cc.html#L184'>stash_snapshots</a><span class="Delimiter">();</span>
+<span id="L161" class="LineNr">161 </span>  Save_trace_stream = Trace_stream<span class="Delimiter">;</span>
+<span id="L162" class="LineNr">162 </span>  Trace_stream = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span>  Trace_stream<span class="Delimiter">-&gt;</span>collect_depth = App_depth<span class="Delimiter">;</span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L166'>run_code_end</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span>  Disable_redefine_checks =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span>  Run_profiler = Run_profiler_stash<span class="Delimiter">;</span>
+<span id="L170" class="LineNr">170 </span>  Run_profiler_stash =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L171" class="LineNr">171 </span><span class="CommentedCode">//?   ofstream fout(&quot;sandbox.log&quot;);</span>
+<span id="L172" class="LineNr">172 </span><span class="CommentedCode">//?   fout &lt;&lt; Trace_stream-&gt;readable_contents(&quot;&quot;);</span>
+<span id="L173" class="LineNr">173 </span><span class="CommentedCode">//?   fout.close();</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">delete</span> Trace_stream<span class="Delimiter">;</span>
+<span id="L175" class="LineNr">175 </span>  Trace_stream = Save_trace_stream<span class="Delimiter">;</span>
+<span id="L176" class="LineNr">176 </span>  Save_trace_stream = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span>  Save_trace_file<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L178" class="LineNr">178 </span>  Recipe<span class="Delimiter">.</span>erase<span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">));</span>  <span class="Comment">// keep past sandboxes from inserting errors</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Recipe_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">())</span>
+<span id="L180" class="LineNr">180 </span>    <a href='101run_sandboxed.cc.html#L205'>unstash_snapshots</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span><span class="Comment">// keep sync'd with save_snapshots and restore_snapshots</span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L184'>stash_snapshots</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L185" class="LineNr">185 </span>  assert<span class="Delimiter">(</span>Recipe_ordinal_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L186" class="LineNr">186 </span>  Recipe_ordinal_snapshot_stash = Recipe_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L187" class="LineNr">187 </span>  assert<span class="Delimiter">(</span>Recipe_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L188" class="LineNr">188 </span>  Recipe_snapshot_stash = Recipe_snapshot<span class="Delimiter">;</span>
+<span id="L189" class="LineNr">189 </span>  assert<span class="Delimiter">(</span>Type_ordinal_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L190" class="LineNr">190 </span>  Type_ordinal_snapshot_stash = Type_ordinal_snapshot<span class="Delimiter">;</span>
+<span id="L191" class="LineNr">191 </span>  assert<span class="Delimiter">(</span>Type_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L192" class="LineNr">192 </span>  Type_snapshot_stash = Type_snapshot<span class="Delimiter">;</span>
+<span id="L193" class="LineNr">193 </span>  assert<span class="Delimiter">(</span>Name_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L194" class="LineNr">194 </span>  Name_snapshot_stash = Name_snapshot<span class="Delimiter">;</span>
+<span id="L195" class="LineNr">195 </span>  assert<span class="Delimiter">(</span>Recipe_variants_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L196" class="LineNr">196 </span>  Recipe_variants_snapshot_stash = Recipe_variants_snapshot<span class="Delimiter">;</span>
+<span id="L197" class="LineNr">197 </span>  assert<span class="Delimiter">(</span>Type_abbreviations_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L198" class="LineNr">198 </span>  Type_abbreviations_snapshot_stash = Type_abbreviations_snapshot<span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>  assert<span class="Delimiter">(</span>Scenarios_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L200" class="LineNr">200 </span>  Scenarios_snapshot_stash = Scenarios_snapshot<span class="Delimiter">;</span>
+<span id="L201" class="LineNr">201 </span>  assert<span class="Delimiter">(</span>Scenario_names_snapshot_stash<span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L202" class="LineNr">202 </span>  Scenario_names_snapshot_stash = Scenario_names_snapshot<span class="Delimiter">;</span>
+<span id="L203" class="LineNr">203 </span>  save_snapshots<span class="Delimiter">();</span>
+<span id="L204" class="LineNr">204 </span><span class="Delimiter">}</span>
+<span id="L205" class="LineNr">205 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L205'>unstash_snapshots</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L206" class="LineNr">206 </span>  restore_snapshots<span class="Delimiter">();</span>
+<span id="L207" class="LineNr">207 </span>  Recipe_ordinal_snapshot = Recipe_ordinal_snapshot_stash<span class="Delimiter">;</span>  Recipe_ordinal_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L208" class="LineNr">208 </span>  Recipe_snapshot = Recipe_snapshot_stash<span class="Delimiter">;</span>  Recipe_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L209" class="LineNr">209 </span>  Type_ordinal_snapshot = Type_ordinal_snapshot_stash<span class="Delimiter">;</span>  Type_ordinal_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L210" class="LineNr">210 </span>  Type_snapshot = Type_snapshot_stash<span class="Delimiter">;</span>  Type_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L211" class="LineNr">211 </span>  Name_snapshot = Name_snapshot_stash<span class="Delimiter">;</span>  Name_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L212" class="LineNr">212 </span>  Recipe_variants_snapshot = Recipe_variants_snapshot_stash<span class="Delimiter">;</span>  Recipe_variants_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>  Type_abbreviations_snapshot = Type_abbreviations_snapshot_stash<span class="Delimiter">;</span>  Type_abbreviations_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L214" class="LineNr">214 </span>  Scenarios_snapshot = Scenarios_snapshot_stash<span class="Delimiter">;</span>  Scenarios_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L215" class="LineNr">215 </span>  Scenario_names_snapshot = Scenario_names_snapshot_stash<span class="Delimiter">;</span>  Scenario_names_snapshot_stash<span class="Delimiter">.</span><a href='050scenario.cc.html#L60'>clear</a><span class="Delimiter">();</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">}</span>
+<span id="L217" class="LineNr">217 </span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">:(before &quot;End Mu Prelude&quot;)</span>
+<span id="L219" class="LineNr">219 </span>load<span class="Delimiter">(</span>string<span class="Delimiter">(</span>
+<span id="L220" class="LineNr">220 </span><span class="Constant">&quot;recipe interactive [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">)</span> +  <span class="Comment">// just a dummy version to initialize the Recipe_ordinal and so on</span>
+<span id="L221" class="LineNr">221 </span><span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L222" class="LineNr">222 </span><span class="Constant">&quot;recipe sandbox [</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L223" class="LineNr">223 </span>  <span class="Constant">&quot;local-scope</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L224" class="LineNr">224 </span><span class="CommentedCode">//?   &quot;$print [aaa] 10/newline\n&quot; +</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Constant">&quot;screen:&amp;:screen &lt;- new-fake-screen 30, 5</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L226" class="LineNr">226 </span>  <span class="Constant">&quot;routine-id:num &lt;- start-running interactive, screen</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L227" class="LineNr">227 </span>  <span class="Constant">&quot;limit-time routine-id, 100000/instructions</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L228" class="LineNr">228 </span>  <span class="Constant">&quot;wait-for-routine routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L229" class="LineNr">229 </span><span class="CommentedCode">//?   &quot;$print [bbb] 10/newline\n&quot; +</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Constant">&quot;instructions-run:num &lt;- number-of-instructions routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L231" class="LineNr">231 </span>  <span class="Constant">&quot;stash instructions-run [instructions run]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L232" class="LineNr">232 </span>  <span class="Constant">&quot;sandbox-state:num &lt;- routine-state routine-id</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L233" class="LineNr">233 </span>  <span class="Constant">&quot;completed?:bool &lt;- equal sandbox-state, 1/completed</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L234" class="LineNr">234 </span><span class="CommentedCode">//?   &quot;$print [completed: ] completed? 10/newline\n&quot; +</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Constant">&quot;output:text &lt;- $most-recent-products</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L236" class="LineNr">236 </span><span class="CommentedCode">//?   &quot;$print [zzz] 10/newline\n&quot; +</span>
+<span id="L237" class="LineNr">237 </span><span class="CommentedCode">//?   &quot;$print output\n&quot; +</span>
+<span id="L238" class="LineNr">238 </span>  <span class="Constant">&quot;errors:text &lt;- save-errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L239" class="LineNr">239 </span>  <span class="Constant">&quot;stashes:text &lt;- save-app-trace</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L240" class="LineNr">240 </span>  <span class="Constant">&quot;$cleanup-run-sandboxed</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L241" class="LineNr">241 </span>  <span class="Constant">&quot;return output, errors, screen, stashes, completed?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> +
+<span id="L242" class="LineNr">242 </span><span class="Constant">&quot;]</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
 <span id="L243" class="LineNr">243 </span>
-<span id="L244" class="LineNr">244 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L245" class="LineNr">245 </span>_START_TRACKING_PRODUCTS<span class="Delimiter">,</span>
-<span id="L246" class="LineNr">246 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L247" class="LineNr">247 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$start-tracking-products&quot;</span><span class="Delimiter">,</span> _START_TRACKING_PRODUCTS<span class="Delimiter">);</span>
-<span id="L248" class="LineNr">248 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L249" class="LineNr">249 </span><span class="Normal">case</span> _START_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L251" class="LineNr">251 </span><span class="Delimiter">}</span>
-<span id="L252" class="LineNr">252 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L253" class="LineNr">253 </span><span class="Normal">case</span> _START_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L254" class="LineNr">254 </span>  Track_most_recent_products = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L255" class="LineNr">255 </span>  Call_depth_to_track_most_recent_products_at = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<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">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L260" class="LineNr">260 </span>_STOP_TRACKING_PRODUCTS<span class="Delimiter">,</span>
-<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L262" class="LineNr">262 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$stop-tracking-products&quot;</span><span class="Delimiter">,</span> _STOP_TRACKING_PRODUCTS<span class="Delimiter">);</span>
-<span id="L263" class="LineNr">263 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L264" class="LineNr">264 </span><span class="Normal">case</span> _STOP_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L265" class="LineNr">265 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L266" class="LineNr">266 </span><span class="Delimiter">}</span>
-<span id="L267" class="LineNr">267 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L268" class="LineNr">268 </span><span class="Normal">case</span> _STOP_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L269" class="LineNr">269 </span>  Track_most_recent_products = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L270" class="LineNr">270 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L271" class="LineNr">271 </span><span class="Delimiter">}</span>
-<span id="L272" class="LineNr">272 </span>
-<span id="L273" class="LineNr">273 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L274" class="LineNr">274 </span>_MOST_RECENT_PRODUCTS<span class="Delimiter">,</span>
-<span id="L275" class="LineNr">275 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L276" class="LineNr">276 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$most-recent-products&quot;</span><span class="Delimiter">,</span> _MOST_RECENT_PRODUCTS<span class="Delimiter">);</span>
-<span id="L277" class="LineNr">277 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L278" class="LineNr">278 </span><span class="Normal">case</span> _MOST_RECENT_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L280" class="LineNr">280 </span><span class="Delimiter">}</span>
-<span id="L281" class="LineNr">281 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L282" class="LineNr">282 </span><span class="Normal">case</span> _MOST_RECENT_PRODUCTS: <span class="Delimiter">{</span>
-<span id="L283" class="LineNr">283 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L284" class="LineNr">284 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>Most_recent_products<span class="Delimiter">));</span>
-<span id="L285" class="LineNr">285 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L286" class="LineNr">286 </span><span class="Delimiter">}</span>
-<span id="L287" class="LineNr">287 </span>
-<span id="L288" class="LineNr">288 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L289" class="LineNr">289 </span>SAVE_ERRORS<span class="Delimiter">,</span>
-<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L291" class="LineNr">291 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;save-errors&quot;</span><span class="Delimiter">,</span> SAVE_ERRORS<span class="Delimiter">);</span>
-<span id="L292" class="LineNr">292 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L293" class="LineNr">293 </span><span class="Normal">case</span> SAVE_ERRORS: <span class="Delimiter">{</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span>
-<span id="L296" class="LineNr">296 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L297" class="LineNr">297 </span><span class="Normal">case</span> SAVE_ERRORS: <span class="Delimiter">{</span>
-<span id="L298" class="LineNr">298 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L299" class="LineNr">299 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L495'>trace_error_contents</a><span class="Delimiter">());</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L301" class="LineNr">301 </span><span class="Delimiter">}</span>
-<span id="L302" class="LineNr">302 </span>
-<span id="L303" class="LineNr">303 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L304" class="LineNr">304 </span>SAVE_APP_TRACE<span class="Delimiter">,</span>
-<span id="L305" class="LineNr">305 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L306" class="LineNr">306 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;save-app-trace&quot;</span><span class="Delimiter">,</span> SAVE_APP_TRACE<span class="Delimiter">);</span>
-<span id="L307" class="LineNr">307 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L308" class="LineNr">308 </span><span class="Normal">case</span> SAVE_APP_TRACE: <span class="Delimiter">{</span>
-<span id="L309" class="LineNr">309 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L310" class="LineNr">310 </span><span class="Delimiter">}</span>
-<span id="L311" class="LineNr">311 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L312" class="LineNr">312 </span><span class="Normal">case</span> SAVE_APP_TRACE: <span class="Delimiter">{</span>
-<span id="L313" class="LineNr">313 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L314" class="LineNr">314 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L509'>trace_app_contents</a><span class="Delimiter">());</span>
+<span id="L244" class="LineNr">244 </span><span class="Comment">//: adjust errors in the sandbox</span>
+<span id="L245" class="LineNr">245 </span><span class="Delimiter">:(before &quot;End maybe(recipe_name) Special-cases&quot;)</span>
+<span id="L246" class="LineNr">246 </span><span class="Normal">if</span> <span class="Delimiter">(</span>recipe_name == <span class="Constant">&quot;interactive&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L247" class="LineNr">247 </span>
+<span id="L248" class="LineNr">248 </span><span class="Delimiter">:(scenario run_interactive_comments)</span>
+<span id="L249" class="LineNr">249 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L250" class="LineNr">250 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [<span class="Comment"># ab</span>
+<span id="L251" class="LineNr">251 </span>add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>]
+<span id="L252" class="LineNr">252 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
+<span id="L253" class="LineNr">253 </span>  <span class="Constant">3</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
+<span id="L254" class="LineNr">254 </span>]
+<span id="L255" class="LineNr">255 </span><span class="traceContains">+mem: storing 52 in location 4</span>
+<span id="L256" class="LineNr">256 </span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L258" class="LineNr">258 </span>_START_TRACKING_PRODUCTS<span class="Delimiter">,</span>
+<span id="L259" class="LineNr">259 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L260" class="LineNr">260 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$start-tracking-products&quot;</span><span class="Delimiter">,</span> _START_TRACKING_PRODUCTS<span class="Delimiter">);</span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L262" class="LineNr">262 </span><span class="Normal">case</span> _START_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L264" class="LineNr">264 </span><span class="Delimiter">}</span>
+<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L266" class="LineNr">266 </span><span class="Normal">case</span> _START_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L267" class="LineNr">267 </span>  Track_most_recent_products =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L268" class="LineNr">268 </span>  Call_depth_to_track_most_recent_products_at = <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">);</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L270" class="LineNr">270 </span><span class="Delimiter">}</span>
+<span id="L271" class="LineNr">271 </span>
+<span id="L272" class="LineNr">272 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L273" class="LineNr">273 </span>_STOP_TRACKING_PRODUCTS<span class="Delimiter">,</span>
+<span id="L274" class="LineNr">274 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L275" class="LineNr">275 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$stop-tracking-products&quot;</span><span class="Delimiter">,</span> _STOP_TRACKING_PRODUCTS<span class="Delimiter">);</span>
+<span id="L276" class="LineNr">276 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L277" class="LineNr">277 </span><span class="Normal">case</span> _STOP_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span><span class="Delimiter">}</span>
+<span id="L280" class="LineNr">280 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L281" class="LineNr">281 </span><span class="Normal">case</span> _STOP_TRACKING_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L282" class="LineNr">282 </span>  Track_most_recent_products =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L284" class="LineNr">284 </span><span class="Delimiter">}</span>
+<span id="L285" class="LineNr">285 </span>
+<span id="L286" class="LineNr">286 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L287" class="LineNr">287 </span>_MOST_RECENT_PRODUCTS<span class="Delimiter">,</span>
+<span id="L288" class="LineNr">288 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L289" class="LineNr">289 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$most-recent-products&quot;</span><span class="Delimiter">,</span> _MOST_RECENT_PRODUCTS<span class="Delimiter">);</span>
+<span id="L290" class="LineNr">290 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L291" class="LineNr">291 </span><span class="Normal">case</span> _MOST_RECENT_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L292" class="LineNr">292 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L293" class="LineNr">293 </span><span class="Delimiter">}</span>
+<span id="L294" class="LineNr">294 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L295" class="LineNr">295 </span><span class="Normal">case</span> _MOST_RECENT_PRODUCTS: <span class="Delimiter">{</span>
+<span id="L296" class="LineNr">296 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L297" class="LineNr">297 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L298" class="LineNr">298 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>Most_recent_products<span class="Delimiter">));</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L300" class="LineNr">300 </span><span class="Delimiter">}</span>
+<span id="L301" class="LineNr">301 </span>
+<span id="L302" class="LineNr">302 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L303" class="LineNr">303 </span>SAVE_ERRORS<span class="Delimiter">,</span>
+<span id="L304" class="LineNr">304 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L305" class="LineNr">305 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;save-errors&quot;</span><span class="Delimiter">,</span> SAVE_ERRORS<span class="Delimiter">);</span>
+<span id="L306" class="LineNr">306 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L307" class="LineNr">307 </span><span class="Normal">case</span> SAVE_ERRORS: <span class="Delimiter">{</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L309" class="LineNr">309 </span><span class="Delimiter">}</span>
+<span id="L310" class="LineNr">310 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L311" class="LineNr">311 </span><span class="Normal">case</span> SAVE_ERRORS: <span class="Delimiter">{</span>
+<span id="L312" class="LineNr">312 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L313" class="LineNr">313 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L314" class="LineNr">314 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L515'>trace_error_contents</a><span class="Delimiter">());</span>
 <span id="L315" class="LineNr">315 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L316" class="LineNr">316 </span><span class="Delimiter">}</span>
 <span id="L317" class="LineNr">317 </span>
 <span id="L318" class="LineNr">318 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L319" class="LineNr">319 </span>_CLEANUP_RUN_SANDBOXED<span class="Delimiter">,</span>
+<span id="L319" class="LineNr">319 </span>SAVE_APP_TRACE<span class="Delimiter">,</span>
 <span id="L320" class="LineNr">320 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L321" class="LineNr">321 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$cleanup-run-sandboxed&quot;</span><span class="Delimiter">,</span> _CLEANUP_RUN_SANDBOXED<span class="Delimiter">);</span>
+<span id="L321" class="LineNr">321 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;save-app-trace&quot;</span><span class="Delimiter">,</span> SAVE_APP_TRACE<span class="Delimiter">);</span>
 <span id="L322" class="LineNr">322 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L323" class="LineNr">323 </span><span class="Normal">case</span> _CLEANUP_RUN_SANDBOXED: <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span><span class="Normal">case</span> SAVE_APP_TRACE: <span class="Delimiter">{</span>
 <span id="L324" class="LineNr">324 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
 <span id="L325" class="LineNr">325 </span><span class="Delimiter">}</span>
 <span id="L326" class="LineNr">326 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L327" class="LineNr">327 </span><span class="Normal">case</span> _CLEANUP_RUN_SANDBOXED: <span class="Delimiter">{</span>
-<span id="L328" class="LineNr">328 </span>  <a href='101run_sandboxed.cc.html#L158'>run_code_end</a><span class="Delimiter">();</span>
-<span id="L329" class="LineNr">329 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L330" class="LineNr">330 </span><span class="Delimiter">}</span>
-<span id="L331" class="LineNr">331 </span>
-<span id="L332" class="LineNr">332 </span><span class="Delimiter">:(scenario &quot;run_interactive_converts_result_to_text&quot;)</span>
-<span id="L333" class="LineNr">333 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L334" class="LineNr">334 </span>  <span class="Comment"># try to interactively add 2 and 2</span>
-<span id="L335" class="LineNr">335 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>]
-<span id="L336" class="LineNr">336 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L337" class="LineNr">337 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L338" class="LineNr">338 </span>]
-<span id="L339" class="LineNr">339 </span><span class="Comment"># first letter in the output should be '4' in unicode</span>
-<span id="L340" class="LineNr">340 </span><span class="traceContains">+mem: storing 52 in location 11</span>
-<span id="L341" class="LineNr">341 </span>
-<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(scenario &quot;run_interactive_ignores_products_in_nested_functions&quot;)</span>
-<span id="L343" class="LineNr">343 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L344" class="LineNr">344 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [foo]
-<span id="L345" class="LineNr">345 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L346" class="LineNr">346 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L347" class="LineNr">347 </span>]
-<span id="L348" class="LineNr">348 </span><span class="muRecipe">def</span> foo [
-<span id="L349" class="LineNr">349 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
-<span id="L350" class="LineNr">350 </span>  <span class="Delimiter">{</span>
-<span id="L351" class="LineNr">351 </span>    <span class="Identifier">break</span>
-<span id="L352" class="LineNr">352 </span>    reply <span class="Constant">5678</span>
-<span id="L353" class="LineNr">353 </span>  <span class="Delimiter">}</span>
+<span id="L327" class="LineNr">327 </span><span class="Normal">case</span> SAVE_APP_TRACE: <span class="Delimiter">{</span>
+<span id="L328" class="LineNr">328 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L329" class="LineNr">329 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L330" class="LineNr">330 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L529'>trace_app_contents</a><span class="Delimiter">());</span>
+<span id="L331" class="LineNr">331 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L332" class="LineNr">332 </span><span class="Delimiter">}</span>
+<span id="L333" class="LineNr">333 </span>
+<span id="L334" class="LineNr">334 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L335" class="LineNr">335 </span>_CLEANUP_RUN_SANDBOXED<span class="Delimiter">,</span>
+<span id="L336" class="LineNr">336 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L337" class="LineNr">337 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;$cleanup-run-sandboxed&quot;</span><span class="Delimiter">,</span> _CLEANUP_RUN_SANDBOXED<span class="Delimiter">);</span>
+<span id="L338" class="LineNr">338 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L339" class="LineNr">339 </span><span class="Normal">case</span> _CLEANUP_RUN_SANDBOXED: <span class="Delimiter">{</span>
+<span id="L340" class="LineNr">340 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L341" class="LineNr">341 </span><span class="Delimiter">}</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L343" class="LineNr">343 </span><span class="Normal">case</span> _CLEANUP_RUN_SANDBOXED: <span class="Delimiter">{</span>
+<span id="L344" class="LineNr">344 </span>  <a href='101run_sandboxed.cc.html#L166'>run_code_end</a><span class="Delimiter">();</span>
+<span id="L345" class="LineNr">345 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L346" class="LineNr">346 </span><span class="Delimiter">}</span>
+<span id="L347" class="LineNr">347 </span>
+<span id="L348" class="LineNr">348 </span><span class="Delimiter">:(scenario &quot;run_interactive_converts_result_to_text&quot;)</span>
+<span id="L349" class="LineNr">349 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L350" class="LineNr">350 </span>  <span class="Comment"># try to interactively add 2 and 2</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [add <span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">2</span>]
+<span id="L352" class="LineNr">352 </span>  <span class="Constant">20</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L353" class="LineNr">353 </span>  <span class="Constant">30</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">20</span>:text
 <span id="L354" class="LineNr">354 </span>]
-<span id="L355" class="LineNr">355 </span><span class="Comment"># no product should have been tracked</span>
-<span id="L356" class="LineNr">356 </span><span class="traceContains">+mem: storing 0 in location 10</span>
+<span id="L355" class="LineNr">355 </span><span class="Comment"># first letter in the output should be '4' in unicode</span>
+<span id="L356" class="LineNr">356 </span><span class="traceContains">+mem: storing 52 in location 31</span>
 <span id="L357" class="LineNr">357 </span>
-<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(scenario &quot;run_interactive_ignores_products_in_previous_instructions&quot;)</span>
+<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(scenario &quot;run_interactive_ignores_products_in_nested_functions&quot;)</span>
 <span id="L359" class="LineNr">359 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L360" class="LineNr">360 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
-<span id="L361" class="LineNr">361 </span>    add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>  <span class="Comment"># generates a product</span>
-<span id="L362" class="LineNr">362 </span>    foo]  <span class="Comment"># no products</span>
-<span id="L363" class="LineNr">363 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L364" class="LineNr">364 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L365" class="LineNr">365 </span>]
-<span id="L366" class="LineNr">366 </span><span class="muRecipe">def</span> foo [
-<span id="L367" class="LineNr">367 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
-<span id="L368" class="LineNr">368 </span>  <span class="Delimiter">{</span>
-<span id="L369" class="LineNr">369 </span>    <span class="Identifier">break</span>
-<span id="L370" class="LineNr">370 </span>    reply <span class="Constant">5678</span>
-<span id="L371" class="LineNr">371 </span>  <span class="Delimiter">}</span>
-<span id="L372" class="LineNr">372 </span>]
-<span id="L373" class="LineNr">373 </span><span class="Comment"># no product should have been tracked</span>
-<span id="L374" class="LineNr">374 </span><span class="traceContains">+mem: storing 0 in location 10</span>
-<span id="L375" class="LineNr">375 </span>
-<span id="L376" class="LineNr">376 </span><span class="Delimiter">:(scenario &quot;run_interactive_remembers_products_before_final_label&quot;)</span>
-<span id="L377" class="LineNr">377 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L378" class="LineNr">378 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
-<span id="L379" class="LineNr">379 </span>    add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>  <span class="Comment"># generates a product</span>
-<span id="L380" class="LineNr">380 </span>    +foo]  <span class="Comment"># no products</span>
-<span id="L381" class="LineNr">381 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L382" class="LineNr">382 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L383" class="LineNr">383 </span>]
-<span id="L384" class="LineNr">384 </span><span class="muRecipe">def</span> foo [
-<span id="L385" class="LineNr">385 </span>  <span class="Constant">20</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
-<span id="L386" class="LineNr">386 </span>  <span class="Delimiter">{</span>
-<span id="L387" class="LineNr">387 </span>    <span class="Identifier">break</span>
-<span id="L388" class="LineNr">388 </span>    reply <span class="Constant">5678</span>
-<span id="L389" class="LineNr">389 </span>  <span class="Delimiter">}</span>
-<span id="L390" class="LineNr">390 </span>]
-<span id="L391" class="LineNr">391 </span><span class="Comment"># product tracked</span>
-<span id="L392" class="LineNr">392 </span><span class="traceContains">+mem: storing 50 in location 11</span>
-<span id="L393" class="LineNr">393 </span>
-<span id="L394" class="LineNr">394 </span><span class="Delimiter">:(scenario &quot;run_interactive_returns_text&quot;)</span>
-<span id="L395" class="LineNr">395 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L396" class="LineNr">396 </span>  <span class="Comment"># try to interactively add 2 and 2</span>
-<span id="L397" class="LineNr">397 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
-<span id="L398" class="LineNr">398 </span>    <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [a]
-<span id="L399" class="LineNr">399 </span>    <span class="Normal">y</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [b]
-<span id="L400" class="LineNr">400 </span>    <span class="Normal">z</span>:text<span class="Special"> &lt;- </span>append x:text<span class="Delimiter">,</span> y:text
-<span id="L401" class="LineNr">401 </span>  ]
-<span id="L402" class="LineNr">402 </span>  <span class="Constant">2</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L403" class="LineNr">403 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">2</span>:text
-<span id="L404" class="LineNr">404 </span>]
-<span id="L405" class="LineNr">405 </span><span class="Comment"># output contains &quot;ab&quot;</span>
-<span id="L406" class="LineNr">406 </span><span class="traceContains">+mem: storing 97 in location 11</span>
-<span id="L407" class="LineNr">407 </span><span class="traceContains">+mem: storing 98 in location 12</span>
-<span id="L408" class="LineNr">408 </span>
-<span id="L409" class="LineNr">409 </span><span class="Delimiter">:(scenario &quot;run_interactive_returns_errors&quot;)</span>
-<span id="L410" class="LineNr">410 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L411" class="LineNr">411 </span>  <span class="Comment"># run a command that generates an error</span>
-<span id="L412" class="LineNr">412 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [x:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
-<span id="L413" class="LineNr">413 </span>get x:num<span class="Delimiter">,</span> <span class="Constant">foo:offset</span>]
-<span id="L414" class="LineNr">414 </span>  <span class="Constant">2</span>:text<span class="Delimiter">,</span> <span class="Constant">3</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L415" class="LineNr">415 </span>  <span class="Constant">10</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">3</span>:text
-<span id="L416" class="LineNr">416 </span>]
-<span id="L417" class="LineNr">417 </span><span class="Comment"># error should be &quot;unknown element foo in container number&quot;</span>
-<span id="L418" class="LineNr">418 </span><span class="traceContains">+mem: storing 117 in location 11</span>
-<span id="L419" class="LineNr">419 </span><span class="traceContains">+mem: storing 110 in location 12</span>
-<span id="L420" class="LineNr">420 </span><span class="traceContains">+mem: storing 107 in location 13</span>
-<span id="L421" class="LineNr">421 </span><span class="traceContains">+mem: storing 110 in location 14</span>
-<span id="L422" class="LineNr">422 </span><span class="Comment"># ...</span>
-<span id="L423" class="LineNr">423 </span>
-<span id="L424" class="LineNr">424 </span><span class="Delimiter">:(scenario run_interactive_with_comment)</span>
-<span id="L425" class="LineNr">425 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L426" class="LineNr">426 </span>  <span class="Comment"># 2 instructions, with a comment after the first</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Constant">1</span>:&amp;:@:num<span class="Special"> &lt;- </span><span class="Normal">new</span> [a:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># abc</span>
-<span id="L428" class="LineNr">428 </span><span class="Normal">b</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
-<span id="L429" class="LineNr">429 </span>]
-<span id="L430" class="LineNr">430 </span>  <span class="Constant">2</span>:text<span class="Delimiter">,</span> <span class="Constant">3</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
-<span id="L431" class="LineNr">431 </span>]
-<span id="L432" class="LineNr">432 </span><span class="Comment"># no errors</span>
-<span id="L433" class="LineNr">433 </span><span class="traceContains">+mem: storing 0 in location 3</span>
-<span id="L434" class="LineNr">434 </span>
-<span id="L435" class="LineNr">435 </span><span class="Delimiter">:(after &quot;Running One Instruction&quot;)</span>
-<span id="L436" class="LineNr">436 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Track_most_recent_products &amp;&amp; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">)</span> == Call_depth_to_track_most_recent_products_at
-<span id="L437" class="LineNr">437 </span>    &amp;&amp; !current_instruction<span class="Delimiter">().</span>is_label
-<span id="L438" class="LineNr">438 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>name != <span class="Constant">&quot;$stop-tracking-products&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L439" class="LineNr">439 </span>  Most_recent_products = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L440" class="LineNr">440 </span><span class="Delimiter">}</span>
-<span id="L441" class="LineNr">441 </span><span class="Delimiter">:(before &quot;End Running One Instruction&quot;)</span>
-<span id="L442" class="LineNr">442 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Track_most_recent_products &amp;&amp; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">)</span> == Call_depth_to_track_most_recent_products_at<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L443" class="LineNr">443 </span>  Most_recent_products = <a href='101run_sandboxed.cc.html#L446'>track_most_recent_products</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">(),</span> products<span class="Delimiter">);</span>
-<span id="L444" class="LineNr">444 </span><span class="Delimiter">}</span>
-<span id="L445" class="LineNr">445 </span><span class="Delimiter">:(code)</span>
-<span id="L446" class="LineNr">446 </span>string <a href='101run_sandboxed.cc.html#L446'>track_most_recent_products</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; <a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;vector&lt;<span class="Normal">double</span>&gt; &gt;&amp; products<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L447" class="LineNr">447 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L448" class="LineNr">448 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L449" class="LineNr">449 </span>    <span class="Comment">// A sandbox can print a string result, but only if it is actually saved</span>
-<span id="L450" class="LineNr">450 </span>    <span class="Comment">// to a variable in the sandbox, because otherwise the results are</span>
-<span id="L451" class="LineNr">451 </span>    <span class="Comment">// reclaimed before the sandbox sees them. So you get these interactions</span>
-<span id="L452" class="LineNr">452 </span>    <span class="Comment">// in the sandbox:</span>
-<span id="L453" class="LineNr">453 </span>    <span class="Comment">//</span>
-<span id="L454" class="LineNr">454 </span>    <span class="Comment">//    new [abc]</span>
-<span id="L455" class="LineNr">455 </span>    <span class="Comment">//    =&gt; &lt;address&gt;</span>
-<span id="L456" class="LineNr">456 </span>    <span class="Comment">//</span>
-<span id="L457" class="LineNr">457 </span>    <span class="Comment">//    x:text &lt;- new [abc]</span>
-<span id="L458" class="LineNr">458 </span>    <span class="Comment">//    =&gt; abc</span>
-<span id="L459" class="LineNr">459 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L460" class="LineNr">460 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L177'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L32'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
-<span id="L461" class="LineNr">461 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!scalar<span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// error handled elsewhere</span>
-<span id="L462" class="LineNr">462 </span>        out &lt;&lt; <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L463" class="LineNr">463 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L464" class="LineNr">464 </span>      <span class="Delimiter">}</span>
-<span id="L465" class="LineNr">465 </span>    <span class="Delimiter">}</span>
-<span id="L466" class="LineNr">466 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span> j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span> ++j<span class="Delimiter">)</span>
-<span id="L467" class="LineNr">467 </span>      out &lt;&lt; no_scientific<span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
-<span id="L468" class="LineNr">468 </span>    out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L469" class="LineNr">469 </span>  <span class="Delimiter">}</span>
-<span id="L470" class="LineNr">470 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L471" class="LineNr">471 </span><span class="Delimiter">}</span>
-<span id="L472" class="LineNr">472 </span>
-<span id="L473" class="LineNr">473 </span><span class="Delimiter">:(code)</span>
-<span id="L474" class="LineNr">474 </span>string <a href='101run_sandboxed.cc.html#L474'>strip_comments</a><span class="Delimiter">(</span>string in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L475" class="LineNr">475 </span>  ostringstream result<span class="Delimiter">;</span>
-<span id="L476" class="LineNr">476 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L477" class="LineNr">477 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> != <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L478" class="LineNr">478 </span>      result &lt;&lt; in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L479" class="LineNr">479 </span>    <span class="Delimiter">}</span>
-<span id="L480" class="LineNr">480 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L481" class="LineNr">481 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span>i+<span class="Constant">1</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i+<span class="Constant">1</span><span class="Delimiter">)</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span>
-<span id="L482" class="LineNr">482 </span>        ++i<span class="Delimiter">;</span>
-<span id="L483" class="LineNr">483 </span>    <span class="Delimiter">}</span>
-<span id="L484" class="LineNr">484 </span>  <span class="Delimiter">}</span>
-<span id="L485" class="LineNr">485 </span>  <span class="Identifier">return</span> result<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L486" class="LineNr">486 </span><span class="Delimiter">}</span>
-<span id="L487" class="LineNr">487 </span>
-<span id="L488" class="LineNr">488 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L488'>stringified_value_of_location</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L489" class="LineNr">489 </span>  <span class="Comment">// convert to string</span>
-<span id="L490" class="LineNr">490 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L491" class="LineNr">491 </span>  out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L80'>address</a><span class="Delimiter">));</span>
-<span id="L492" class="LineNr">492 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>out<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
-<span id="L493" class="LineNr">493 </span><span class="Delimiter">}</span>
-<span id="L494" class="LineNr">494 </span>
-<span id="L495" class="LineNr">495 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L495'>trace_error_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L496" class="LineNr">496 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L497" class="LineNr">497 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L498" class="LineNr">498 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L499" class="LineNr">499 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>label != <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L500" class="LineNr">500 </span>    out &lt;&lt; p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">;</span>
-<span id="L501" class="LineNr">501 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L502" class="LineNr">502 </span>  <span class="Delimiter">}</span>
-<span id="L503" class="LineNr">503 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L504" class="LineNr">504 </span>  <a href='101run_sandboxed.cc.html#L523'>truncate</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L505" class="LineNr">505 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L506" class="LineNr">506 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L507" class="LineNr">507 </span><span class="Delimiter">}</span>
-<span id="L508" class="LineNr">508 </span>
-<span id="L509" class="LineNr">509 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L509'>trace_app_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L510" class="LineNr">510 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L511" class="LineNr">511 </span>  ostringstream out<span class="Delimiter">;</span>
-<span id="L512" class="LineNr">512 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L513" class="LineNr">513 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>depth != App_depth<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L514" class="LineNr">514 </span>    out &lt;&lt; p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">;</span>
-<span id="L515" class="LineNr">515 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">.</span><a href='003trace.cc.html#L203'>end</a><span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L516" class="LineNr">516 </span>  <span class="Delimiter">}</span>
-<span id="L517" class="LineNr">517 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L518" class="LineNr">518 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L519" class="LineNr">519 </span>  <a href='101run_sandboxed.cc.html#L523'>truncate</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L520" class="LineNr">520 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L38'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
-<span id="L521" class="LineNr">521 </span><span class="Delimiter">}</span>
-<span id="L522" class="LineNr">522 </span>
-<span id="L523" class="LineNr">523 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L523'>truncate</a><span class="Delimiter">(</span>string&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L524" class="LineNr">524 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &gt; <span class="Constant">1024</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L525" class="LineNr">525 </span>    x<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">1024</span><span class="Delimiter">);</span>
-<span id="L526" class="LineNr">526 </span>    *x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L527" class="LineNr">527 </span>    *++x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="Constant">'.'</span><span class="Delimiter">;</span>
-<span id="L528" class="LineNr">528 </span>    *++++x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="Constant">'.'</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="Delimiter">}</span>
-<span id="L531" class="LineNr">531 </span>
-<span id="L532" class="LineNr">532 </span><span class="Comment">//: simpler version of run-sandboxed: doesn't do any running, just loads</span>
-<span id="L533" class="LineNr">533 </span><span class="Comment">//: recipes and reports errors.</span>
-<span id="L534" class="LineNr">534 </span>
-<span id="L535" class="LineNr">535 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
-<span id="L536" class="LineNr">536 </span>RELOAD<span class="Delimiter">,</span>
-<span id="L537" class="LineNr">537 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
-<span id="L538" class="LineNr">538 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;reload&quot;</span><span class="Delimiter">,</span> RELOAD<span class="Delimiter">);</span>
-<span id="L539" class="LineNr">539 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
-<span id="L540" class="LineNr">540 </span><span class="Normal">case</span> RELOAD: <span class="Delimiter">{</span>
-<span id="L541" class="LineNr">541 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L542" class="LineNr">542 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reload' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L543" class="LineNr">543 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L544" class="LineNr">544 </span>  <span class="Delimiter">}</span>
-<span id="L545" class="LineNr">545 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
-<span id="L546" class="LineNr">546 </span>    <a href='003trace.cc.html#L174'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'reload' should be a string, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L203'>end</a><span class="Delimiter">();</span>
-<span id="L547" class="LineNr">547 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L548" class="LineNr">548 </span>  <span class="Delimiter">}</span>
-<span id="L549" class="LineNr">549 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L360" class="LineNr">360 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [foo]
+<span id="L361" class="LineNr">361 </span>  <span class="Constant">20</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L362" class="LineNr">362 </span>  <span class="Constant">30</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">20</span>:text
+<span id="L363" class="LineNr">363 </span>]
+<span id="L364" class="LineNr">364 </span><span class="muRecipe">def</span> foo [
+<span id="L365" class="LineNr">365 </span>  <span class="Constant">40</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
+<span id="L366" class="LineNr">366 </span>  <span class="Delimiter">{</span>
+<span id="L367" class="LineNr">367 </span>    <span class="Identifier">break</span>
+<span id="L368" class="LineNr">368 </span>    reply <span class="Constant">5678</span>
+<span id="L369" class="LineNr">369 </span>  <span class="Delimiter">}</span>
+<span id="L370" class="LineNr">370 </span>]
+<span id="L371" class="LineNr">371 </span><span class="Comment"># no product should have been tracked</span>
+<span id="L372" class="LineNr">372 </span><span class="traceContains">+mem: storing 0 in location 30</span>
+<span id="L373" class="LineNr">373 </span>
+<span id="L374" class="LineNr">374 </span><span class="Delimiter">:(scenario &quot;run_interactive_ignores_products_in_previous_instructions&quot;)</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="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
+<span id="L377" class="LineNr">377 </span>    add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>  <span class="Comment"># generates a product</span>
+<span id="L378" class="LineNr">378 </span>    foo]  <span class="Comment"># no products</span>
+<span id="L379" class="LineNr">379 </span>  <span class="Constant">20</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L380" class="LineNr">380 </span>  <span class="Constant">30</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">20</span>:text
+<span id="L381" class="LineNr">381 </span>]
+<span id="L382" class="LineNr">382 </span><span class="muRecipe">def</span> foo [
+<span id="L383" class="LineNr">383 </span>  <span class="Constant">40</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Delimiter">{</span>
+<span id="L385" class="LineNr">385 </span>    <span class="Identifier">break</span>
+<span id="L386" class="LineNr">386 </span>    reply <span class="Constant">5678</span>
+<span id="L387" class="LineNr">387 </span>  <span class="Delimiter">}</span>
+<span id="L388" class="LineNr">388 </span>]
+<span id="L389" class="LineNr">389 </span><span class="Comment"># no product should have been tracked</span>
+<span id="L390" class="LineNr">390 </span><span class="traceContains">+mem: storing 0 in location 30</span>
+<span id="L391" class="LineNr">391 </span>
+<span id="L392" class="LineNr">392 </span><span class="Delimiter">:(scenario &quot;run_interactive_remembers_products_before_final_label&quot;)</span>
+<span id="L393" class="LineNr">393 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L394" class="LineNr">394 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
+<span id="L395" class="LineNr">395 </span>    add <span class="Constant">1</span><span class="Delimiter">,</span> <span class="Constant">1</span>  <span class="Comment"># generates a product</span>
+<span id="L396" class="LineNr">396 </span>    +foo]  <span class="Comment"># no products</span>
+<span id="L397" class="LineNr">397 </span>  <span class="Constant">20</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L398" class="LineNr">398 </span>  <span class="Constant">30</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">20</span>:text
+<span id="L399" class="LineNr">399 </span>]
+<span id="L400" class="LineNr">400 </span><span class="muRecipe">def</span> foo [
+<span id="L401" class="LineNr">401 </span>  <span class="Constant">40</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">1234</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Delimiter">{</span>
+<span id="L403" class="LineNr">403 </span>    <span class="Identifier">break</span>
+<span id="L404" class="LineNr">404 </span>    reply <span class="Constant">5678</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Delimiter">}</span>
+<span id="L406" class="LineNr">406 </span>]
+<span id="L407" class="LineNr">407 </span><span class="Comment"># product tracked</span>
+<span id="L408" class="LineNr">408 </span><span class="traceContains">+mem: storing 50 in location 31</span>
+<span id="L409" class="LineNr">409 </span>
+<span id="L410" class="LineNr">410 </span><span class="Delimiter">:(scenario &quot;run_interactive_returns_text&quot;)</span>
+<span id="L411" class="LineNr">411 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L412" class="LineNr">412 </span>  <span class="Comment"># try to interactively add 2 and 2</span>
+<span id="L413" class="LineNr">413 </span>  <span class="Constant">1</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
+<span id="L414" class="LineNr">414 </span>    <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [a]
+<span id="L415" class="LineNr">415 </span>    <span class="Normal">y</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [b]
+<span id="L416" class="LineNr">416 </span>    <span class="Normal">z</span>:text<span class="Special"> &lt;- </span>append x:text<span class="Delimiter">,</span> y:text
+<span id="L417" class="LineNr">417 </span>  ]
+<span id="L418" class="LineNr">418 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">1</span>:text
+<span id="L419" class="LineNr">419 </span><span class="CommentedCode">#?   $print 10:text 10/newline</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Constant">20</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">10</span>:text
+<span id="L421" class="LineNr">421 </span>]
+<span id="L422" class="LineNr">422 </span><span class="Comment"># output contains &quot;ab&quot;</span>
+<span id="L423" class="LineNr">423 </span><span class="traceContains">+mem: storing 97 in location 21</span>
+<span id="L424" class="LineNr">424 </span><span class="traceContains">+mem: storing 98 in location 22</span>
+<span id="L425" class="LineNr">425 </span>
+<span id="L426" class="LineNr">426 </span><span class="Delimiter">:(scenario &quot;run_interactive_returns_errors&quot;)</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"># run a command that generates an error</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [x:num<span class="Special"> &lt;- </span>copy <span class="Constant">34</span>
+<span id="L430" class="LineNr">430 </span>get x:num<span class="Delimiter">,</span> <span class="Constant">foo:offset</span>]
+<span id="L431" class="LineNr">431 </span>  <span class="Constant">20</span>:text<span class="Delimiter">,</span> <span class="Constant">30</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L432" class="LineNr">432 </span>  <span class="Constant">40</span>:@:<span class="Normal">char</span><span class="Special"> &lt;- </span>copy *<span class="Constant">30</span>:text
+<span id="L433" class="LineNr">433 </span>]
+<span id="L434" class="LineNr">434 </span><span class="Comment"># error should be &quot;unknown element foo in container number&quot;</span>
+<span id="L435" class="LineNr">435 </span><span class="traceContains">+mem: storing 117 in location 41</span>
+<span id="L436" class="LineNr">436 </span><span class="traceContains">+mem: storing 110 in location 42</span>
+<span id="L437" class="LineNr">437 </span><span class="traceContains">+mem: storing 107 in location 43</span>
+<span id="L438" class="LineNr">438 </span><span class="traceContains">+mem: storing 110 in location 44</span>
+<span id="L439" class="LineNr">439 </span><span class="Comment"># ...</span>
+<span id="L440" class="LineNr">440 </span>
+<span id="L441" class="LineNr">441 </span><span class="Delimiter">:(scenario run_interactive_with_comment)</span>
+<span id="L442" class="LineNr">442 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L443" class="LineNr">443 </span>  <span class="Comment"># 2 instructions, with a comment after the first</span>
+<span id="L444" class="LineNr">444 </span>  <span class="Constant">10</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [a:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>  <span class="Comment"># abc</span>
+<span id="L445" class="LineNr">445 </span><span class="Normal">b</span>:num<span class="Special"> &lt;- </span>copy <span class="Constant">0</span>
+<span id="L446" class="LineNr">446 </span>]
+<span id="L447" class="LineNr">447 </span>  <span class="Constant">20</span>:text<span class="Delimiter">,</span> <span class="Constant">30</span>:text<span class="Special"> &lt;- </span>run-sandboxed <span class="Constant">10</span>:text
+<span id="L448" class="LineNr">448 </span>]
+<span id="L449" class="LineNr">449 </span><span class="Comment"># no errors</span>
+<span id="L450" class="LineNr">450 </span><span class="Comment"># skip alloc id</span>
+<span id="L451" class="LineNr">451 </span><span class="traceContains">+mem: storing 0 in location 30</span>
+<span id="L452" class="LineNr">452 </span><span class="traceContains">+mem: storing 0 in location 31</span>
+<span id="L453" class="LineNr">453 </span>
+<span id="L454" class="LineNr">454 </span><span class="Delimiter">:(after &quot;Running One Instruction&quot;)</span>
+<span id="L455" class="LineNr">455 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Track_most_recent_products &amp;&amp; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">)</span> == Call_depth_to_track_most_recent_products_at
+<span id="L456" class="LineNr">456 </span>    &amp;&amp; !current_instruction<span class="Delimiter">().</span>is_label
+<span id="L457" class="LineNr">457 </span>    &amp;&amp; <a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">().</span>name != <span class="Constant">&quot;$stop-tracking-products&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L458" class="LineNr">458 </span>  Most_recent_products = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L459" class="LineNr">459 </span><span class="Delimiter">}</span>
+<span id="L460" class="LineNr">460 </span><span class="Delimiter">:(before &quot;End Running One Instruction&quot;)</span>
+<span id="L461" class="LineNr">461 </span><span class="Normal">if</span> <span class="Delimiter">(</span>Track_most_recent_products &amp;&amp; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>Current_routine<span class="Delimiter">-&gt;</span>calls<span class="Delimiter">)</span> == Call_depth_to_track_most_recent_products_at<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L462" class="LineNr">462 </span>  Most_recent_products = <a href='101run_sandboxed.cc.html#L466'>track_most_recent_products</a><span class="Delimiter">(</span><a href='026call.cc.html#L89'>current_instruction</a><span class="Delimiter">(),</span> products<span class="Delimiter">);</span>
+<span id="L463" class="LineNr">463 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;most recent products: &quot; &lt;&lt; Most_recent_products &lt;&lt; '\n';</span>
+<span id="L464" class="LineNr">464 </span><span class="Delimiter">}</span>
+<span id="L465" class="LineNr">465 </span><span class="Delimiter">:(code)</span>
+<span id="L466" class="LineNr">466 </span>string <a href='101run_sandboxed.cc.html#L466'>track_most_recent_products</a><span class="Delimiter">(</span><span class="Normal">const</span> instruction&amp; <a href='010vm.cc.html#L33'>instruction</a><span class="Delimiter">,</span> <span class="Normal">const</span> vector&lt;vector&lt;<span class="Normal">double</span>&gt; &gt;&amp; products<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L467" class="LineNr">467 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L468" class="LineNr">468 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L469" class="LineNr">469 </span>    <span class="Comment">// A sandbox can print a string result, but only if it is actually saved</span>
+<span id="L470" class="LineNr">470 </span>    <span class="Comment">// to a variable in the sandbox, because otherwise the results are</span>
+<span id="L471" class="LineNr">471 </span>    <span class="Comment">// reclaimed before the sandbox sees them. So you get these interactions</span>
+<span id="L472" class="LineNr">472 </span>    <span class="Comment">// in the sandbox:</span>
+<span id="L473" class="LineNr">473 </span>    <span class="Comment">//</span>
+<span id="L474" class="LineNr">474 </span>    <span class="Comment">//    new [abc]</span>
+<span id="L475" class="LineNr">475 </span>    <span class="Comment">//    =&gt; &lt;address&gt;</span>
+<span id="L476" class="LineNr">476 </span>    <span class="Comment">//</span>
+<span id="L477" class="LineNr">477 </span>    <span class="Comment">//    x:text &lt;- new [abc]</span>
+<span id="L478" class="LineNr">478 </span>    <span class="Comment">//    =&gt; abc</span>
+<span id="L479" class="LineNr">479 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span><a href='010vm.cc.html#L33'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L480" class="LineNr">480 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='027call_ingredient.cc.html#L179'>is_mu_text</a><span class="Delimiter">(</span><a href='010vm.cc.html#L33'>instruction</a><span class="Delimiter">.</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span> <span class="Delimiter">{</span>
+<span id="L481" class="LineNr">481 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// weak silent check for address</span>
+<span id="L482" class="LineNr">482 </span>        out &lt;&lt; <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">))</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L483" class="LineNr">483 </span>        <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L484" class="LineNr">484 </span>      <span class="Delimiter">}</span>
+<span id="L485" class="LineNr">485 </span>    <span class="Delimiter">}</span>
+<span id="L486" class="LineNr">486 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span> j &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span> ++j<span class="Delimiter">)</span>
+<span id="L487" class="LineNr">487 </span>      out &lt;&lt; no_scientific<span class="Delimiter">(</span>products<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span>at<span class="Delimiter">(</span>j<span class="Delimiter">))</span> &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L488" class="LineNr">488 </span>    out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L489" class="LineNr">489 </span>  <span class="Delimiter">}</span>
+<span id="L490" class="LineNr">490 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L491" class="LineNr">491 </span><span class="Delimiter">}</span>
+<span id="L492" class="LineNr">492 </span>
+<span id="L493" class="LineNr">493 </span><span class="Delimiter">:(code)</span>
+<span id="L494" class="LineNr">494 </span>string <a href='101run_sandboxed.cc.html#L494'>strip_comments</a><span class="Delimiter">(</span>string in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L495" class="LineNr">495 </span>  ostringstream result<span class="Delimiter">;</span>
+<span id="L496" class="LineNr">496 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span> i &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span> ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L497" class="LineNr">497 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)</span> != <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L498" class="LineNr">498 </span>      result &lt;&lt; in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L499" class="LineNr">499 </span>    <span class="Delimiter">}</span>
+<span id="L500" class="LineNr">500 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L501" class="LineNr">501 </span>      <span class="Normal">while</span> <span class="Delimiter">(</span>i+<span class="Constant">1</span> &lt; <a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">)</span> &amp;&amp; in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i+<span class="Constant">1</span><span class="Delimiter">)</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span>
+<span id="L502" class="LineNr">502 </span>        ++i<span class="Delimiter">;</span>
+<span id="L503" class="LineNr">503 </span>    <span class="Delimiter">}</span>
+<span id="L504" class="LineNr">504 </span>  <span class="Delimiter">}</span>
+<span id="L505" class="LineNr">505 </span>  <span class="Identifier">return</span> result<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L506" class="LineNr">506 </span><span class="Delimiter">}</span>
+<span id="L507" class="LineNr">507 </span>
+<span id="L508" class="LineNr">508 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L508'>stringified_value_of_location</a><span class="Delimiter">(</span><span class="Normal">int</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L509" class="LineNr">509 </span>  <span class="Comment">// convert to string</span>
+<span id="L510" class="LineNr">510 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L511" class="LineNr">511 </span>  out &lt;&lt; no_scientific<span class="Delimiter">(</span><a href='001help.cc.html#L229'>get_or_insert</a><span class="Delimiter">(</span>Memory<span class="Delimiter">,</span> <a href='043space.cc.html#L101'>address</a><span class="Delimiter">));</span>
+<span id="L512" class="LineNr">512 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>out<span class="Delimiter">.</span>str<span class="Delimiter">());</span>
+<span id="L513" class="LineNr">513 </span><span class="Delimiter">}</span>
+<span id="L514" class="LineNr">514 </span>
+<span id="L515" class="LineNr">515 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L515'>trace_error_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L516" class="LineNr">516 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L517" class="LineNr">517 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L518" class="LineNr">518 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L519" class="LineNr">519 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>label != <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L520" class="LineNr">520 </span>    out &lt;&lt; p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">;</span>
+<span id="L521" class="LineNr">521 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L522" class="LineNr">522 </span>  <span class="Delimiter">}</span>
+<span id="L523" class="LineNr">523 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L524" class="LineNr">524 </span>  <a href='101run_sandboxed.cc.html#L543'>truncate</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L525" class="LineNr">525 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L526" class="LineNr">526 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L527" class="LineNr">527 </span><span class="Delimiter">}</span>
+<span id="L528" class="LineNr">528 </span>
+<span id="L529" class="LineNr">529 </span><span class="Normal">int</span> <a href='101run_sandboxed.cc.html#L529'>trace_app_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L530" class="LineNr">530 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L532" class="LineNr">532 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span>begin<span class="Delimiter">();</span> p != Trace_stream<span class="Delimiter">-&gt;</span>past_lines<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span> ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L533" class="LineNr">533 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>depth != App_depth<span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L534" class="LineNr">534 </span>    out &lt;&lt; p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">;</span>
+<span id="L535" class="LineNr">535 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*--p<span class="Delimiter">-&gt;</span>contents<span class="Delimiter">.</span><a href='003trace.cc.html#L226'>end</a><span class="Delimiter">()</span> != <span class="cSpecial">'\n'</span><span class="Delimiter">)</span> out &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L536" class="LineNr">536 </span>  <span class="Delimiter">}</span>
+<span id="L537" class="LineNr">537 </span>  string result = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L538" class="LineNr">538 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L539" class="LineNr">539 </span>  <a href='101run_sandboxed.cc.html#L543'>truncate</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L540" class="LineNr">540 </span>  <span class="Identifier">return</span> <a href='038new_text.cc.html#L39'>new_mu_text</a><span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L541" class="LineNr">541 </span><span class="Delimiter">}</span>
+<span id="L542" class="LineNr">542 </span>
+<span id="L543" class="LineNr">543 </span><span class="Normal">void</span> <a href='101run_sandboxed.cc.html#L543'>truncate</a><span class="Delimiter">(</span>string&amp; x<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L544" class="LineNr">544 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>x<span class="Delimiter">)</span> &gt; <span class="Constant">1024</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L545" class="LineNr">545 </span>    x<span class="Delimiter">.</span>erase<span class="Delimiter">(</span><span class="Constant">1024</span><span class="Delimiter">);</span>
+<span id="L546" class="LineNr">546 </span>    *x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L547" class="LineNr">547 </span>    *++x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="Constant">'.'</span><span class="Delimiter">;</span>
+<span id="L548" class="LineNr">548 </span>    *++++x<span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> = <span class="Constant">'.'</span><span class="Delimiter">;</span>
+<span id="L549" class="LineNr">549 </span>  <span class="Delimiter">}</span>
 <span id="L550" class="LineNr">550 </span><span class="Delimiter">}</span>
-<span id="L551" class="LineNr">551 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
-<span id="L552" class="LineNr">552 </span><span class="Normal">case</span> RELOAD: <span class="Delimiter">{</span>
-<span id="L553" class="LineNr">553 </span>  restore_non_recipe_snapshots<span class="Delimiter">();</span>
-<span id="L554" class="LineNr">554 </span>  string code = <a href='038new_text.cc.html#L141'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
-<span id="L555" class="LineNr">555 </span>  <a href='101run_sandboxed.cc.html#L145'>run_code_begin</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">should_stash_snapshots</span><span class="Comment">*/</span><span class="Constant">false</span><span class="Delimiter">);</span>
-<span id="L556" class="LineNr">556 </span>  routine* save_current_routine = Current_routine<span class="Delimiter">;</span>
-<span id="L557" class="LineNr">557 </span>  Current_routine = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L558" class="LineNr">558 </span>  Sandbox_mode = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L559" class="LineNr">559 </span>  vector&lt;recipe_ordinal&gt; recipes_reloaded = load<span class="Delimiter">(</span>code<span class="Delimiter">);</span>
-<span id="L560" class="LineNr">560 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
-<span id="L561" class="LineNr">561 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L133'>newline</a><span class="Delimiter">();</span>  <span class="Comment">// flush trace</span>
-<span id="L562" class="LineNr">562 </span>  Sandbox_mode = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L563" class="LineNr">563 </span>  Current_routine = save_current_routine<span class="Delimiter">;</span>
-<span id="L564" class="LineNr">564 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L565" class="LineNr">565 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L495'>trace_error_contents</a><span class="Delimiter">());</span>
-<span id="L566" class="LineNr">566 </span>  <a href='101run_sandboxed.cc.html#L158'>run_code_end</a><span class="Delimiter">();</span>  <span class="Comment">// wait until we're done with the trace contents</span>
-<span id="L567" class="LineNr">567 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L568" class="LineNr">568 </span><span class="Delimiter">}</span>
-<span id="L569" class="LineNr">569 </span>
-<span id="L570" class="LineNr">570 </span><span class="Delimiter">:(scenario reload_continues_past_error)</span>
-<span id="L571" class="LineNr">571 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L572" class="LineNr">572 </span>  local-scope
-<span id="L573" class="LineNr">573 </span>  <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [recipe foo [
-<span id="L574" class="LineNr">574 </span>  get <span class="Constant">1234</span>:num<span class="Delimiter">,</span> <span class="Constant">foo:offset</span>
-<span id="L575" class="LineNr">575 </span>]]
-<span id="L576" class="LineNr">576 </span>  reload x
-<span id="L577" class="LineNr">577 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">34</span>
-<span id="L578" class="LineNr">578 </span>]
-<span id="L579" class="LineNr">579 </span><span class="traceContains">+mem: storing 34 in location 1</span>
-<span id="L580" class="LineNr">580 </span>
-<span id="L581" class="LineNr">581 </span><span class="Delimiter">:(scenario reload_can_repeatedly_load_container_definitions)</span>
-<span id="L582" class="LineNr">582 </span><span class="Comment"># define a container and try to create it (merge requires knowing container size)</span>
-<span id="L583" class="LineNr">583 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
-<span id="L584" class="LineNr">584 </span>  local-scope
-<span id="L585" class="LineNr">585 </span>  <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
-<span id="L586" class="LineNr">586 </span>    container foo [
-<span id="L587" class="LineNr">587 </span>      <span class="Normal">x</span>:num
-<span id="L588" class="LineNr">588 </span>      <span class="Normal">y</span>:num
-<span id="L589" class="LineNr">589 </span>    ]
-<span id="L590" class="LineNr">590 </span>    <a href='010vm.cc.html#L19'>recipe</a> bar [
-<span id="L591" class="LineNr">591 </span>      local-scope
-<span id="L592" class="LineNr">592 </span>      <span class="Normal">x</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
-<span id="L593" class="LineNr">593 </span>    ]
-<span id="L594" class="LineNr">594 </span>  ]
-<span id="L595" class="LineNr">595 </span>  <span class="Comment"># save warning addresses in locations of type 'number' to avoid spurious changes to them due to 'abandon'</span>
-<span id="L596" class="LineNr">596 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>reload x
-<span id="L597" class="LineNr">597 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>reload x
-<span id="L598" class="LineNr">598 </span>]
-<span id="L599" class="LineNr">599 </span><span class="Comment"># no errors on either load</span>
-<span id="L600" class="LineNr">600 </span><span class="traceContains">+mem: storing 0 in location 1</span>
-<span id="L601" class="LineNr">601 </span><span class="traceContains">+mem: storing 0 in location 2</span>
+<span id="L551" class="LineNr">551 </span>
+<span id="L552" class="LineNr">552 </span><span class="Comment">//: simpler version of run-sandboxed: doesn't do any running, just loads</span>
+<span id="L553" class="LineNr">553 </span><span class="Comment">//: recipes and reports errors.</span>
+<span id="L554" class="LineNr">554 </span>
+<span id="L555" class="LineNr">555 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Declarations&quot;)</span>
+<span id="L556" class="LineNr">556 </span>RELOAD<span class="Delimiter">,</span>
+<span id="L557" class="LineNr">557 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Numbers&quot;)</span>
+<span id="L558" class="LineNr">558 </span><a href='001help.cc.html#L221'>put</a><span class="Delimiter">(</span>Recipe_ordinal<span class="Delimiter">,</span> <span class="Constant">&quot;reload&quot;</span><span class="Delimiter">,</span> RELOAD<span class="Delimiter">);</span>
+<span id="L559" class="LineNr">559 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Checks&quot;)</span>
+<span id="L560" class="LineNr">560 </span><span class="Normal">case</span> RELOAD: <span class="Delimiter">{</span>
+<span id="L561" class="LineNr">561 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L141'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span>ingredients<span class="Delimiter">)</span> != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L562" class="LineNr">562 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'reload' requires exactly one ingredient, but got '&quot;</span> &lt;&lt; inst<span class="Delimiter">.</span>original_string &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L563" class="LineNr">563 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L564" class="LineNr">564 </span>  <span class="Delimiter">}</span>
+<span id="L565" class="LineNr">565 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_mu_text<span class="Delimiter">(</span>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 class="Delimiter">{</span>
+<span id="L566" class="LineNr">566 </span>    <a href='003trace.cc.html#L197'>raise</a> &lt;&lt; <a href='013update_operation.cc.html#L25'>maybe</a><span class="Delimiter">(</span>get<span class="Delimiter">(</span>Recipe<span class="Delimiter">,</span> r<span class="Delimiter">).</span>name<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;first ingredient of 'reload' should be a string, but got '&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;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L226'>end</a><span class="Delimiter">();</span>
+<span id="L567" class="LineNr">567 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L568" class="LineNr">568 </span>  <span class="Delimiter">}</span>
+<span id="L569" class="LineNr">569 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L570" class="LineNr">570 </span><span class="Delimiter">}</span>
+<span id="L571" class="LineNr">571 </span><span class="Delimiter">:(before &quot;End Primitive Recipe Implementations&quot;)</span>
+<span id="L572" class="LineNr">572 </span><span class="Normal">case</span> RELOAD: <span class="Delimiter">{</span>
+<span id="L573" class="LineNr">573 </span>  restore_non_recipe_snapshots<span class="Delimiter">();</span>
+<span id="L574" class="LineNr">574 </span>  string code = <a href='038new_text.cc.html#L142'>read_mu_text</a><span class="Delimiter">(</span>ingredients<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>at<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">skip alloc id</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L575" class="LineNr">575 </span>  <a href='101run_sandboxed.cc.html#L153'>run_code_begin</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">should_stash_snapshots</span><span class="Comment">*/</span><span class="Constant">false</span><span class="Delimiter">);</span>
+<span id="L576" class="LineNr">576 </span>  routine* save_current_routine = Current_routine<span class="Delimiter">;</span>
+<span id="L577" class="LineNr">577 </span>  Current_routine = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L578" class="LineNr">578 </span>  Sandbox_mode =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L579" class="LineNr">579 </span>  vector&lt;recipe_ordinal&gt; recipes_reloaded = load<span class="Delimiter">(</span>code<span class="Delimiter">);</span>
+<span id="L580" class="LineNr">580 </span>  <a href='012transform.cc.html#L46'>transform_all</a><span class="Delimiter">();</span>
+<span id="L581" class="LineNr">581 </span>  Trace_stream<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L156'>newline</a><span class="Delimiter">();</span>  <span class="Comment">// flush trace</span>
+<span id="L582" class="LineNr">582 </span>  Sandbox_mode =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L583" class="LineNr">583 </span>  Current_routine = save_current_routine<span class="Delimiter">;</span>
+<span id="L584" class="LineNr">584 </span>  products<span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L585" class="LineNr">585 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">alloc id</span><span class="Comment">*/</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L586" class="LineNr">586 </span>  products<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span>push_back<span class="Delimiter">(</span><a href='101run_sandboxed.cc.html#L515'>trace_error_contents</a><span class="Delimiter">());</span>
+<span id="L587" class="LineNr">587 </span>  <a href='101run_sandboxed.cc.html#L166'>run_code_end</a><span class="Delimiter">();</span>  <span class="Comment">// wait until we're done with the trace contents</span>
+<span id="L588" class="LineNr">588 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L589" class="LineNr">589 </span><span class="Delimiter">}</span>
+<span id="L590" class="LineNr">590 </span>
+<span id="L591" class="LineNr">591 </span><span class="Delimiter">:(scenario reload_loads_function_definitions)</span>
+<span id="L592" class="LineNr">592 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L593" class="LineNr">593 </span>  local-scope
+<span id="L594" class="LineNr">594 </span>  <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [recipe foo [
+<span id="L595" class="LineNr">595 </span>    <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">34</span>
+<span id="L596" class="LineNr">596 </span>  ]]
+<span id="L597" class="LineNr">597 </span>  reload x
+<span id="L598" class="LineNr">598 </span>  run-sandboxed [foo]
+<span id="L599" class="LineNr">599 </span>  <span class="Constant">2</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">1</span>:num/<span class="Special">raw</span>
+<span id="L600" class="LineNr">600 </span>]
+<span id="L601" class="LineNr">601 </span><span class="traceContains">+mem: storing 34 in location 2</span>
+<span id="L602" class="LineNr">602 </span>
+<span id="L603" class="LineNr">603 </span><span class="Delimiter">:(scenario reload_continues_past_error)</span>
+<span id="L604" class="LineNr">604 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L605" class="LineNr">605 </span>  local-scope
+<span id="L606" class="LineNr">606 </span>  <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [recipe foo [
+<span id="L607" class="LineNr">607 </span>    get <span class="Constant">1234</span>:num<span class="Delimiter">,</span> <span class="Constant">foo:offset</span>
+<span id="L608" class="LineNr">608 </span>  ]]
+<span id="L609" class="LineNr">609 </span>  reload x
+<span id="L610" class="LineNr">610 </span>  <span class="Constant">1</span>:num/<span class="Special">raw &lt;- </span>copy <span class="Constant">34</span>
+<span id="L611" class="LineNr">611 </span>]
+<span id="L612" class="LineNr">612 </span><span class="traceContains">+mem: storing 34 in location 1</span>
+<span id="L613" class="LineNr">613 </span>
+<span id="L614" class="LineNr">614 </span><span class="Delimiter">:(scenario reload_can_repeatedly_load_container_definitions)</span>
+<span id="L615" class="LineNr">615 </span><span class="Comment"># define a container and try to create it (merge requires knowing container size)</span>
+<span id="L616" class="LineNr">616 </span><span class="muRecipe">def</span> <a href='000organization.cc.html#L113'>main</a> [
+<span id="L617" class="LineNr">617 </span>  local-scope
+<span id="L618" class="LineNr">618 </span>  <span class="Normal">x</span>:text<span class="Special"> &lt;- </span><span class="Normal">new</span> [
+<span id="L619" class="LineNr">619 </span>    container foo [
+<span id="L620" class="LineNr">620 </span>      <span class="Normal">x</span>:num
+<span id="L621" class="LineNr">621 </span>      <span class="Normal">y</span>:num
+<span id="L622" class="LineNr">622 </span>    ]
+<span id="L623" class="LineNr">623 </span>    <a href='010vm.cc.html#L19'>recipe</a> bar [
+<span id="L624" class="LineNr">624 </span>      local-scope
+<span id="L625" class="LineNr">625 </span>      <span class="Normal">x</span>:foo<span class="Special"> &lt;- </span>merge <span class="Constant">34</span><span class="Delimiter">,</span> <span class="Constant">35</span>
+<span id="L626" class="LineNr">626 </span>    ]
+<span id="L627" class="LineNr">627 </span>  ]
+<span id="L628" class="LineNr">628 </span>  <span class="Comment"># save warning addresses in locations of type 'number' to avoid spurious changes to them due to 'abandon'</span>
+<span id="L629" class="LineNr">629 </span>  <span class="Constant">10</span>:text/<span class="Special">raw &lt;- </span>reload x
+<span id="L630" class="LineNr">630 </span>  <span class="Constant">20</span>:text/<span class="Special">raw &lt;- </span>reload x
+<span id="L631" class="LineNr">631 </span>]
+<span id="L632" class="LineNr">632 </span><span class="Comment"># no errors on either load</span>
+<span id="L633" class="LineNr">633 </span><span class="traceContains">+mem: storing 0 in location 10</span>
+<span id="L634" class="LineNr">634 </span><span class="traceContains">+mem: storing 0 in location 11</span>
+<span id="L635" class="LineNr">635 </span><span class="traceContains">+mem: storing 0 in location 20</span>
+<span id="L636" class="LineNr">636 </span><span class="traceContains">+mem: storing 0 in location 21</span>
 </pre>
 </body>
 </html>
diff --git a/html/999spaces.cc.html b/html/999spaces.cc.html
index 2aa789ef..638202e1 100644
--- a/html/999spaces.cc.html
+++ b/html/999spaces.cc.html
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr">18 </span><span class="Comment">//:</span>
 <span id="L19" class="LineNr">19 </span><span class="Comment">//: 0 - unused (IDLE; do nothing)</span>
 <span id="L20" class="LineNr">20 </span><span class="Comment">//: 1-199 - primitives</span>
-<span id="L21" class="LineNr">21 </span>assert<span class="Delimiter">(</span><a href='010vm.cc.html#L197'>MAX_PRIMITIVE_RECIPES</a> &lt; <span class="Constant">200</span><span class="Delimiter">);</span>
+<span id="L21" class="LineNr">21 </span>assert<span class="Delimiter">(</span><a href='010vm.cc.html#L198'>MAX_PRIMITIVE_RECIPES</a> &lt; <span class="Constant">200</span><span class="Delimiter">);</span>
 <span id="L22" class="LineNr">22 </span><span class="Comment">//: 200-999 - defined in .mu files as sequences of primitives</span>
 <span id="L23" class="LineNr">23 </span>assert<span class="Delimiter">(</span>Next_recipe_ordinal == <span class="Constant">1000</span><span class="Delimiter">);</span>
 <span id="L24" class="LineNr">24 </span><span class="Comment">//: 1000 onwards - reserved for tests, cleared between tests</span>
diff --git a/html/channel.mu.html b/html/channel.mu.html
index fdb5c2dc..b77e22dc 100644
--- a/html/channel.mu.html
+++ b/html/channel.mu.html
@@ -15,9 +15,9 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
diff --git a/html/chessboard.mu.html b/html/chessboard.mu.html
index 2efbb576..0cb1c0bb 100644
--- a/html/chessboard.mu.html
+++ b/html/chessboard.mu.html
@@ -15,8 +15,8 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
@@ -24,9 +24,9 @@ a:hover { text-decoration: underline; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.CommentedCode { color: #6c6c6c; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.CommentedCode { color: #6c6c6c; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -67,16 +67,16 @@ if ('onhashchange' in window) {
 <span id="L4" class="LineNr">  4 </span><span class="muRecipe">def</span> <a href='chessboard.mu.html#L4'>main</a> [
 <span id="L5" class="LineNr">  5 </span>  <span class="Constant">local-scope</span>
 <span id="L6" class="LineNr">  6 </span>  open-console  <span class="Comment"># take control of screen, keyboard and mouse</span>
-<span id="L7" class="LineNr">  7 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L7" class="LineNr">  7 </span>  <a href='081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L8" class="LineNr">  8 </span>
 <span id="L9" class="LineNr">  9 </span>  <span class="Comment"># The chessboard function takes keyboard and screen objects as inputs.</span>
 <span id="L10" class="LineNr"> 10 </span>  <span class="Comment">#</span>
 <span id="L11" class="LineNr"> 11 </span>  <span class="Comment"># In Mu it is good form (though not required) to explicitly state what</span>
 <span id="L12" class="LineNr"> 12 </span>  <span class="Comment"># hardware a function needs.</span>
 <span id="L13" class="LineNr"> 13 </span>  <span class="Comment">#</span>
-<span id="L14" class="LineNr"> 14 </span>  <span class="Comment"># Here the console and screen are both 0, which usually indicates real</span>
+<span id="L14" class="LineNr"> 14 </span>  <span class="Comment"># Here the console and screen are both null, which usually indicates real</span>
 <span id="L15" class="LineNr"> 15 </span>  <span class="Comment"># hardware rather than a fake for testing as you'll see below.</span>
-<span id="L16" class="LineNr"> 16 </span>  <a href='chessboard.mu.html#L69'>chessboard</a> <span class="Constant">0/screen</span>, <span class="Constant">0/console</span>
+<span id="L16" class="LineNr"> 16 </span>  <a href='chessboard.mu.html#L69'>chessboard</a><span class="Constant"> null/screen, null/console</span>
 <span id="L17" class="LineNr"> 17 </span>
 <span id="L18" class="LineNr"> 18 </span>  close-console  <span class="Comment"># clean up screen, keyboard and mouse</span>
 <span id="L19" class="LineNr"> 19 </span>]
@@ -312,27 +312,27 @@ if ('onhashchange' in window) {
 <span id="L249" class="LineNr">249 </span>  <span class="Constant">local-scope</span>
 <span id="L250" class="LineNr">250 </span>  <span class="Constant">load-inputs</span>
 <span id="L251" class="LineNr">251 </span>  from-file:num, quit?:bool, error?:bool <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L276'>read-file</a> stdin, <a href='081print.mu.html#L16'>screen</a>
-<span id="L252" class="LineNr">252 </span>  <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
-<span id="L253" class="LineNr">253 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
+<span id="L252" class="LineNr">252 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> null/dummy</span>
+<span id="L253" class="LineNr">253 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy</span>
 <span id="L254" class="LineNr">254 </span>  <span class="Comment"># construct the move object</span>
 <span id="L255" class="LineNr">255 </span>  result:&amp;:<a href='chessboard.mu.html#L239'>move</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='chessboard.mu.html#L239'>move</a>:type</span>
 <span id="L256" class="LineNr">256 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">from-file:offset</span>, from-file
 <span id="L257" class="LineNr">257 </span>  from-rank:num, quit?, error? <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L314'>read-rank</a> stdin, <a href='081print.mu.html#L16'>screen</a>
-<span id="L258" class="LineNr">258 </span>  <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
-<span id="L259" class="LineNr">259 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
+<span id="L258" class="LineNr">258 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> null/dummy</span>
+<span id="L259" class="LineNr">259 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy</span>
 <span id="L260" class="LineNr">260 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">from-rank:offset</span>, from-rank
 <span id="L261" class="LineNr">261 </span>  error? <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L352'>expect-from-channel</a> stdin, <span class="Constant">45/dash</span>, <a href='081print.mu.html#L16'>screen</a>
-<span id="L262" class="LineNr">262 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>
+<span id="L262" class="LineNr">262 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy, false/quit</span>
 <span id="L263" class="LineNr">263 </span>  to-file:num, quit?, error? <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L276'>read-file</a> stdin, <a href='081print.mu.html#L16'>screen</a>
-<span id="L264" class="LineNr">264 </span>  <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
-<span id="L265" class="LineNr">265 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
+<span id="L264" class="LineNr">264 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> null/dummy</span>
+<span id="L265" class="LineNr">265 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy</span>
 <span id="L266" class="LineNr">266 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">to-file:offset</span>, to-file
 <span id="L267" class="LineNr">267 </span>  to-rank:num, quit?, error? <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L314'>read-rank</a> stdin, <a href='081print.mu.html#L16'>screen</a>
-<span id="L268" class="LineNr">268 </span>  <span class="muControl">return-if</span> quit?, <span class="Constant">0/dummy</span>
-<span id="L269" class="LineNr">269 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>
+<span id="L268" class="LineNr">268 </span>  <span class="muControl">return-if</span> quit?,<span class="Constant"> null/dummy</span>
+<span id="L269" class="LineNr">269 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy</span>
 <span id="L270" class="LineNr">270 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">to-rank:offset</span>, to-rank
 <span id="L271" class="LineNr">271 </span>  error? <span class="Special">&lt;-</span> <a href='chessboard.mu.html#L352'>expect-from-channel</a> stdin, <span class="Constant">10/newline</span>, <a href='081print.mu.html#L16'>screen</a>
-<span id="L272" class="LineNr">272 </span>  <span class="muControl">return-if</span> error?, <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>
+<span id="L272" class="LineNr">272 </span>  <span class="muControl">return-if</span> error?,<span class="Constant"> null/dummy, false/quit</span>
 <span id="L273" class="LineNr">273 </span>]
 <span id="L274" class="LineNr">274 </span>
 <span id="L275" class="LineNr">275 </span><span class="Comment"># valid values for file: 0-7</span>
@@ -340,18 +340,18 @@ if ('onhashchange' in window) {
 <span id="L277" class="LineNr">277 </span>  <span class="Constant">local-scope</span>
 <span id="L278" class="LineNr">278 </span>  <span class="Constant">load-inputs</span>
 <span id="L279" class="LineNr">279 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
-<span id="L280" class="LineNr">280 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L280" class="LineNr">280 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L281" class="LineNr">281 </span>  q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
-<span id="L282" class="LineNr">282 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L282" class="LineNr">282 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L283" class="LineNr">283 </span>  q-pressed? <span class="Special">&lt;-</span> equal c, <span class="Constant">113/q</span>
-<span id="L284" class="LineNr">284 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L284" class="LineNr">284 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L285" class="LineNr">285 </span>  empty-fake-keyboard?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">0/eof</span>
-<span id="L286" class="LineNr">286 </span>  <span class="muControl">return-if</span> empty-fake-keyboard?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L286" class="LineNr">286 </span>  <span class="muControl">return-if</span> empty-fake-keyboard?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L287" class="LineNr">287 </span>  <span class="Delimiter">{</span>
 <span id="L288" class="LineNr">288 </span>    newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
 <span id="L289" class="LineNr">289 </span>    <span class="muControl">break-unless</span> newline?
 <span id="L290" class="LineNr">290 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[that's not enough]</span>
-<span id="L291" class="LineNr">291 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L291" class="LineNr">291 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quit, true/error</span>
 <span id="L292" class="LineNr">292 </span>  <span class="Delimiter">}</span>
 <span id="L293" class="LineNr">293 </span>  file:num <span class="Special">&lt;-</span> subtract c, <span class="Constant">97/a</span>
 <span id="L294" class="LineNr">294 </span>  <span class="Comment"># 'a' &lt;= file &lt;= 'h'</span>
@@ -361,16 +361,16 @@ if ('onhashchange' in window) {
 <span id="L298" class="LineNr">298 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[file too low: ]</span>
 <span id="L299" class="LineNr">299 </span>    print <a href='081print.mu.html#L16'>screen</a>, c
 <span id="L300" class="LineNr">300 </span>    <a href='081print.mu.html#L752'>cursor-to-next-line</a> <a href='081print.mu.html#L16'>screen</a>
-<span id="L301" class="LineNr">301 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L301" class="LineNr">301 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quit, true/error</span>
 <span id="L302" class="LineNr">302 </span>  <span class="Delimiter">}</span>
 <span id="L303" class="LineNr">303 </span>  <span class="Delimiter">{</span>
 <span id="L304" class="LineNr">304 </span>    below-max:bool <span class="Special">&lt;-</span> lesser-than file,<span class="Constant"> 8</span>
 <span id="L305" class="LineNr">305 </span>    <span class="muControl">break-if</span> below-max
 <span id="L306" class="LineNr">306 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[file too high: ]</span>
 <span id="L307" class="LineNr">307 </span>    print <a href='081print.mu.html#L16'>screen</a>, c
-<span id="L308" class="LineNr">308 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L308" class="LineNr">308 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quit, true/error</span>
 <span id="L309" class="LineNr">309 </span>  <span class="Delimiter">}</span>
-<span id="L310" class="LineNr">310 </span> <span class="muControl"> return</span> file, <span class="Constant">0/quit</span>, <span class="Constant">0/error</span>
+<span id="L310" class="LineNr">310 </span> <span class="muControl"> return</span> file,<span class="Constant"> false/don't-quit, false/no-error</span>
 <span id="L311" class="LineNr">311 </span>]
 <span id="L312" class="LineNr">312 </span>
 <span id="L313" class="LineNr">313 </span><span class="Comment"># valid values for rank: 0-7</span>
@@ -378,18 +378,18 @@ if ('onhashchange' in window) {
 <span id="L315" class="LineNr">315 </span>  <span class="Constant">local-scope</span>
 <span id="L316" class="LineNr">316 </span>  <span class="Constant">load-inputs</span>
 <span id="L317" class="LineNr">317 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
-<span id="L318" class="LineNr">318 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L318" class="LineNr">318 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L319" class="LineNr">319 </span>  q-pressed?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">81/Q</span>
-<span id="L320" class="LineNr">320 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L320" class="LineNr">320 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L321" class="LineNr">321 </span>  q-pressed? <span class="Special">&lt;-</span> equal c, <span class="Constant">113/q</span>
-<span id="L322" class="LineNr">322 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L322" class="LineNr">322 </span>  <span class="muControl">return-if</span> q-pressed?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L323" class="LineNr">323 </span>  empty-fake-keyboard?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">0/eof</span>
-<span id="L324" class="LineNr">324 </span>  <span class="muControl">return-if</span> empty-fake-keyboard?, <span class="Constant">0/dummy</span>, <span class="Constant">1/quit</span>, <span class="Constant">0/error</span>
+<span id="L324" class="LineNr">324 </span>  <span class="muControl">return-if</span> empty-fake-keyboard?, <span class="Constant">0/dummy</span>,<span class="Constant"> true/quit, false/no-error</span>
 <span id="L325" class="LineNr">325 </span>  <span class="Delimiter">{</span>
 <span id="L326" class="LineNr">326 </span>    newline?:bool <span class="Special">&lt;-</span> equal c,<span class="Constant"> 10</span>  <span class="Comment"># newline</span>
 <span id="L327" class="LineNr">327 </span>    <span class="muControl">break-unless</span> newline?
 <span id="L328" class="LineNr">328 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[that's not enough]</span>
-<span id="L329" class="LineNr">329 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L329" class="LineNr">329 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quite, true/error</span>
 <span id="L330" class="LineNr">330 </span>  <span class="Delimiter">}</span>
 <span id="L331" class="LineNr">331 </span>  rank:num <span class="Special">&lt;-</span> subtract c, <span class="Constant">49/'1'</span>
 <span id="L332" class="LineNr">332 </span>  <span class="Comment"># assert'1' &lt;= rank &lt;= '8'</span>
@@ -398,16 +398,16 @@ if ('onhashchange' in window) {
 <span id="L335" class="LineNr">335 </span>    <span class="muControl">break-if</span> above-min
 <span id="L336" class="LineNr">336 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[rank too low: ]</span>
 <span id="L337" class="LineNr">337 </span>    print <a href='081print.mu.html#L16'>screen</a>, c
-<span id="L338" class="LineNr">338 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L338" class="LineNr">338 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quite, true/error</span>
 <span id="L339" class="LineNr">339 </span>  <span class="Delimiter">}</span>
 <span id="L340" class="LineNr">340 </span>  <span class="Delimiter">{</span>
 <span id="L341" class="LineNr">341 </span>    below-max:bool <span class="Special">&lt;-</span> lesser-or-equal rank,<span class="Constant"> 7</span>
 <span id="L342" class="LineNr">342 </span>    <span class="muControl">break-if</span> below-max
 <span id="L343" class="LineNr">343 </span>    print <a href='081print.mu.html#L16'>screen</a>, <span class="Constant">[rank too high: ]</span>
 <span id="L344" class="LineNr">344 </span>    print <a href='081print.mu.html#L16'>screen</a>, c
-<span id="L345" class="LineNr">345 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>, <span class="Constant">0/quit</span>, <span class="Constant">1/error</span>
+<span id="L345" class="LineNr">345 </span>   <span class="muControl"> return</span> <span class="Constant">0/dummy</span>,<span class="Constant"> false/don't-quite, true/error</span>
 <span id="L346" class="LineNr">346 </span>  <span class="Delimiter">}</span>
-<span id="L347" class="LineNr">347 </span> <span class="muControl"> return</span> rank, <span class="Constant">0/quit</span>, <span class="Constant">0/error</span>
+<span id="L347" class="LineNr">347 </span> <span class="muControl"> return</span> rank,<span class="Constant"> false/don't-quite, false/no-error</span>
 <span id="L348" class="LineNr">348 </span>]
 <span id="L349" class="LineNr">349 </span>
 <span id="L350" class="LineNr">350 </span><span class="Comment"># read a character from the given channel and check that it's what we expect</span>
@@ -416,7 +416,7 @@ if ('onhashchange' in window) {
 <span id="L353" class="LineNr">353 </span>  <span class="Constant">local-scope</span>
 <span id="L354" class="LineNr">354 </span>  <span class="Constant">load-inputs</span>
 <span id="L355" class="LineNr">355 </span>  c:char, eof?:bool, stdin <span class="Special">&lt;-</span> read stdin
-<span id="L356" class="LineNr">356 </span>  <span class="muControl">return-if</span> eof? <span class="Constant">1/true</span>
+<span id="L356" class="LineNr">356 </span>  <span class="muControl">return-if</span> eof?<span class="Constant"> true</span>
 <span id="L357" class="LineNr">357 </span>  <span class="Delimiter">{</span>
 <span id="L358" class="LineNr">358 </span>    match?:bool <span class="Special">&lt;-</span> equal c, expected
 <span id="L359" class="LineNr">359 </span>    <span class="muControl">break-if</span> match?
diff --git a/html/console.mu.html b/html/console.mu.html
index 89a29e0e..c045bd2c 100644
--- a/html/console.mu.html
+++ b/html/console.mu.html
@@ -15,9 +15,9 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
diff --git a/html/continuation1.mu.html b/html/continuation1.mu.html
index 117cec3c..a08d19b3 100644
--- a/html/continuation1.mu.html
+++ b/html/continuation1.mu.html
@@ -15,13 +15,13 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
diff --git a/html/continuation2.mu.html b/html/continuation2.mu.html
index fff4b247..4b853e11 100644
--- a/html/continuation2.mu.html
+++ b/html/continuation2.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -22,7 +23,6 @@ a:hover { text-decoration: underline; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
@@ -72,7 +72,7 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr">13 </span>
 <span id="L14" class="LineNr">14 </span><span class="muRecipe">def</span> <a href='continuation2.mu.html#L14'>main</a> [
 <span id="L15" class="LineNr">15 </span>  <span class="Constant">local-scope</span>
-<span id="L16" class="LineNr">16 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L16" class="LineNr">16 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L17" class="LineNr">17 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, l
 <span id="L18" class="LineNr">18 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, l
 <span id="L19" class="LineNr">19 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>, l
@@ -89,8 +89,8 @@ if ('onhashchange' in window) {
 <span id="L30" class="LineNr">30 </span>  <span class="Constant">local-scope</span>
 <span id="L31" class="LineNr">31 </span>  <span class="Constant">load-inputs</span>
 <span id="L32" class="LineNr">32 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>
-<span id="L33" class="LineNr">33 </span>  done? <span class="Special">&lt;-</span> equal l, <span class="Constant">0/nil</span>
-<span id="L34" class="LineNr">34 </span>  <span class="muControl">return-if</span> done?, <span class="Constant">0/false</span>
+<span id="L33" class="LineNr">33 </span>  done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> null</span>
+<span id="L34" class="LineNr">34 </span>  <span class="muControl">return-if</span> done?, <span class="Constant">0/dummy</span>
 <span id="L35" class="LineNr">35 </span>  n <span class="Special">&lt;-</span> first l
 <span id="L36" class="LineNr">36 </span>  l <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> l
 <span id="L37" class="LineNr">37 </span>]
diff --git a/html/continuation3.mu.html b/html/continuation3.mu.html
index 6fe3d94d..55a32d61 100644
--- a/html/continuation3.mu.html
+++ b/html/continuation3.mu.html
@@ -15,13 +15,13 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
diff --git a/html/continuation4.mu.html b/html/continuation4.mu.html
index c6b56509..e3d266e1 100644
--- a/html/continuation4.mu.html
+++ b/html/continuation4.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -22,7 +23,6 @@ a:hover { text-decoration: underline; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
@@ -74,7 +74,7 @@ if ('onhashchange' in window) {
 <span id="L15" class="LineNr">15 </span>
 <span id="L16" class="LineNr">16 </span><span class="muRecipe">def</span> <a href='continuation4.mu.html#L16'>main</a> [
 <span id="L17" class="LineNr">17 </span>  <span class="Constant">local-scope</span>
-<span id="L18" class="LineNr">18 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L18" class="LineNr">18 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L19" class="LineNr">19 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, l
 <span id="L20" class="LineNr">20 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, l
 <span id="L21" class="LineNr">21 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>, l
@@ -91,7 +91,7 @@ if ('onhashchange' in window) {
 <span id="L32" class="LineNr">32 </span>  <span class="Constant">local-scope</span>
 <span id="L33" class="LineNr">33 </span>  <span class="Constant">load-inputs</span>
 <span id="L34" class="LineNr">34 </span>  <span class="Delimiter">{</span>
-<span id="L35" class="LineNr">35 </span>    done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
+<span id="L35" class="LineNr">35 </span>    done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> null</span>
 <span id="L36" class="LineNr">36 </span>    <span class="muControl">break-if</span> done?
 <span id="L37" class="LineNr">37 </span>    n <span class="Special">&lt;-</span> first l
 <span id="L38" class="LineNr">38 </span>    l <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> l
@@ -102,7 +102,7 @@ if ('onhashchange' in window) {
 <span id="L43" class="LineNr">43 </span>  <span class="Comment"># return. Calling functions should stop calling its continuation after this</span>
 <span id="L44" class="LineNr">44 </span>  <span class="Comment"># point.</span>
 <span id="L45" class="LineNr">45 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>,<span class="Constant"> -1</span>, done?
-<span id="L46" class="LineNr">46 </span>  assert <span class="Constant">0/false</span>, <span class="Constant">[called too many times, ran out of continuations to return]</span>
+<span id="L46" class="LineNr">46 </span>  assert<span class="Constant"> false</span>, <span class="Constant">[called too many times, ran out of continuations to return]</span>
 <span id="L47" class="LineNr">47 </span>]
 </pre>
 </body>
diff --git a/html/continuation5.mu.html b/html/continuation5.mu.html
index 8775a17b..29e75c17 100644
--- a/html/continuation5.mu.html
+++ b/html/continuation5.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -22,7 +23,6 @@ a:hover { text-decoration: underline; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L16" class="LineNr">16 </span>
 <span id="L17" class="LineNr">17 </span><span class="muRecipe">def</span> <a href='continuation5.mu.html#L17'>main</a> [
 <span id="L18" class="LineNr">18 </span>  <span class="Constant">local-scope</span>
-<span id="L19" class="LineNr">19 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L19" class="LineNr">19 </span>  l:&amp;:<a href='064list.mu.html#L6'>list</a>:num <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L20" class="LineNr">20 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 3</span>, l
 <span id="L21" class="LineNr">21 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 2</span>, l
 <span id="L22" class="LineNr">22 </span>  l <span class="Special">&lt;-</span> push<span class="Constant"> 1</span>, l
@@ -95,7 +95,7 @@ if ('onhashchange' in window) {
 <span id="L36" class="LineNr">36 </span>  <span class="Constant">load-inputs</span>
 <span id="L37" class="LineNr">37 </span>  a:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L38" class="LineNr">38 </span>  <span class="Delimiter">{</span>
-<span id="L39" class="LineNr">39 </span>    done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> 0</span>
+<span id="L39" class="LineNr">39 </span>    done? <span class="Special">&lt;-</span> equal l,<span class="Constant"> null</span>
 <span id="L40" class="LineNr">40 </span>    <span class="muControl">break-if</span> done?
 <span id="L41" class="LineNr">41 </span>    n <span class="Special">&lt;-</span> first l
 <span id="L42" class="LineNr">42 </span>    l <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> l
@@ -104,7 +104,7 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr">45 </span>   <span class="muControl"> loop</span>
 <span id="L46" class="LineNr">46 </span>  <span class="Delimiter">}</span>
 <span id="L47" class="LineNr">47 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>,<span class="Constant"> -1</span>, done?
-<span id="L48" class="LineNr">48 </span>  assert <span class="Constant">0/false</span>, <span class="Constant">[called too many times, ran out of continuations to return]</span>
+<span id="L48" class="LineNr">48 </span>  assert<span class="Constant"> false</span>, <span class="Constant">[called too many times, ran out of continuations to return]</span>
 <span id="L49" class="LineNr">49 </span>]
 </pre>
 </body>
diff --git a/html/edit/001-editor.mu.html b/html/edit/001-editor.mu.html
index b9ff83f1..c5bc16a5 100644
--- a/html/edit/001-editor.mu.html
+++ b/html/edit/001-editor.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -68,10 +68,10 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr">  6 </span>  <span class="Constant">local-scope</span>
 <span id="L7" class="LineNr">  7 </span>  <span class="Constant">load-inputs</span>
 <span id="L8" class="LineNr">  8 </span>  open-console
-<span id="L9" class="LineNr">  9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L9" class="LineNr">  9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L10" class="LineNr"> 10 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> text, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L11" class="LineNr"> 11 </span>  <a href='001-editor.mu.html#L107'>render</a> <span class="Constant">0/screen</span>, e
-<span id="L12" class="LineNr"> 12 </span>  <a href='../084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
+<span id="L11" class="LineNr"> 11 </span>  <a href='001-editor.mu.html#L109'>render</a><span class="Constant"> null/screen,</span> e
+<span id="L12" class="LineNr"> 12 </span>  <a href='../084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
 <span id="L13" class="LineNr"> 13 </span>  close-console
 <span id="L14" class="LineNr"> 14 </span>]
 <span id="L15" class="LineNr"> 15 </span>
@@ -80,7 +80,7 @@ if ('onhashchange' in window) {
 <span id="L18" class="LineNr"> 18 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
 <span id="L19" class="LineNr"> 19 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
 <span id="L20" class="LineNr"> 20 </span>  run [
-<span id="L21" class="LineNr"> 21 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L21" class="LineNr"> 21 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L22" class="LineNr"> 22 </span>  ]
 <span id="L23" class="LineNr"> 23 </span>  screen-should-contain [
 <span id="L24" class="LineNr"> 24 </span>    <span class="Comment"># top line of screen reserved for menu</span>
@@ -123,7 +123,7 @@ if ('onhashchange' in window) {
 <span id="L61" class="LineNr"> 61 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">cursor-row:offset</span>, <span class="Constant">1/top</span>
 <span id="L62" class="LineNr"> 62 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">cursor-column:offset</span>, left
 <span id="L63" class="LineNr"> 63 </span>  <span class="Comment"># initialize empty contents</span>
-<span id="L64" class="LineNr"> 64 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">167/§</span>, <span class="Constant">0/tail</span>
+<span id="L64" class="LineNr"> 64 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">167/§</span>,<span class="Constant"> null</span>
 <span id="L65" class="LineNr"> 65 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">data:offset</span>, init
 <span id="L66" class="LineNr"> 66 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">top-of-screen:offset</span>, init
 <span id="L67" class="LineNr"> 67 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">before-cursor:offset</span>, init
@@ -142,386 +142,388 @@ if ('onhashchange' in window) {
 <span id="L80" class="LineNr"> 80 </span>  <span class="Constant">local-scope</span>
 <span id="L81" class="LineNr"> 81 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">3/height</span>
 <span id="L82" class="LineNr"> 82 </span>  run [
-<span id="L83" class="LineNr"> 83 </span>    e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">0/data</span>, <span class="Constant">2/left</span>, <span class="Constant">5/right</span>
-<span id="L84" class="LineNr"> 84 </span>    2:editor/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *e
+<span id="L83" class="LineNr"> 83 </span>    e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a><span class="Constant"> null/data,</span> <span class="Constant">2/left</span>, <span class="Constant">5/right</span>
+<span id="L84" class="LineNr"> 84 </span>    1:editor/<span class="Special">raw</span> <span class="Special">&lt;-</span> copy *e
 <span id="L85" class="LineNr"> 85 </span>  ]
 <span id="L86" class="LineNr"> 86 </span>  memory-should-contain [
-<span id="L87" class="LineNr"> 87 </span>    <span class="Comment"># 2 (data) &lt;- just the § sentinel</span>
-<span id="L88" class="LineNr"> 88 </span>    <span class="Comment"># 3 (top of screen) &lt;- the § sentinel</span>
-<span id="L89" class="LineNr"> 89 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># bottom-of-screen; null since text fits on screen</span>
-<span id="L90" class="LineNr"> 90 </span>    <span class="Comment"># 5 (before cursor) &lt;- the § sentinel</span>
-<span id="L91" class="LineNr"> 91 </span>   <span class="Constant"> 6</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>  <span class="Comment"># left</span>
-<span id="L92" class="LineNr"> 92 </span>   <span class="Constant"> 7</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># right  (inclusive)</span>
-<span id="L93" class="LineNr"> 93 </span>   <span class="Constant"> 8</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># bottom (not set until render)</span>
-<span id="L94" class="LineNr"> 94 </span>   <span class="Constant"> 9</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># cursor row</span>
-<span id="L95" class="LineNr"> 95 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>  <span class="Comment"># cursor column</span>
-<span id="L96" class="LineNr"> 96 </span>  ]
-<span id="L97" class="LineNr"> 97 </span>  screen-should-contain [
-<span id="L98" class="LineNr"> 98 </span>   <span class="Constant"> .     .</span>
-<span id="L99" class="LineNr"> 99 </span>   <span class="Constant"> .     .</span>
+<span id="L87" class="LineNr"> 87 </span>    <span class="Comment"># 1,2 (data) &lt;- just the § sentinel</span>
+<span id="L88" class="LineNr"> 88 </span>    <span class="Comment"># 3,4 (top of screen) &lt;- the § sentinel</span>
+<span id="L89" class="LineNr"> 89 </span>    <span class="Comment"># 5 (bottom of screen) &lt;- null since text fits on screen</span>
+<span id="L90" class="LineNr"> 90 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L91" class="LineNr"> 91 </span>   <span class="Constant"> 6</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L92" class="LineNr"> 92 </span>    <span class="Comment"># 7,8 (before cursor) &lt;- the § sentinel</span>
+<span id="L93" class="LineNr"> 93 </span>   <span class="Constant"> 9</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>  <span class="Comment"># left</span>
+<span id="L94" class="LineNr"> 94 </span>   <span class="Constant"> 10</span> <span class="Special">&lt;-</span><span class="Constant"> 4</span>  <span class="Comment"># right  (inclusive)</span>
+<span id="L95" class="LineNr"> 95 </span>   <span class="Constant"> 11</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># bottom (not set until render)</span>
+<span id="L96" class="LineNr"> 96 </span>   <span class="Constant"> 12</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># cursor row</span>
+<span id="L97" class="LineNr"> 97 </span>   <span class="Constant"> 13</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>  <span class="Comment"># cursor column</span>
+<span id="L98" class="LineNr"> 98 </span>  ]
+<span id="L99" class="LineNr"> 99 </span>  screen-should-contain [
 <span id="L100" class="LineNr">100 </span>   <span class="Constant"> .     .</span>
-<span id="L101" class="LineNr">101 </span>  ]
-<span id="L102" class="LineNr">102 </span>]
-<span id="L103" class="LineNr">103 </span>
-<span id="L104" class="LineNr">104 </span><span class="Comment"># Assumes cursor should be at coordinates (cursor-row, cursor-column) and</span>
-<span id="L105" class="LineNr">105 </span><span class="Comment"># updates before-cursor to match. Might also move coordinates if they're</span>
-<span id="L106" class="LineNr">106 </span><span class="Comment"># outside text.</span>
-<span id="L107" class="LineNr">107 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>last-row:num, last-column:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
-<span id="L108" class="LineNr">108 </span>  <span class="Constant">local-scope</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Constant">load-inputs</span>
-<span id="L110" class="LineNr">110 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">1/top</span>, <span class="Constant">0/left</span>
-<span id="L111" class="LineNr">111 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
-<span id="L112" class="LineNr">112 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
-<span id="L113" class="LineNr">113 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Comment"># traversing editor</span>
-<span id="L115" class="LineNr">115 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L116" class="LineNr">116 </span>  <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
-<span id="L117" class="LineNr">117 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L118" class="LineNr">118 </span>  <span class="Comment"># traversing screen</span>
-<span id="L119" class="LineNr">119 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
-<span id="L120" class="LineNr">120 </span>  row:num <span class="Special">&lt;-</span> copy <span class="Constant">1/top</span>
-<span id="L121" class="LineNr">121 </span>  column:num <span class="Special">&lt;-</span> copy left
-<span id="L122" class="LineNr">122 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
-<span id="L123" class="LineNr">123 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
-<span id="L124" class="LineNr">124 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L125" class="LineNr">125 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
-<span id="L126" class="LineNr">126 </span>  <span class="Delimiter">{</span>
-<span id="L127" class="LineNr">127 </span><span class="Constant">    +next-character</span>
-<span id="L128" class="LineNr">128 </span>    <span class="muControl">break-unless</span> curr
-<span id="L129" class="LineNr">129 </span>    off-screen?:bool <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L130" class="LineNr">130 </span>    <span class="muControl">break-if</span> off-screen?
-<span id="L131" class="LineNr">131 </span>    <span class="Comment"># update editor.before-cursor</span>
-<span id="L132" class="LineNr">132 </span>    <span class="Comment"># Doing so at the start of each iteration ensures it stays one step behind</span>
-<span id="L133" class="LineNr">133 </span>    <span class="Comment"># the current character.</span>
-<span id="L134" class="LineNr">134 </span>    <span class="Delimiter">{</span>
-<span id="L135" class="LineNr">135 </span>      at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
-<span id="L136" class="LineNr">136 </span>      <span class="muControl">break-unless</span> at-cursor-row?
-<span id="L137" class="LineNr">137 </span>      at-cursor?:bool <span class="Special">&lt;-</span> equal column, cursor-column
-<span id="L138" class="LineNr">138 </span>      <span class="muControl">break-unless</span> at-cursor?
-<span id="L139" class="LineNr">139 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L140" class="LineNr">140 </span>    <span class="Delimiter">}</span>
-<span id="L141" class="LineNr">141 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
-<span id="L142" class="LineNr">142 </span><span class="Constant">    &lt;character-c-received&gt;</span>
-<span id="L143" class="LineNr">143 </span>    <span class="Delimiter">{</span>
-<span id="L144" class="LineNr">144 </span>      <span class="Comment"># newline? move to left rather than 0</span>
-<span id="L145" class="LineNr">145 </span>      newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L146" class="LineNr">146 </span>      <span class="muControl">break-unless</span> newline?
-<span id="L147" class="LineNr">147 </span>      <span class="Comment"># adjust cursor if necessary</span>
-<span id="L148" class="LineNr">148 </span>      <span class="Delimiter">{</span>
-<span id="L149" class="LineNr">149 </span>        at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
-<span id="L150" class="LineNr">150 </span>        <span class="muControl">break-unless</span> at-cursor-row?
-<span id="L151" class="LineNr">151 </span>        left-of-cursor?:bool <span class="Special">&lt;-</span> lesser-than column, cursor-column
-<span id="L152" class="LineNr">152 </span>        <span class="muControl">break-unless</span> left-of-cursor?
-<span id="L153" class="LineNr">153 </span>        cursor-column <span class="Special">&lt;-</span> copy column
-<span id="L154" class="LineNr">154 </span>        before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
-<span id="L155" class="LineNr">155 </span>      <span class="Delimiter">}</span>
-<span id="L156" class="LineNr">156 </span>      <span class="Comment"># clear rest of line in this window</span>
-<span id="L157" class="LineNr">157 </span>      <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L158" class="LineNr">158 </span>      <span class="Comment"># skip to next line</span>
-<span id="L159" class="LineNr">159 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L160" class="LineNr">160 </span>      column <span class="Special">&lt;-</span> copy left
-<span id="L161" class="LineNr">161 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
-<span id="L162" class="LineNr">162 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L163" class="LineNr">163 </span>      <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L164" class="LineNr">164 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
-<span id="L165" class="LineNr">165 </span>    <span class="Delimiter">}</span>
-<span id="L166" class="LineNr">166 </span>    <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>      <span class="Comment"># at right? wrap. even if there's only one more letter left; we need</span>
-<span id="L168" class="LineNr">168 </span>      <span class="Comment"># room for clicking on the cursor after it.</span>
-<span id="L169" class="LineNr">169 </span>      at-right?:bool <span class="Special">&lt;-</span> equal column, right
-<span id="L170" class="LineNr">170 </span>      <span class="muControl">break-unless</span> at-right?
-<span id="L171" class="LineNr">171 </span>      <span class="Comment"># print wrap icon</span>
-<span id="L172" class="LineNr">172 </span>      wrap-icon:char <span class="Special">&lt;-</span> copy <span class="Constant">8617/loop-back-to-left</span>
-<span id="L173" class="LineNr">173 </span>      print <a href='../081print.mu.html#L16'>screen</a>, wrap-icon, <span class="Constant">245/grey</span>
-<span id="L174" class="LineNr">174 </span>      column <span class="Special">&lt;-</span> copy left
-<span id="L175" class="LineNr">175 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L176" class="LineNr">176 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
-<span id="L177" class="LineNr">177 </span>      <span class="Comment"># don't increment curr</span>
-<span id="L178" class="LineNr">178 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
-<span id="L179" class="LineNr">179 </span>    <span class="Delimiter">}</span>
-<span id="L180" class="LineNr">180 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c, color
-<span id="L181" class="LineNr">181 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L182" class="LineNr">182 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L183" class="LineNr">183 </span>    column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
-<span id="L184" class="LineNr">184 </span>   <span class="muControl"> loop</span>
-<span id="L185" class="LineNr">185 </span>  <span class="Delimiter">}</span>
-<span id="L186" class="LineNr">186 </span>  <span class="Comment"># save first character off-screen</span>
-<span id="L187" class="LineNr">187 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">bottom-of-screen:offset</span>, curr
-<span id="L188" class="LineNr">188 </span>  <span class="Comment"># is cursor to the right of the last line? move to end</span>
-<span id="L189" class="LineNr">189 </span>  <span class="Delimiter">{</span>
-<span id="L190" class="LineNr">190 </span>    at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
-<span id="L191" class="LineNr">191 </span>    cursor-outside-line?:bool <span class="Special">&lt;-</span> lesser-or-equal column, cursor-column
-<span id="L192" class="LineNr">192 </span>    before-cursor-on-same-line?:bool <span class="Special">&lt;-</span> and at-cursor-row?, cursor-outside-line?
-<span id="L193" class="LineNr">193 </span>    above-cursor-row?:bool <span class="Special">&lt;-</span> lesser-than row, cursor-row
-<span id="L194" class="LineNr">194 </span>    before-cursor?:bool <span class="Special">&lt;-</span> or before-cursor-on-same-line?, above-cursor-row?
-<span id="L195" class="LineNr">195 </span>    <span class="muControl">break-unless</span> before-cursor?
-<span id="L196" class="LineNr">196 </span>    cursor-row <span class="Special">&lt;-</span> copy row
-<span id="L197" class="LineNr">197 </span>    cursor-column <span class="Special">&lt;-</span> copy column
-<span id="L198" class="LineNr">198 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L199" class="LineNr">199 </span>  <span class="Delimiter">}</span>
-<span id="L200" class="LineNr">200 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">bottom:offset</span>, row
-<span id="L201" class="LineNr">201 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
-<span id="L202" class="LineNr">202 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L203" class="LineNr">203 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L204" class="LineNr">204 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L205" class="LineNr">205 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L206" class="LineNr">206 </span> <span class="muControl"> return</span> row, left/column
-<span id="L207" class="LineNr">207 </span>]
-<span id="L208" class="LineNr">208 </span>
-<span id="L209" class="LineNr">209 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L209'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, column:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
-<span id="L210" class="LineNr">210 </span>  <span class="Constant">local-scope</span>
-<span id="L211" class="LineNr">211 </span>  <span class="Constant">load-inputs</span>
-<span id="L212" class="LineNr">212 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
-<span id="L213" class="LineNr">213 </span>  <span class="Delimiter">{</span>
-<span id="L214" class="LineNr">214 </span>    <span class="muControl">break-if</span> <a href='../081print.mu.html#L16'>screen</a>
-<span id="L215" class="LineNr">215 </span>    clear-display-from row, column, left, right
-<span id="L216" class="LineNr">216 </span>   <span class="muControl"> return</span>
-<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
-<span id="L218" class="LineNr">218 </span>  <span class="Comment"># if not, go the slower route</span>
-<span id="L219" class="LineNr">219 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
-<span id="L220" class="LineNr">220 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L221" class="LineNr">221 </span>  <a href='001-editor.mu.html#L224'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
-<span id="L222" class="LineNr">222 </span>]
-<span id="L223" class="LineNr">223 </span>
-<span id="L224" class="LineNr">224 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L224'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
-<span id="L225" class="LineNr">225 </span>  <span class="Constant">local-scope</span>
-<span id="L226" class="LineNr">226 </span>  <span class="Constant">load-inputs</span>
-<span id="L227" class="LineNr">227 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L228" class="LineNr">228 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Delimiter">{</span>
-<span id="L230" class="LineNr">230 </span>    <span class="muControl">break-if</span> <a href='../081print.mu.html#L16'>screen</a>
-<span id="L231" class="LineNr">231 </span>    clear-display-from row, left, left, right
-<span id="L232" class="LineNr">232 </span>   <span class="muControl"> return</span>
-<span id="L233" class="LineNr">233 </span>  <span class="Delimiter">}</span>
-<span id="L234" class="LineNr">234 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, left
-<span id="L235" class="LineNr">235 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
-<span id="L236" class="LineNr">236 </span>  <span class="Delimiter">{</span>
-<span id="L237" class="LineNr">237 </span>    at-bottom-of-screen?:bool <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L238" class="LineNr">238 </span>    <span class="muControl">break-if</span> at-bottom-of-screen?
-<span id="L239" class="LineNr">239 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, left
-<span id="L240" class="LineNr">240 </span>    <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L241" class="LineNr">241 </span>    row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L242" class="LineNr">242 </span>   <span class="muControl"> loop</span>
-<span id="L243" class="LineNr">243 </span>  <span class="Delimiter">}</span>
-<span id="L244" class="LineNr">244 </span>]
-<span id="L245" class="LineNr">245 </span>
-<span id="L246" class="LineNr">246 </span><span class="muScenario">scenario</span> editor-prints-multiple-lines [
-<span id="L247" class="LineNr">247 </span>  <span class="Constant">local-scope</span>
-<span id="L248" class="LineNr">248 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L249" class="LineNr">249 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
-<span id="L250" class="LineNr">250 </span><span class="Constant">def]</span>
-<span id="L251" class="LineNr">251 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L252" class="LineNr">252 </span>  run [
-<span id="L253" class="LineNr">253 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L254" class="LineNr">254 </span>  ]
-<span id="L255" class="LineNr">255 </span>  screen-should-contain [
-<span id="L256" class="LineNr">256 </span>   <span class="Constant"> .     .</span>
-<span id="L257" class="LineNr">257 </span>   <span class="Constant"> .abc  .</span>
-<span id="L258" class="LineNr">258 </span>   <span class="Constant"> .def  .</span>
-<span id="L259" class="LineNr">259 </span>   <span class="Constant"> .     .</span>
-<span id="L260" class="LineNr">260 </span>  ]
-<span id="L261" class="LineNr">261 </span>]
-<span id="L262" class="LineNr">262 </span>
-<span id="L263" class="LineNr">263 </span><span class="muScenario">scenario</span> editor-handles-offsets [
-<span id="L264" class="LineNr">264 </span>  <span class="Constant">local-scope</span>
-<span id="L265" class="LineNr">265 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L266" class="LineNr">266 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc]</span>, <span class="Constant">1/left</span>, <span class="Constant">5/right</span>
-<span id="L267" class="LineNr">267 </span>  run [
-<span id="L268" class="LineNr">268 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L269" class="LineNr">269 </span>  ]
-<span id="L270" class="LineNr">270 </span>  screen-should-contain [
-<span id="L271" class="LineNr">271 </span>   <span class="Constant"> .     .</span>
-<span id="L272" class="LineNr">272 </span>   <span class="Constant"> . abc .</span>
+<span id="L101" class="LineNr">101 </span>   <span class="Constant"> .     .</span>
+<span id="L102" class="LineNr">102 </span>   <span class="Constant"> .     .</span>
+<span id="L103" class="LineNr">103 </span>  ]
+<span id="L104" class="LineNr">104 </span>]
+<span id="L105" class="LineNr">105 </span>
+<span id="L106" class="LineNr">106 </span><span class="Comment"># Assumes cursor should be at coordinates (cursor-row, cursor-column) and</span>
+<span id="L107" class="LineNr">107 </span><span class="Comment"># updates before-cursor to match. Might also move coordinates if they're</span>
+<span id="L108" class="LineNr">108 </span><span class="Comment"># outside text.</span>
+<span id="L109" class="LineNr">109 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor<span class="muRecipe"> -&gt; </span>last-row:num, last-column:num, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
+<span id="L110" class="LineNr">110 </span>  <span class="Constant">local-scope</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Constant">load-inputs</span>
+<span id="L112" class="LineNr">112 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">1/top</span>, <span class="Constant">0/left</span>
+<span id="L113" class="LineNr">113 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
+<span id="L114" class="LineNr">114 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
+<span id="L115" class="LineNr">115 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Comment"># traversing editor</span>
+<span id="L117" class="LineNr">117 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L118" class="LineNr">118 </span>  <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
+<span id="L119" class="LineNr">119 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L120" class="LineNr">120 </span>  <span class="Comment"># traversing screen</span>
+<span id="L121" class="LineNr">121 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
+<span id="L122" class="LineNr">122 </span>  row:num <span class="Special">&lt;-</span> copy <span class="Constant">1/top</span>
+<span id="L123" class="LineNr">123 </span>  column:num <span class="Special">&lt;-</span> copy left
+<span id="L124" class="LineNr">124 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
+<span id="L125" class="LineNr">125 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
+<span id="L126" class="LineNr">126 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L127" class="LineNr">127 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
+<span id="L128" class="LineNr">128 </span>  <span class="Delimiter">{</span>
+<span id="L129" class="LineNr">129 </span><span class="Constant">    +next-character</span>
+<span id="L130" class="LineNr">130 </span>    <span class="muControl">break-unless</span> curr
+<span id="L131" class="LineNr">131 </span>    off-screen?:bool <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L132" class="LineNr">132 </span>    <span class="muControl">break-if</span> off-screen?
+<span id="L133" class="LineNr">133 </span>    <span class="Comment"># update editor.before-cursor</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Comment"># Doing so at the start of each iteration ensures it stays one step behind</span>
+<span id="L135" class="LineNr">135 </span>    <span class="Comment"># the current character.</span>
+<span id="L136" class="LineNr">136 </span>    <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>      at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
+<span id="L138" class="LineNr">138 </span>      <span class="muControl">break-unless</span> at-cursor-row?
+<span id="L139" class="LineNr">139 </span>      at-cursor?:bool <span class="Special">&lt;-</span> equal column, cursor-column
+<span id="L140" class="LineNr">140 </span>      <span class="muControl">break-unless</span> at-cursor?
+<span id="L141" class="LineNr">141 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L142" class="LineNr">142 </span>    <span class="Delimiter">}</span>
+<span id="L143" class="LineNr">143 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
+<span id="L144" class="LineNr">144 </span><span class="Constant">    &lt;character-c-received&gt;</span>
+<span id="L145" class="LineNr">145 </span>    <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>      <span class="Comment"># newline? move to left rather than 0</span>
+<span id="L147" class="LineNr">147 </span>      newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L148" class="LineNr">148 </span>      <span class="muControl">break-unless</span> newline?
+<span id="L149" class="LineNr">149 </span>      <span class="Comment"># adjust cursor if necessary</span>
+<span id="L150" class="LineNr">150 </span>      <span class="Delimiter">{</span>
+<span id="L151" class="LineNr">151 </span>        at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
+<span id="L152" class="LineNr">152 </span>        <span class="muControl">break-unless</span> at-cursor-row?
+<span id="L153" class="LineNr">153 </span>        left-of-cursor?:bool <span class="Special">&lt;-</span> lesser-than column, cursor-column
+<span id="L154" class="LineNr">154 </span>        <span class="muControl">break-unless</span> left-of-cursor?
+<span id="L155" class="LineNr">155 </span>        cursor-column <span class="Special">&lt;-</span> copy column
+<span id="L156" class="LineNr">156 </span>        before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
+<span id="L157" class="LineNr">157 </span>      <span class="Delimiter">}</span>
+<span id="L158" class="LineNr">158 </span>      <span class="Comment"># clear rest of line in this window</span>
+<span id="L159" class="LineNr">159 </span>      <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
+<span id="L160" class="LineNr">160 </span>      <span class="Comment"># skip to next line</span>
+<span id="L161" class="LineNr">161 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L162" class="LineNr">162 </span>      column <span class="Special">&lt;-</span> copy left
+<span id="L163" class="LineNr">163 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
+<span id="L164" class="LineNr">164 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L165" class="LineNr">165 </span>      <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L166" class="LineNr">166 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
+<span id="L167" class="LineNr">167 </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="Comment"># at right? wrap. even if there's only one more letter left; we need</span>
+<span id="L170" class="LineNr">170 </span>      <span class="Comment"># room for clicking on the cursor after it.</span>
+<span id="L171" class="LineNr">171 </span>      at-right?:bool <span class="Special">&lt;-</span> equal column, right
+<span id="L172" class="LineNr">172 </span>      <span class="muControl">break-unless</span> at-right?
+<span id="L173" class="LineNr">173 </span>      <span class="Comment"># print wrap icon</span>
+<span id="L174" class="LineNr">174 </span>      wrap-icon:char <span class="Special">&lt;-</span> copy <span class="Constant">8617/loop-back-to-left</span>
+<span id="L175" class="LineNr">175 </span>      print <a href='../081print.mu.html#L16'>screen</a>, wrap-icon, <span class="Constant">245/grey</span>
+<span id="L176" class="LineNr">176 </span>      column <span class="Special">&lt;-</span> copy left
+<span id="L177" class="LineNr">177 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L178" class="LineNr">178 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
+<span id="L179" class="LineNr">179 </span>      <span class="Comment"># don't increment curr</span>
+<span id="L180" class="LineNr">180 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
+<span id="L181" class="LineNr">181 </span>    <span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c, color
+<span id="L183" class="LineNr">183 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L184" class="LineNr">184 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L185" class="LineNr">185 </span>    column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
+<span id="L186" class="LineNr">186 </span>   <span class="muControl"> loop</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Delimiter">}</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Comment"># save first character off-screen</span>
+<span id="L189" class="LineNr">189 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">bottom-of-screen:offset</span>, curr
+<span id="L190" class="LineNr">190 </span>  <span class="Comment"># is cursor to the right of the last line? move to end</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Delimiter">{</span>
+<span id="L192" class="LineNr">192 </span>    at-cursor-row?:bool <span class="Special">&lt;-</span> equal row, cursor-row
+<span id="L193" class="LineNr">193 </span>    cursor-outside-line?:bool <span class="Special">&lt;-</span> lesser-or-equal column, cursor-column
+<span id="L194" class="LineNr">194 </span>    before-cursor-on-same-line?:bool <span class="Special">&lt;-</span> and at-cursor-row?, cursor-outside-line?
+<span id="L195" class="LineNr">195 </span>    above-cursor-row?:bool <span class="Special">&lt;-</span> lesser-than row, cursor-row
+<span id="L196" class="LineNr">196 </span>    before-cursor?:bool <span class="Special">&lt;-</span> or before-cursor-on-same-line?, above-cursor-row?
+<span id="L197" class="LineNr">197 </span>    <span class="muControl">break-unless</span> before-cursor?
+<span id="L198" class="LineNr">198 </span>    cursor-row <span class="Special">&lt;-</span> copy row
+<span id="L199" class="LineNr">199 </span>    cursor-column <span class="Special">&lt;-</span> copy column
+<span id="L200" class="LineNr">200 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L201" class="LineNr">201 </span>  <span class="Delimiter">}</span>
+<span id="L202" class="LineNr">202 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">bottom:offset</span>, row
+<span id="L203" class="LineNr">203 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
+<span id="L204" class="LineNr">204 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
+<span id="L205" class="LineNr">205 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
+<span id="L206" class="LineNr">206 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
+<span id="L207" class="LineNr">207 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L208" class="LineNr">208 </span> <span class="muControl"> return</span> row, left/column
+<span id="L209" class="LineNr">209 </span>]
+<span id="L210" class="LineNr">210 </span>
+<span id="L211" class="LineNr">211 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L211'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, column:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
+<span id="L212" class="LineNr">212 </span>  <span class="Constant">local-scope</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Constant">load-inputs</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Delimiter">{</span>
+<span id="L216" class="LineNr">216 </span>    <span class="muControl">break-if</span> <a href='../081print.mu.html#L16'>screen</a>
+<span id="L217" class="LineNr">217 </span>    clear-display-from row, column, left, right
+<span id="L218" class="LineNr">218 </span>   <span class="muControl"> return</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Delimiter">}</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Comment"># if not, go the slower route</span>
+<span id="L221" class="LineNr">221 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
+<span id="L222" class="LineNr">222 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
+<span id="L223" class="LineNr">223 </span>  <a href='001-editor.mu.html#L226'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
+<span id="L224" class="LineNr">224 </span>]
+<span id="L225" class="LineNr">225 </span>
+<span id="L226" class="LineNr">226 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L226'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, row:num, left:num, right:num<span class="muRecipe"> -&gt; </span><a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
+<span id="L227" class="LineNr">227 </span>  <span class="Constant">local-scope</span>
+<span id="L228" class="LineNr">228 </span>  <span class="Constant">load-inputs</span>
+<span id="L229" class="LineNr">229 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Comment"># if it's the real screen, use the optimized primitive</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Delimiter">{</span>
+<span id="L232" class="LineNr">232 </span>    <span class="muControl">break-if</span> <a href='../081print.mu.html#L16'>screen</a>
+<span id="L233" class="LineNr">233 </span>    clear-display-from row, left, left, right
+<span id="L234" class="LineNr">234 </span>   <span class="muControl"> return</span>
+<span id="L235" class="LineNr">235 </span>  <span class="Delimiter">}</span>
+<span id="L236" class="LineNr">236 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, left
+<span id="L237" class="LineNr">237 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
+<span id="L238" class="LineNr">238 </span>  <span class="Delimiter">{</span>
+<span id="L239" class="LineNr">239 </span>    at-bottom-of-screen?:bool <span class="Special">&lt;-</span> greater-or-equal row, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L240" class="LineNr">240 </span>    <span class="muControl">break-if</span> at-bottom-of-screen?
+<span id="L241" class="LineNr">241 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, left
+<span id="L242" class="LineNr">242 </span>    <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
+<span id="L243" class="LineNr">243 </span>    row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
+<span id="L244" class="LineNr">244 </span>   <span class="muControl"> loop</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Delimiter">}</span>
+<span id="L246" class="LineNr">246 </span>]
+<span id="L247" class="LineNr">247 </span>
+<span id="L248" class="LineNr">248 </span><span class="muScenario">scenario</span> editor-prints-multiple-lines [
+<span id="L249" class="LineNr">249 </span>  <span class="Constant">local-scope</span>
+<span id="L250" class="LineNr">250 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L251" class="LineNr">251 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
+<span id="L252" class="LineNr">252 </span><span class="Constant">def]</span>
+<span id="L253" class="LineNr">253 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L254" class="LineNr">254 </span>  run [
+<span id="L255" class="LineNr">255 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L256" class="LineNr">256 </span>  ]
+<span id="L257" class="LineNr">257 </span>  screen-should-contain [
+<span id="L258" class="LineNr">258 </span>   <span class="Constant"> .     .</span>
+<span id="L259" class="LineNr">259 </span>   <span class="Constant"> .abc  .</span>
+<span id="L260" class="LineNr">260 </span>   <span class="Constant"> .def  .</span>
+<span id="L261" class="LineNr">261 </span>   <span class="Constant"> .     .</span>
+<span id="L262" class="LineNr">262 </span>  ]
+<span id="L263" class="LineNr">263 </span>]
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="muScenario">scenario</span> editor-handles-offsets [
+<span id="L266" class="LineNr">266 </span>  <span class="Constant">local-scope</span>
+<span id="L267" class="LineNr">267 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L268" class="LineNr">268 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc]</span>, <span class="Constant">1/left</span>, <span class="Constant">5/right</span>
+<span id="L269" class="LineNr">269 </span>  run [
+<span id="L270" class="LineNr">270 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L271" class="LineNr">271 </span>  ]
+<span id="L272" class="LineNr">272 </span>  screen-should-contain [
 <span id="L273" class="LineNr">273 </span>   <span class="Constant"> .     .</span>
-<span id="L274" class="LineNr">274 </span>  ]
-<span id="L275" class="LineNr">275 </span>]
-<span id="L276" class="LineNr">276 </span>
-<span id="L277" class="LineNr">277 </span><span class="muScenario">scenario</span> editor-prints-multiple-lines-at-offset [
-<span id="L278" class="LineNr">278 </span>  <span class="Constant">local-scope</span>
-<span id="L279" class="LineNr">279 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L280" class="LineNr">280 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
-<span id="L281" class="LineNr">281 </span><span class="Constant">def]</span>
-<span id="L282" class="LineNr">282 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">1/left</span>, <span class="Constant">5/right</span>
-<span id="L283" class="LineNr">283 </span>  run [
-<span id="L284" class="LineNr">284 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L285" class="LineNr">285 </span>  ]
-<span id="L286" class="LineNr">286 </span>  screen-should-contain [
-<span id="L287" class="LineNr">287 </span>   <span class="Constant"> .     .</span>
-<span id="L288" class="LineNr">288 </span>   <span class="Constant"> . abc .</span>
-<span id="L289" class="LineNr">289 </span>   <span class="Constant"> . def .</span>
-<span id="L290" class="LineNr">290 </span>   <span class="Constant"> .     .</span>
-<span id="L291" class="LineNr">291 </span>  ]
-<span id="L292" class="LineNr">292 </span>]
-<span id="L293" class="LineNr">293 </span>
-<span id="L294" class="LineNr">294 </span><span class="muScenario">scenario</span> editor-wraps-long-lines [
-<span id="L295" class="LineNr">295 </span>  <span class="Constant">local-scope</span>
-<span id="L296" class="LineNr">296 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L297" class="LineNr">297 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc def]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L298" class="LineNr">298 </span>  run [
-<span id="L299" class="LineNr">299 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L300" class="LineNr">300 </span>  ]
-<span id="L301" class="LineNr">301 </span>  screen-should-contain [
-<span id="L302" class="LineNr">302 </span>   <span class="Constant"> .     .</span>
-<span id="L303" class="LineNr">303 </span>   <span class="Constant"> .abc ↩.</span>
-<span id="L304" class="LineNr">304 </span>   <span class="Constant"> .def  .</span>
-<span id="L305" class="LineNr">305 </span>   <span class="Constant"> .     .</span>
-<span id="L306" class="LineNr">306 </span>  ]
-<span id="L307" class="LineNr">307 </span>  screen-should-contain-in-color <span class="Constant">245/grey</span> [
-<span id="L308" class="LineNr">308 </span>   <span class="Constant"> .     .</span>
-<span id="L309" class="LineNr">309 </span>   <span class="Constant"> .    ↩.</span>
+<span id="L274" class="LineNr">274 </span>   <span class="Constant"> . abc .</span>
+<span id="L275" class="LineNr">275 </span>   <span class="Constant"> .     .</span>
+<span id="L276" class="LineNr">276 </span>  ]
+<span id="L277" class="LineNr">277 </span>]
+<span id="L278" class="LineNr">278 </span>
+<span id="L279" class="LineNr">279 </span><span class="muScenario">scenario</span> editor-prints-multiple-lines-at-offset [
+<span id="L280" class="LineNr">280 </span>  <span class="Constant">local-scope</span>
+<span id="L281" class="LineNr">281 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L282" class="LineNr">282 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
+<span id="L283" class="LineNr">283 </span><span class="Constant">def]</span>
+<span id="L284" class="LineNr">284 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">1/left</span>, <span class="Constant">5/right</span>
+<span id="L285" class="LineNr">285 </span>  run [
+<span id="L286" class="LineNr">286 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L287" class="LineNr">287 </span>  ]
+<span id="L288" class="LineNr">288 </span>  screen-should-contain [
+<span id="L289" class="LineNr">289 </span>   <span class="Constant"> .     .</span>
+<span id="L290" class="LineNr">290 </span>   <span class="Constant"> . abc .</span>
+<span id="L291" class="LineNr">291 </span>   <span class="Constant"> . def .</span>
+<span id="L292" class="LineNr">292 </span>   <span class="Constant"> .     .</span>
+<span id="L293" class="LineNr">293 </span>  ]
+<span id="L294" class="LineNr">294 </span>]
+<span id="L295" class="LineNr">295 </span>
+<span id="L296" class="LineNr">296 </span><span class="muScenario">scenario</span> editor-wraps-long-lines [
+<span id="L297" class="LineNr">297 </span>  <span class="Constant">local-scope</span>
+<span id="L298" class="LineNr">298 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L299" class="LineNr">299 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abc def]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L300" class="LineNr">300 </span>  run [
+<span id="L301" class="LineNr">301 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L302" class="LineNr">302 </span>  ]
+<span id="L303" class="LineNr">303 </span>  screen-should-contain [
+<span id="L304" class="LineNr">304 </span>   <span class="Constant"> .     .</span>
+<span id="L305" class="LineNr">305 </span>   <span class="Constant"> .abc ↩.</span>
+<span id="L306" class="LineNr">306 </span>   <span class="Constant"> .def  .</span>
+<span id="L307" class="LineNr">307 </span>   <span class="Constant"> .     .</span>
+<span id="L308" class="LineNr">308 </span>  ]
+<span id="L309" class="LineNr">309 </span>  screen-should-contain-in-color <span class="Constant">245/grey</span> [
 <span id="L310" class="LineNr">310 </span>   <span class="Constant"> .     .</span>
-<span id="L311" class="LineNr">311 </span>   <span class="Constant"> .     .</span>
-<span id="L312" class="LineNr">312 </span>  ]
-<span id="L313" class="LineNr">313 </span>]
-<span id="L314" class="LineNr">314 </span>
-<span id="L315" class="LineNr">315 </span><span class="muScenario">scenario</span> editor-wraps-barely-long-lines [
-<span id="L316" class="LineNr">316 </span>  <span class="Constant">local-scope</span>
-<span id="L317" class="LineNr">317 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L318" class="LineNr">318 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abcde]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L319" class="LineNr">319 </span>  run [
-<span id="L320" class="LineNr">320 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L321" class="LineNr">321 </span>  ]
-<span id="L322" class="LineNr">322 </span>  <span class="Comment"># still wrap, even though the line would fit. We need room to click on the</span>
-<span id="L323" class="LineNr">323 </span>  <span class="Comment"># end of the line</span>
-<span id="L324" class="LineNr">324 </span>  screen-should-contain [
-<span id="L325" class="LineNr">325 </span>   <span class="Constant"> .     .</span>
-<span id="L326" class="LineNr">326 </span><span class="Constant">    .abcd↩.</span>
-<span id="L327" class="LineNr">327 </span>   <span class="Constant"> .e    .</span>
-<span id="L328" class="LineNr">328 </span>   <span class="Constant"> .     .</span>
-<span id="L329" class="LineNr">329 </span>  ]
-<span id="L330" class="LineNr">330 </span>  screen-should-contain-in-color <span class="Constant">245/grey</span> [
-<span id="L331" class="LineNr">331 </span>   <span class="Constant"> .     .</span>
-<span id="L332" class="LineNr">332 </span>   <span class="Constant"> .    ↩.</span>
+<span id="L311" class="LineNr">311 </span>   <span class="Constant"> .    ↩.</span>
+<span id="L312" class="LineNr">312 </span>   <span class="Constant"> .     .</span>
+<span id="L313" class="LineNr">313 </span>   <span class="Constant"> .     .</span>
+<span id="L314" class="LineNr">314 </span>  ]
+<span id="L315" class="LineNr">315 </span>]
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="muScenario">scenario</span> editor-wraps-barely-long-lines [
+<span id="L318" class="LineNr">318 </span>  <span class="Constant">local-scope</span>
+<span id="L319" class="LineNr">319 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L320" class="LineNr">320 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abcde]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L321" class="LineNr">321 </span>  run [
+<span id="L322" class="LineNr">322 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L323" class="LineNr">323 </span>  ]
+<span id="L324" class="LineNr">324 </span>  <span class="Comment"># still wrap, even though the line would fit. We need room to click on the</span>
+<span id="L325" class="LineNr">325 </span>  <span class="Comment"># end of the line</span>
+<span id="L326" class="LineNr">326 </span>  screen-should-contain [
+<span id="L327" class="LineNr">327 </span>   <span class="Constant"> .     .</span>
+<span id="L328" class="LineNr">328 </span><span class="Constant">    .abcd↩.</span>
+<span id="L329" class="LineNr">329 </span>   <span class="Constant"> .e    .</span>
+<span id="L330" class="LineNr">330 </span>   <span class="Constant"> .     .</span>
+<span id="L331" class="LineNr">331 </span>  ]
+<span id="L332" class="LineNr">332 </span>  screen-should-contain-in-color <span class="Constant">245/grey</span> [
 <span id="L333" class="LineNr">333 </span>   <span class="Constant"> .     .</span>
-<span id="L334" class="LineNr">334 </span>   <span class="Constant"> .     .</span>
-<span id="L335" class="LineNr">335 </span>  ]
-<span id="L336" class="LineNr">336 </span>]
-<span id="L337" class="LineNr">337 </span>
-<span id="L338" class="LineNr">338 </span><span class="muScenario">scenario</span> editor-with-empty-text [
-<span id="L339" class="LineNr">339 </span>  <span class="Constant">local-scope</span>
-<span id="L340" class="LineNr">340 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L341" class="LineNr">341 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L342" class="LineNr">342 </span>  run [
-<span id="L343" class="LineNr">343 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L344" class="LineNr">344 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L345" class="LineNr">345 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L346" class="LineNr">346 </span>  ]
-<span id="L347" class="LineNr">347 </span>  screen-should-contain [
-<span id="L348" class="LineNr">348 </span>   <span class="Constant"> .     .</span>
-<span id="L349" class="LineNr">349 </span>   <span class="Constant"> .     .</span>
+<span id="L334" class="LineNr">334 </span>   <span class="Constant"> .    ↩.</span>
+<span id="L335" class="LineNr">335 </span>   <span class="Constant"> .     .</span>
+<span id="L336" class="LineNr">336 </span>   <span class="Constant"> .     .</span>
+<span id="L337" class="LineNr">337 </span>  ]
+<span id="L338" class="LineNr">338 </span>]
+<span id="L339" class="LineNr">339 </span>
+<span id="L340" class="LineNr">340 </span><span class="muScenario">scenario</span> editor-with-empty-text [
+<span id="L341" class="LineNr">341 </span>  <span class="Constant">local-scope</span>
+<span id="L342" class="LineNr">342 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L343" class="LineNr">343 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L344" class="LineNr">344 </span>  run [
+<span id="L345" class="LineNr">345 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L346" class="LineNr">346 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L347" class="LineNr">347 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L348" class="LineNr">348 </span>  ]
+<span id="L349" class="LineNr">349 </span>  screen-should-contain [
 <span id="L350" class="LineNr">350 </span>   <span class="Constant"> .     .</span>
-<span id="L351" class="LineNr">351 </span>  ]
-<span id="L352" class="LineNr">352 </span>  memory-should-contain [
-<span id="L353" class="LineNr">353 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># cursor row</span>
-<span id="L354" class="LineNr">354 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># cursor column</span>
-<span id="L355" class="LineNr">355 </span>  ]
-<span id="L356" class="LineNr">356 </span>]
-<span id="L357" class="LineNr">357 </span>
-<span id="L358" class="LineNr">358 </span><span class="Comment"># just a little color for Mu code</span>
+<span id="L351" class="LineNr">351 </span>   <span class="Constant"> .     .</span>
+<span id="L352" class="LineNr">352 </span>   <span class="Constant"> .     .</span>
+<span id="L353" class="LineNr">353 </span>  ]
+<span id="L354" class="LineNr">354 </span>  memory-should-contain [
+<span id="L355" class="LineNr">355 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>  <span class="Comment"># cursor row</span>
+<span id="L356" class="LineNr">356 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>  <span class="Comment"># cursor column</span>
+<span id="L357" class="LineNr">357 </span>  ]
+<span id="L358" class="LineNr">358 </span>]
 <span id="L359" class="LineNr">359 </span>
-<span id="L360" class="LineNr">360 </span><span class="muScenario">scenario</span> render-colors-comments [
-<span id="L361" class="LineNr">361 </span>  <span class="Constant">local-scope</span>
-<span id="L362" class="LineNr">362 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
-<span id="L363" class="LineNr">363 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
-<span id="L364" class="LineNr">364 </span><span class="Constant"># de</span>
-<span id="L365" class="LineNr">365 </span><span class="Constant">f]</span>
-<span id="L366" class="LineNr">366 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L367" class="LineNr">367 </span>  run [
-<span id="L368" class="LineNr">368 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L369" class="LineNr">369 </span>  ]
-<span id="L370" class="LineNr">370 </span>  screen-should-contain [
-<span id="L371" class="LineNr">371 </span>   <span class="Constant"> .     .</span>
-<span id="L372" class="LineNr">372 </span>   <span class="Constant"> .abc  .</span>
-<span id="L373" class="LineNr">373 </span>   <span class="Constant"> .# de .</span>
-<span id="L374" class="LineNr">374 </span>   <span class="Constant"> .f    .</span>
-<span id="L375" class="LineNr">375 </span>   <span class="Constant"> .     .</span>
-<span id="L376" class="LineNr">376 </span>  ]
-<span id="L377" class="LineNr">377 </span>  screen-should-contain-in-color <span class="Constant">12/lightblue</span>, [
-<span id="L378" class="LineNr">378 </span>   <span class="Constant"> .     .</span>
-<span id="L379" class="LineNr">379 </span>   <span class="Constant"> .     .</span>
-<span id="L380" class="LineNr">380 </span>   <span class="Constant"> .# de .</span>
+<span id="L360" class="LineNr">360 </span><span class="Comment"># just a little color for Mu code</span>
+<span id="L361" class="LineNr">361 </span>
+<span id="L362" class="LineNr">362 </span><span class="muScenario">scenario</span> render-colors-comments [
+<span id="L363" class="LineNr">363 </span>  <span class="Constant">local-scope</span>
+<span id="L364" class="LineNr">364 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">5/height</span>
+<span id="L365" class="LineNr">365 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
+<span id="L366" class="LineNr">366 </span><span class="Constant"># de</span>
+<span id="L367" class="LineNr">367 </span><span class="Constant">f]</span>
+<span id="L368" class="LineNr">368 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L369" class="LineNr">369 </span>  run [
+<span id="L370" class="LineNr">370 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L371" class="LineNr">371 </span>  ]
+<span id="L372" class="LineNr">372 </span>  screen-should-contain [
+<span id="L373" class="LineNr">373 </span>   <span class="Constant"> .     .</span>
+<span id="L374" class="LineNr">374 </span>   <span class="Constant"> .abc  .</span>
+<span id="L375" class="LineNr">375 </span>   <span class="Constant"> .# de .</span>
+<span id="L376" class="LineNr">376 </span>   <span class="Constant"> .f    .</span>
+<span id="L377" class="LineNr">377 </span>   <span class="Constant"> .     .</span>
+<span id="L378" class="LineNr">378 </span>  ]
+<span id="L379" class="LineNr">379 </span>  screen-should-contain-in-color <span class="Constant">12/lightblue</span>, [
+<span id="L380" class="LineNr">380 </span>   <span class="Constant"> .     .</span>
 <span id="L381" class="LineNr">381 </span>   <span class="Constant"> .     .</span>
-<span id="L382" class="LineNr">382 </span>   <span class="Constant"> .     .</span>
-<span id="L383" class="LineNr">383 </span>  ]
-<span id="L384" class="LineNr">384 </span>  screen-should-contain-in-color <span class="Constant">7/white</span>, [
-<span id="L385" class="LineNr">385 </span>   <span class="Constant"> .     .</span>
-<span id="L386" class="LineNr">386 </span>   <span class="Constant"> .abc  .</span>
+<span id="L382" class="LineNr">382 </span>   <span class="Constant"> .# de .</span>
+<span id="L383" class="LineNr">383 </span>   <span class="Constant"> .     .</span>
+<span id="L384" class="LineNr">384 </span>   <span class="Constant"> .     .</span>
+<span id="L385" class="LineNr">385 </span>  ]
+<span id="L386" class="LineNr">386 </span>  screen-should-contain-in-color <span class="Constant">7/white</span>, [
 <span id="L387" class="LineNr">387 </span>   <span class="Constant"> .     .</span>
-<span id="L388" class="LineNr">388 </span>   <span class="Constant"> .f    .</span>
+<span id="L388" class="LineNr">388 </span>   <span class="Constant"> .abc  .</span>
 <span id="L389" class="LineNr">389 </span>   <span class="Constant"> .     .</span>
-<span id="L390" class="LineNr">390 </span>  ]
-<span id="L391" class="LineNr">391 </span>]
-<span id="L392" class="LineNr">392 </span>
-<span id="L393" class="LineNr">393 </span><span class="muRecipe">after</span> <span class="Constant">&lt;character-c-received&gt;</span> [
-<span id="L394" class="LineNr">394 </span>  color <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L398'>get-color</a> color, c
-<span id="L395" class="LineNr">395 </span>]
-<span id="L396" class="LineNr">396 </span>
-<span id="L397" class="LineNr">397 </span><span class="Comment"># so far the previous color is all the information we need; that may change</span>
-<span id="L398" class="LineNr">398 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L398'>get-color</a> color:num, c:char<span class="muRecipe"> -&gt; </span>color:num [
-<span id="L399" class="LineNr">399 </span>  <span class="Constant">local-scope</span>
-<span id="L400" class="LineNr">400 </span>  <span class="Constant">load-inputs</span>
-<span id="L401" class="LineNr">401 </span>  color-is-white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
-<span id="L402" class="LineNr">402 </span>  <span class="Comment"># if color is white and next character is '#', switch color to blue</span>
-<span id="L403" class="LineNr">403 </span>  <span class="Delimiter">{</span>
-<span id="L404" class="LineNr">404 </span>    <span class="muControl">break-unless</span> color-is-white?
-<span id="L405" class="LineNr">405 </span>    starting-comment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">35/#</span>
-<span id="L406" class="LineNr">406 </span>    <span class="muControl">break-unless</span> starting-comment?
-<span id="L407" class="LineNr">407 </span>    trace<span class="Constant"> 90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to blue]</span>
-<span id="L408" class="LineNr">408 </span>   <span class="muControl"> return</span> <span class="Constant">12/lightblue</span>
-<span id="L409" class="LineNr">409 </span>  <span class="Delimiter">}</span>
-<span id="L410" class="LineNr">410 </span>  <span class="Comment"># if color is blue and next character is newline, switch color to white</span>
-<span id="L411" class="LineNr">411 </span>  <span class="Delimiter">{</span>
-<span id="L412" class="LineNr">412 </span>    color-is-blue?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">12/lightblue</span>
-<span id="L413" class="LineNr">413 </span>    <span class="muControl">break-unless</span> color-is-blue?
-<span id="L414" class="LineNr">414 </span>    ending-comment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L415" class="LineNr">415 </span>    <span class="muControl">break-unless</span> ending-comment?
-<span id="L416" class="LineNr">416 </span>    trace<span class="Constant"> 90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to white]</span>
-<span id="L417" class="LineNr">417 </span>   <span class="muControl"> return</span> <span class="Constant">7/white</span>
-<span id="L418" class="LineNr">418 </span>  <span class="Delimiter">}</span>
-<span id="L419" class="LineNr">419 </span>  <span class="Comment"># if color is white (no comments) and next character is '&lt;', switch color to red</span>
-<span id="L420" class="LineNr">420 </span>  <span class="Delimiter">{</span>
-<span id="L421" class="LineNr">421 </span>    <span class="muControl">break-unless</span> color-is-white?
-<span id="L422" class="LineNr">422 </span>    starting-assignment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">60/&lt;</span>
-<span id="L423" class="LineNr">423 </span>    <span class="muControl">break-unless</span> starting-assignment?
-<span id="L424" class="LineNr">424 </span>   <span class="muControl"> return</span> <span class="Constant">1/red</span>
-<span id="L425" class="LineNr">425 </span>  <span class="Delimiter">}</span>
-<span id="L426" class="LineNr">426 </span>  <span class="Comment"># if color is red and next character is space, switch color to white</span>
-<span id="L427" class="LineNr">427 </span>  <span class="Delimiter">{</span>
-<span id="L428" class="LineNr">428 </span>    color-is-red?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">1/red</span>
-<span id="L429" class="LineNr">429 </span>    <span class="muControl">break-unless</span> color-is-red?
-<span id="L430" class="LineNr">430 </span>    ending-assignment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">32/space</span>
-<span id="L431" class="LineNr">431 </span>    <span class="muControl">break-unless</span> ending-assignment?
-<span id="L432" class="LineNr">432 </span>   <span class="muControl"> return</span> <span class="Constant">7/white</span>
-<span id="L433" class="LineNr">433 </span>  <span class="Delimiter">}</span>
-<span id="L434" class="LineNr">434 </span>  <span class="Comment"># otherwise no change</span>
-<span id="L435" class="LineNr">435 </span> <span class="muControl"> return</span> color
-<span id="L436" class="LineNr">436 </span>]
-<span id="L437" class="LineNr">437 </span>
-<span id="L438" class="LineNr">438 </span><span class="muScenario">scenario</span> render-colors-assignment [
-<span id="L439" class="LineNr">439 </span>  <span class="Constant">local-scope</span>
-<span id="L440" class="LineNr">440 </span>  assume-screen <span class="Constant">8/width</span>, <span class="Constant">5/height</span>
-<span id="L441" class="LineNr">441 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
-<span id="L442" class="LineNr">442 </span><span class="Constant">d &lt;- e</span>
-<span id="L443" class="LineNr">443 </span><span class="Constant">f]</span>
-<span id="L444" class="LineNr">444 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">8/right</span>
-<span id="L445" class="LineNr">445 </span>  run [
-<span id="L446" class="LineNr">446 </span>    <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L447" class="LineNr">447 </span>  ]
-<span id="L448" class="LineNr">448 </span>  screen-should-contain [
-<span id="L449" class="LineNr">449 </span>   <span class="Constant"> .        .</span>
-<span id="L450" class="LineNr">450 </span>   <span class="Constant"> .abc     .</span>
-<span id="L451" class="LineNr">451 </span>   <span class="Constant"> .d &lt;- e  .</span>
-<span id="L452" class="LineNr">452 </span>   <span class="Constant"> .f       .</span>
-<span id="L453" class="LineNr">453 </span>   <span class="Constant"> .        .</span>
-<span id="L454" class="LineNr">454 </span>  ]
-<span id="L455" class="LineNr">455 </span>  screen-should-contain-in-color <span class="Constant">1/red</span>, [
-<span id="L456" class="LineNr">456 </span>   <span class="Constant"> .        .</span>
-<span id="L457" class="LineNr">457 </span>   <span class="Constant"> .        .</span>
-<span id="L458" class="LineNr">458 </span>   <span class="Constant"> .  &lt;-    .</span>
+<span id="L390" class="LineNr">390 </span>   <span class="Constant"> .f    .</span>
+<span id="L391" class="LineNr">391 </span>   <span class="Constant"> .     .</span>
+<span id="L392" class="LineNr">392 </span>  ]
+<span id="L393" class="LineNr">393 </span>]
+<span id="L394" class="LineNr">394 </span>
+<span id="L395" class="LineNr">395 </span><span class="muRecipe">after</span> <span class="Constant">&lt;character-c-received&gt;</span> [
+<span id="L396" class="LineNr">396 </span>  color <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L400'>get-color</a> color, c
+<span id="L397" class="LineNr">397 </span>]
+<span id="L398" class="LineNr">398 </span>
+<span id="L399" class="LineNr">399 </span><span class="Comment"># so far the previous color is all the information we need; that may change</span>
+<span id="L400" class="LineNr">400 </span><span class="muRecipe">def</span> <a href='001-editor.mu.html#L400'>get-color</a> color:num, c:char<span class="muRecipe"> -&gt; </span>color:num [
+<span id="L401" class="LineNr">401 </span>  <span class="Constant">local-scope</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Constant">load-inputs</span>
+<span id="L403" class="LineNr">403 </span>  color-is-white?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">7/white</span>
+<span id="L404" class="LineNr">404 </span>  <span class="Comment"># if color is white and next character is '#', switch color to blue</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Delimiter">{</span>
+<span id="L406" class="LineNr">406 </span>    <span class="muControl">break-unless</span> color-is-white?
+<span id="L407" class="LineNr">407 </span>    starting-comment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">35/#</span>
+<span id="L408" class="LineNr">408 </span>    <span class="muControl">break-unless</span> starting-comment?
+<span id="L409" class="LineNr">409 </span>    trace<span class="Constant"> 90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to blue]</span>
+<span id="L410" class="LineNr">410 </span>   <span class="muControl"> return</span> <span class="Constant">12/lightblue</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Delimiter">}</span>
+<span id="L412" class="LineNr">412 </span>  <span class="Comment"># if color is blue and next character is newline, switch color to white</span>
+<span id="L413" class="LineNr">413 </span>  <span class="Delimiter">{</span>
+<span id="L414" class="LineNr">414 </span>    color-is-blue?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">12/lightblue</span>
+<span id="L415" class="LineNr">415 </span>    <span class="muControl">break-unless</span> color-is-blue?
+<span id="L416" class="LineNr">416 </span>    ending-comment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L417" class="LineNr">417 </span>    <span class="muControl">break-unless</span> ending-comment?
+<span id="L418" class="LineNr">418 </span>    trace<span class="Constant"> 90</span>, <span class="Constant">[app]</span>, <span class="Constant">[switch color back to white]</span>
+<span id="L419" class="LineNr">419 </span>   <span class="muControl"> return</span> <span class="Constant">7/white</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Delimiter">}</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Comment"># if color is white (no comments) and next character is '&lt;', switch color to red</span>
+<span id="L422" class="LineNr">422 </span>  <span class="Delimiter">{</span>
+<span id="L423" class="LineNr">423 </span>    <span class="muControl">break-unless</span> color-is-white?
+<span id="L424" class="LineNr">424 </span>    starting-assignment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">60/&lt;</span>
+<span id="L425" class="LineNr">425 </span>    <span class="muControl">break-unless</span> starting-assignment?
+<span id="L426" class="LineNr">426 </span>   <span class="muControl"> return</span> <span class="Constant">1/red</span>
+<span id="L427" class="LineNr">427 </span>  <span class="Delimiter">}</span>
+<span id="L428" class="LineNr">428 </span>  <span class="Comment"># if color is red and next character is space, switch color to white</span>
+<span id="L429" class="LineNr">429 </span>  <span class="Delimiter">{</span>
+<span id="L430" class="LineNr">430 </span>    color-is-red?:bool <span class="Special">&lt;-</span> equal color, <span class="Constant">1/red</span>
+<span id="L431" class="LineNr">431 </span>    <span class="muControl">break-unless</span> color-is-red?
+<span id="L432" class="LineNr">432 </span>    ending-assignment?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">32/space</span>
+<span id="L433" class="LineNr">433 </span>    <span class="muControl">break-unless</span> ending-assignment?
+<span id="L434" class="LineNr">434 </span>   <span class="muControl"> return</span> <span class="Constant">7/white</span>
+<span id="L435" class="LineNr">435 </span>  <span class="Delimiter">}</span>
+<span id="L436" class="LineNr">436 </span>  <span class="Comment"># otherwise no change</span>
+<span id="L437" class="LineNr">437 </span> <span class="muControl"> return</span> color
+<span id="L438" class="LineNr">438 </span>]
+<span id="L439" class="LineNr">439 </span>
+<span id="L440" class="LineNr">440 </span><span class="muScenario">scenario</span> render-colors-assignment [
+<span id="L441" class="LineNr">441 </span>  <span class="Constant">local-scope</span>
+<span id="L442" class="LineNr">442 </span>  assume-screen <span class="Constant">8/width</span>, <span class="Constant">5/height</span>
+<span id="L443" class="LineNr">443 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
+<span id="L444" class="LineNr">444 </span><span class="Constant">d &lt;- e</span>
+<span id="L445" class="LineNr">445 </span><span class="Constant">f]</span>
+<span id="L446" class="LineNr">446 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">8/right</span>
+<span id="L447" class="LineNr">447 </span>  run [
+<span id="L448" class="LineNr">448 </span>    <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L449" class="LineNr">449 </span>  ]
+<span id="L450" class="LineNr">450 </span>  screen-should-contain [
+<span id="L451" class="LineNr">451 </span>   <span class="Constant"> .        .</span>
+<span id="L452" class="LineNr">452 </span>   <span class="Constant"> .abc     .</span>
+<span id="L453" class="LineNr">453 </span>   <span class="Constant"> .d &lt;- e  .</span>
+<span id="L454" class="LineNr">454 </span>   <span class="Constant"> .f       .</span>
+<span id="L455" class="LineNr">455 </span>   <span class="Constant"> .        .</span>
+<span id="L456" class="LineNr">456 </span>  ]
+<span id="L457" class="LineNr">457 </span>  screen-should-contain-in-color <span class="Constant">1/red</span>, [
+<span id="L458" class="LineNr">458 </span>   <span class="Constant"> .        .</span>
 <span id="L459" class="LineNr">459 </span>   <span class="Constant"> .        .</span>
-<span id="L460" class="LineNr">460 </span>   <span class="Constant"> .        .</span>
-<span id="L461" class="LineNr">461 </span>  ]
-<span id="L462" class="LineNr">462 </span>]
+<span id="L460" class="LineNr">460 </span>   <span class="Constant"> .  &lt;-    .</span>
+<span id="L461" class="LineNr">461 </span>   <span class="Constant"> .        .</span>
+<span id="L462" class="LineNr">462 </span>   <span class="Constant"> .        .</span>
+<span id="L463" class="LineNr">463 </span>  ]
+<span id="L464" class="LineNr">464 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/edit/002-typing.mu.html b/html/edit/002-typing.mu.html
index a0cb8c06..f33cf545 100644
--- a/html/edit/002-typing.mu.html
+++ b/html/edit/002-typing.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
+.muData { color: #ffff00; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -68,10 +68,10 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr">   6 </span>  <span class="Constant">local-scope</span>
 <span id="L7" class="LineNr">   7 </span>  <span class="Constant">load-inputs</span>
 <span id="L8" class="LineNr">   8 </span>  open-console
-<span id="L9" class="LineNr">   9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L9" class="LineNr">   9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L10" class="LineNr">  10 </span>  editor:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> text, <span class="Constant">5/left</span>, <span class="Constant">45/right</span>
-<span id="L11" class="LineNr">  11 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <span class="Constant">0/screen</span>, editor
-<span id="L12" class="LineNr">  12 </span>  <a href='002-typing.mu.html#L16'>editor-event-loop</a> <span class="Constant">0/screen</span>, <span class="Constant">0/console</span>, editor
+<span id="L11" class="LineNr">  11 </span>  <a href='002-typing.mu.html#L265'>editor-render</a><span class="Constant"> null/screen,</span> editor
+<span id="L12" class="LineNr">  12 </span>  <a href='002-typing.mu.html#L16'>editor-event-loop</a><span class="Constant"> null/screen, null/console,</span> editor
 <span id="L13" class="LineNr">  13 </span>  close-console
 <span id="L14" class="LineNr">  14 </span>]
 <span id="L15" class="LineNr">  15 </span>
@@ -112,23 +112,23 @@ if ('onhashchange' in window) {
 <span id="L50" class="LineNr">  50 </span><span class="muRecipe">def</span> move-cursor editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, t:<a href='../084console.mu.html#L12'>touch-event</a><span class="muRecipe"> -&gt; </span>in-focus?:bool, editor:&amp;:editor [
 <span id="L51" class="LineNr">  51 </span>  <span class="Constant">local-scope</span>
 <span id="L52" class="LineNr">  52 </span>  <span class="Constant">load-inputs</span>
-<span id="L53" class="LineNr">  53 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">0/false</span>
+<span id="L53" class="LineNr">  53 </span>  <span class="muControl">return-unless</span> editor,<span class="Constant"> false</span>
 <span id="L54" class="LineNr">  54 </span>  click-row:num <span class="Special">&lt;-</span> get t, <span class="Constant">row:offset</span>
-<span id="L55" class="LineNr">  55 </span>  <span class="muControl">return-unless</span> click-row, <span class="Constant">0/false</span>  <span class="Comment"># ignore clicks on 'menu'</span>
+<span id="L55" class="LineNr">  55 </span>  <span class="muControl">return-unless</span> click-row,<span class="Constant"> false</span>  <span class="Comment"># ignore clicks on 'menu'</span>
 <span id="L56" class="LineNr">  56 </span>  click-column:num <span class="Special">&lt;-</span> get t, <span class="Constant">column:offset</span>
 <span id="L57" class="LineNr">  57 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L58" class="LineNr">  58 </span>  too-far-left?:bool <span class="Special">&lt;-</span> lesser-than click-column, left
-<span id="L59" class="LineNr">  59 </span>  <span class="muControl">return-if</span> too-far-left?, <span class="Constant">0/false</span>
+<span id="L59" class="LineNr">  59 </span>  <span class="muControl">return-if</span> too-far-left?,<span class="Constant"> false</span>
 <span id="L60" class="LineNr">  60 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L61" class="LineNr">  61 </span>  too-far-right?:bool <span class="Special">&lt;-</span> greater-than click-column, right
-<span id="L62" class="LineNr">  62 </span>  <span class="muControl">return-if</span> too-far-right?, <span class="Constant">0/false</span>
+<span id="L62" class="LineNr">  62 </span>  <span class="muControl">return-if</span> too-far-right?,<span class="Constant"> false</span>
 <span id="L63" class="LineNr">  63 </span>  <span class="Comment"># position cursor</span>
 <span id="L64" class="LineNr">  64 </span><span class="Constant">  &lt;begin-move-cursor&gt;</span>
 <span id="L65" class="LineNr">  65 </span>  editor <span class="Special">&lt;-</span> <a href='002-typing.mu.html#L75'>snap-cursor</a> editor, <a href='../081print.mu.html#L16'>screen</a>, click-row, click-column
 <span id="L66" class="LineNr">  66 </span>  undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
 <span id="L67" class="LineNr">  67 </span><span class="Constant">  &lt;end-move-cursor&gt;</span>
 <span id="L68" class="LineNr">  68 </span>  <span class="Comment"># gain focus</span>
-<span id="L69" class="LineNr">  69 </span> <span class="muControl"> return</span> <span class="Constant">1/true</span>
+<span id="L69" class="LineNr">  69 </span> <span class="muControl"> return</span><span class="Constant"> true</span>
 <span id="L70" class="LineNr">  70 </span>]
 <span id="L71" class="LineNr">  71 </span>
 <span id="L72" class="LineNr">  72 </span><span class="Comment"># Variant of 'render' that only moves the cursor (coordinates and</span>
@@ -143,8 +143,8 @@ if ('onhashchange' in window) {
 <span id="L81" class="LineNr">  81 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L82" class="LineNr">  82 </span>  <span class="Comment"># count newlines until screen row</span>
 <span id="L83" class="LineNr">  83 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L84" class="LineNr">  84 </span>  <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
-<span id="L85" class="LineNr">  85 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L84" class="LineNr">  84 </span>  <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
+<span id="L85" class="LineNr">  85 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L86" class="LineNr">  86 </span>  row:num <span class="Special">&lt;-</span> copy <span class="Constant">1/top</span>
 <span id="L87" class="LineNr">  87 </span>  column:num <span class="Special">&lt;-</span> copy left
 <span id="L88" class="LineNr">  88 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, target-row
@@ -165,7 +165,7 @@ if ('onhashchange' in window) {
 <span id="L103" class="LineNr"> 103 </span>      <span class="muControl">break-unless</span> at-cursor-row?
 <span id="L104" class="LineNr"> 104 </span>      at-cursor?:bool <span class="Special">&lt;-</span> equal column, cursor-column
 <span id="L105" class="LineNr"> 105 </span>      <span class="muControl">break-unless</span> at-cursor?
-<span id="L106" class="LineNr"> 106 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L106" class="LineNr"> 106 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L107" class="LineNr"> 107 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L108" class="LineNr"> 108 </span>    <span class="Delimiter">}</span>
 <span id="L109" class="LineNr"> 109 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
@@ -181,14 +181,14 @@ if ('onhashchange' in window) {
 <span id="L119" class="LineNr"> 119 </span>        <span class="muControl">break-unless</span> left-of-cursor?
 <span id="L120" class="LineNr"> 120 </span>        cursor-column <span class="Special">&lt;-</span> copy column
 <span id="L121" class="LineNr"> 121 </span>        *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L122" class="LineNr"> 122 </span>        before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L122" class="LineNr"> 122 </span>        before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L123" class="LineNr"> 123 </span>        *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L124" class="LineNr"> 124 </span>      <span class="Delimiter">}</span>
 <span id="L125" class="LineNr"> 125 </span>      <span class="Comment"># skip to next line</span>
 <span id="L126" class="LineNr"> 126 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
 <span id="L127" class="LineNr"> 127 </span>      column <span class="Special">&lt;-</span> copy left
-<span id="L128" class="LineNr"> 128 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L129" class="LineNr"> 129 </span>      <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L128" class="LineNr"> 128 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L129" class="LineNr"> 129 </span>      <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L130" class="LineNr"> 130 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
 <span id="L131" class="LineNr"> 131 </span>    <span class="Delimiter">}</span>
 <span id="L132" class="LineNr"> 132 </span>    <span class="Delimiter">{</span>
@@ -201,8 +201,8 @@ if ('onhashchange' in window) {
 <span id="L139" class="LineNr"> 139 </span>      <span class="Comment"># don't increment curr/prev</span>
 <span id="L140" class="LineNr"> 140 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
 <span id="L141" class="LineNr"> 141 </span>    <span class="Delimiter">}</span>
-<span id="L142" class="LineNr"> 142 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L143" class="LineNr"> 143 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L142" class="LineNr"> 142 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L143" class="LineNr"> 143 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L144" class="LineNr"> 144 </span>    column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
 <span id="L145" class="LineNr"> 145 </span>   <span class="muControl"> loop</span>
 <span id="L146" class="LineNr"> 146 </span>  <span class="Delimiter">}</span>
@@ -218,7 +218,7 @@ if ('onhashchange' in window) {
 <span id="L156" class="LineNr"> 156 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
 <span id="L157" class="LineNr"> 157 </span>    cursor-column <span class="Special">&lt;-</span> copy column
 <span id="L158" class="LineNr"> 158 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L159" class="LineNr"> 159 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L159" class="LineNr"> 159 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L160" class="LineNr"> 160 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L161" class="LineNr"> 161 </span>  <span class="Delimiter">}</span>
 <span id="L162" class="LineNr"> 162 </span>]
@@ -228,7 +228,7 @@ if ('onhashchange' in window) {
 <span id="L166" class="LineNr"> 166 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L166'>handle-keyboard-event</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, e:<a href='../084console.mu.html#L4'>event</a><span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor [
 <span id="L167" class="LineNr"> 167 </span>  <span class="Constant">local-scope</span>
 <span id="L168" class="LineNr"> 168 </span>  <span class="Constant">load-inputs</span>
-<span id="L169" class="LineNr"> 169 </span>  <span class="muControl">return-unless</span> editor, <span class="Constant">0/don't-render</span>
+<span id="L169" class="LineNr"> 169 </span>  <span class="muControl">return-unless</span> editor,<span class="Constant"> false/don't-render</span>
 <span id="L170" class="LineNr"> 170 </span>  <a href='../081print.mu.html#L768'>screen-width</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L768'>screen-width</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L171" class="LineNr"> 171 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L172" class="LineNr"> 172 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
@@ -247,7 +247,7 @@ if ('onhashchange' in window) {
 <span id="L185" class="LineNr"> 185 </span><span class="Constant">    <a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span>
 <span id="L186" class="LineNr"> 186 </span>    <span class="Comment"># ignore any other special characters</span>
 <span id="L187" class="LineNr"> 187 </span>    regular-character?:bool <span class="Special">&lt;-</span> greater-or-equal c, <span class="Constant">32/space</span>
-<span id="L188" class="LineNr"> 188 </span>    <span class="muControl">return-unless</span> regular-character?, <span class="Constant">0/don't-render</span>
+<span id="L188" class="LineNr"> 188 </span>    <span class="muControl">return-unless</span> regular-character?,<span class="Constant"> false/don't-render</span>
 <span id="L189" class="LineNr"> 189 </span>    <span class="Comment"># otherwise type it in</span>
 <span id="L190" class="LineNr"> 190 </span><span class="Constant">    &lt;begin-insert-character&gt;</span>
 <span id="L191" class="LineNr"> 191 </span>    go-render? <span class="Special">&lt;-</span> <a href='002-typing.mu.html#L203'>insert-at-cursor</a> editor, c, <a href='../081print.mu.html#L16'>screen</a>
@@ -259,7 +259,7 @@ if ('onhashchange' in window) {
 <span id="L197" class="LineNr"> 197 </span>  assert is-keycode?, <span class="Constant">[event was of unknown type; neither keyboard nor mouse]</span>
 <span id="L198" class="LineNr"> 198 </span>  <span class="Comment"># handlers for each special key will go here</span>
 <span id="L199" class="LineNr"> 199 </span><span class="Constant">  <a href='002-typing.mu.html#L199'>&lt;handle-special-key&gt;</a></span>
-<span id="L200" class="LineNr"> 200 </span> <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L200" class="LineNr"> 200 </span> <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L201" class="LineNr"> 201 </span>]
 <span id="L202" class="LineNr"> 202 </span>
 <span id="L203" class="LineNr"> 203 </span><span class="muRecipe">def</span> <a href='002-typing.mu.html#L203'>insert-at-cursor</a> editor:&amp;:editor, c:char, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a><span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
@@ -267,7 +267,7 @@ if ('onhashchange' in window) {
 <span id="L205" class="LineNr"> 205 </span>  <span class="Constant">load-inputs</span>
 <span id="L206" class="LineNr"> 206 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L207" class="LineNr"> 207 </span>  insert c, before-cursor
-<span id="L208" class="LineNr"> 208 </span>  before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L208" class="LineNr"> 208 </span>  before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L209" class="LineNr"> 209 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L210" class="LineNr"> 210 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L211" class="LineNr"> 211 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
@@ -282,10 +282,10 @@ if ('onhashchange' in window) {
 <span id="L220" class="LineNr"> 220 </span>  <span class="Comment"># but mostly we'll just move the cursor right</span>
 <span id="L221" class="LineNr"> 221 </span>  cursor-column <span class="Special">&lt;-</span> add cursor-column,<span class="Constant"> 1</span>
 <span id="L222" class="LineNr"> 222 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L223" class="LineNr"> 223 </span>  <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L223" class="LineNr"> 223 </span>  <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L224" class="LineNr"> 224 </span>  <span class="Delimiter">{</span>
 <span id="L225" class="LineNr"> 225 </span>    <span class="Comment"># at end of all text? no need to scroll? just print the character and leave</span>
-<span id="L226" class="LineNr"> 226 </span>    at-end?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L25'>next</a>, <span class="Constant">0/null</span>
+<span id="L226" class="LineNr"> 226 </span>    at-end?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L31'>next</a>,<span class="Constant"> null</span>
 <span id="L227" class="LineNr"> 227 </span>    <span class="muControl">break-unless</span> at-end?
 <span id="L228" class="LineNr"> 228 </span>    bottom:num <span class="Special">&lt;-</span> subtract <a href='../081print.mu.html#L782'>screen-height</a>,<span class="Constant"> 1</span>
 <span id="L229" class="LineNr"> 229 </span>    at-bottom?:bool <span class="Special">&lt;-</span> equal save-row, bottom
@@ -294,11 +294,11 @@ if ('onhashchange' in window) {
 <span id="L232" class="LineNr"> 232 </span>    <span class="muControl">break-if</span> overflow?
 <span id="L233" class="LineNr"> 233 </span>    move-cursor <a href='../081print.mu.html#L16'>screen</a>, save-row, save-column
 <span id="L234" class="LineNr"> 234 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c
-<span id="L235" class="LineNr"> 235 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L235" class="LineNr"> 235 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L236" class="LineNr"> 236 </span>  <span class="Delimiter">}</span>
 <span id="L237" class="LineNr"> 237 </span>  <span class="Delimiter">{</span>
 <span id="L238" class="LineNr"> 238 </span>    <span class="Comment"># not at right margin? print the character and rest of line</span>
-<span id="L239" class="LineNr"> 239 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L239" class="LineNr"> 239 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L240" class="LineNr"> 240 </span>    at-right?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, <a href='../081print.mu.html#L768'>screen-width</a>
 <span id="L241" class="LineNr"> 241 </span>    <span class="muControl">break-if</span> at-right?
 <span id="L242" class="LineNr"> 242 </span>    curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy before-cursor
@@ -307,7 +307,7 @@ if ('onhashchange' in window) {
 <span id="L245" class="LineNr"> 245 </span>    <span class="Delimiter">{</span>
 <span id="L246" class="LineNr"> 246 </span>      <span class="Comment"># hit right margin? give up and let caller render</span>
 <span id="L247" class="LineNr"> 247 </span>      at-right?:bool <span class="Special">&lt;-</span> greater-than curr-column, right
-<span id="L248" class="LineNr"> 248 </span>      <span class="muControl">return-if</span> at-right?, <span class="Constant">1/go-render</span>
+<span id="L248" class="LineNr"> 248 </span>      <span class="muControl">return-if</span> at-right?,<span class="Constant"> true/go-render</span>
 <span id="L249" class="LineNr"> 249 </span>      <span class="muControl">break-unless</span> curr
 <span id="L250" class="LineNr"> 250 </span>      <span class="Comment"># newline? done.</span>
 <span id="L251" class="LineNr"> 251 </span>      currc:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
@@ -315,12 +315,12 @@ if ('onhashchange' in window) {
 <span id="L253" class="LineNr"> 253 </span>      <span class="muControl">break-if</span> at-newline?
 <span id="L254" class="LineNr"> 254 </span>      print <a href='../081print.mu.html#L16'>screen</a>, currc
 <span id="L255" class="LineNr"> 255 </span>      curr-column <span class="Special">&lt;-</span> add curr-column,<span class="Constant"> 1</span>
-<span id="L256" class="LineNr"> 256 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L256" class="LineNr"> 256 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L257" class="LineNr"> 257 </span>     <span class="muControl"> loop</span>
 <span id="L258" class="LineNr"> 258 </span>    <span class="Delimiter">}</span>
-<span id="L259" class="LineNr"> 259 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L259" class="LineNr"> 259 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L260" class="LineNr"> 260 </span>  <span class="Delimiter">}</span>
-<span id="L261" class="LineNr"> 261 </span> <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L261" class="LineNr"> 261 </span> <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L262" class="LineNr"> 262 </span>]
 <span id="L263" class="LineNr"> 263 </span>
 <span id="L264" class="LineNr"> 264 </span><span class="Comment"># helper for tests</span>
@@ -330,10 +330,10 @@ if ('onhashchange' in window) {
 <span id="L268" class="LineNr"> 268 </span>  old-top-idx:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L509'>save-top-idx</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L269" class="LineNr"> 269 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L270" class="LineNr"> 270 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
-<span id="L271" class="LineNr"> 271 </span>  row:num, column:num <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L107'>render</a> <a href='../081print.mu.html#L16'>screen</a>, editor
+<span id="L271" class="LineNr"> 271 </span>  row:num, column:num <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L109'>render</a> <a href='../081print.mu.html#L16'>screen</a>, editor
 <span id="L272" class="LineNr"> 272 </span>  <a href='002-typing.mu.html#L1114'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right, <span class="Constant">9480/horizontal-dotted</span>
 <span id="L273" class="LineNr"> 273 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L274" class="LineNr"> 274 </span>  <a href='001-editor.mu.html#L209'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
+<span id="L274" class="LineNr"> 274 </span>  <a href='001-editor.mu.html#L211'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
 <span id="L275" class="LineNr"> 275 </span>  <a href='../081print.mu.html#L515'>assert-no-scroll</a> <a href='../081print.mu.html#L16'>screen</a>, old-top-idx
 <span id="L276" class="LineNr"> 276 </span>]
 <span id="L277" class="LineNr"> 277 </span>
@@ -761,16 +761,16 @@ if ('onhashchange' in window) {
 <span id="L699" class="LineNr"> 699 </span>    before-wrap-column:num <span class="Special">&lt;-</span> subtract wrap-column,<span class="Constant"> 1</span>
 <span id="L700" class="LineNr"> 700 </span>    at-wrap?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, wrap-column
 <span id="L701" class="LineNr"> 701 </span>    just-before-wrap?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, before-wrap-column
-<span id="L702" class="LineNr"> 702 </span>    <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L702" class="LineNr"> 702 </span>    <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L703" class="LineNr"> 703 </span>    <span class="Comment"># at end of line? next == 0 || next.value == 10/newline</span>
-<span id="L704" class="LineNr"> 704 </span>    at-end-of-line?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L25'>next</a>,<span class="Constant"> 0</span>
+<span id="L704" class="LineNr"> 704 </span>    at-end-of-line?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L31'>next</a>,<span class="Constant"> null</span>
 <span id="L705" class="LineNr"> 705 </span>    <span class="Delimiter">{</span>
 <span id="L706" class="LineNr"> 706 </span>      <span class="muControl">break-if</span> at-end-of-line?
 <span id="L707" class="LineNr"> 707 </span>      next-character:char <span class="Special">&lt;-</span> get *next, <span class="Constant">value:offset</span>
 <span id="L708" class="LineNr"> 708 </span>      at-end-of-line? <span class="Special">&lt;-</span> equal next-character, <span class="Constant">10/newline</span>
 <span id="L709" class="LineNr"> 709 </span>    <span class="Delimiter">}</span>
 <span id="L710" class="LineNr"> 710 </span>    <span class="Comment"># break unless ((eol? and at-wrap?) or (~eol? and just-before-wrap?))</span>
-<span id="L711" class="LineNr"> 711 </span>    move-cursor-to-next-line?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L711" class="LineNr"> 711 </span>    move-cursor-to-next-line?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L712" class="LineNr"> 712 </span>    <span class="Delimiter">{</span>
 <span id="L713" class="LineNr"> 713 </span>      <span class="muControl">break-if</span> at-end-of-line?
 <span id="L714" class="LineNr"> 714 </span>      move-cursor-to-next-line? <span class="Special">&lt;-</span> copy just-before-wrap?
@@ -797,7 +797,7 @@ if ('onhashchange' in window) {
 <span id="L735" class="LineNr"> 735 </span>      <span class="muControl">break-unless</span> below-screen?
 <span id="L736" class="LineNr"> 736 </span><span class="Constant">      &lt;scroll-down&gt;</span>
 <span id="L737" class="LineNr"> 737 </span>    <span class="Delimiter">}</span>
-<span id="L738" class="LineNr"> 738 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L738" class="LineNr"> 738 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L739" class="LineNr"> 739 </span>  <span class="Delimiter">}</span>
 <span id="L740" class="LineNr"> 740 </span>]
 <span id="L741" class="LineNr"> 741 </span>
@@ -891,7 +891,7 @@ if ('onhashchange' in window) {
 <span id="L829" class="LineNr"> 829 </span>]
 <span id="L830" class="LineNr"> 830 </span>
 <span id="L831" class="LineNr"> 831 </span><span class="muRecipe">after</span> <span class="Constant"><a href='001-editor.mu.html#L69'>&lt;editor-initialization&gt;</a></span> [
-<span id="L832" class="LineNr"> 832 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">indent?:offset</span>, <span class="Constant">1/true</span>
+<span id="L832" class="LineNr"> 832 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">indent?:offset</span>,<span class="Constant"> true</span>
 <span id="L833" class="LineNr"> 833 </span>]
 <span id="L834" class="LineNr"> 834 </span>
 <span id="L835" class="LineNr"> 835 </span><span class="muScenario">scenario</span> editor-moves-cursor-down-after-inserting-newline [
@@ -921,7 +921,7 @@ if ('onhashchange' in window) {
 <span id="L859" class="LineNr"> 859 </span><span class="Constant">    <a href='002-typing.mu.html#L859'>&lt;begin-insert-enter&gt;</a></span>
 <span id="L860" class="LineNr"> 860 </span>    <a href='002-typing.mu.html#L866'>insert-new-line-and-indent</a> editor, <a href='../081print.mu.html#L16'>screen</a>
 <span id="L861" class="LineNr"> 861 </span><span class="Constant">    <a href='002-typing.mu.html#L861'>&lt;end-insert-enter&gt;</a></span>
-<span id="L862" class="LineNr"> 862 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L862" class="LineNr"> 862 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L863" class="LineNr"> 863 </span>  <span class="Delimiter">}</span>
 <span id="L864" class="LineNr"> 864 </span>]
 <span id="L865" class="LineNr"> 865 </span>
@@ -947,19 +947,19 @@ if ('onhashchange' in window) {
 <span id="L885" class="LineNr"> 885 </span>  <span class="Delimiter">{</span>
 <span id="L886" class="LineNr"> 886 </span>    below-screen?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-row, <a href='../081print.mu.html#L782'>screen-height</a>  <span class="Comment"># must be equal, never greater</span>
 <span id="L887" class="LineNr"> 887 </span>    <span class="muControl">break-unless</span> below-screen?
-<span id="L888" class="LineNr"> 888 </span><span class="Constant">    &lt;scroll-down&gt;</span>
+<span id="L888" class="LineNr"> 888 </span><span class="Constant">    <a href='002-typing.mu.html#L888'>&lt;scroll-down2&gt;</a></span>
 <span id="L889" class="LineNr"> 889 </span>    cursor-row <span class="Special">&lt;-</span> subtract cursor-row,<span class="Constant"> 1</span>  <span class="Comment"># bring back into screen range</span>
 <span id="L890" class="LineNr"> 890 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
 <span id="L891" class="LineNr"> 891 </span>  <span class="Delimiter">}</span>
 <span id="L892" class="LineNr"> 892 </span>  <span class="Comment"># insert newline</span>
 <span id="L893" class="LineNr"> 893 </span>  insert <span class="Constant">10/newline</span>, before-cursor
-<span id="L894" class="LineNr"> 894 </span>  before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L894" class="LineNr"> 894 </span>  before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L895" class="LineNr"> 895 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L896" class="LineNr"> 896 </span>  <span class="Comment"># indent if necessary</span>
 <span id="L897" class="LineNr"> 897 </span>  indent?:bool <span class="Special">&lt;-</span> get *editor, <span class="Constant">indent?:offset</span>
 <span id="L898" class="LineNr"> 898 </span>  <span class="muControl">return-unless</span> indent?
 <span id="L899" class="LineNr"> 899 </span>  d:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L900" class="LineNr"> 900 </span>  end-of-previous-line:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
+<span id="L900" class="LineNr"> 900 </span>  end-of-previous-line:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
 <span id="L901" class="LineNr"> 901 </span>  indent:num <span class="Special">&lt;-</span> <a href='002-typing.mu.html#L932'>line-indent</a> end-of-previous-line, d
 <span id="L902" class="LineNr"> 902 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L903" class="LineNr"> 903 </span>  <span class="Delimiter">{</span>
@@ -977,16 +977,16 @@ if ('onhashchange' in window) {
 <span id="L915" class="LineNr"> 915 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L916" class="LineNr"> 916 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L917" class="LineNr"> 917 </span>  cursor-at-left?:bool <span class="Special">&lt;-</span> equal cursor-column, left
-<span id="L918" class="LineNr"> 918 </span>  <span class="muControl">return-unless</span> cursor-at-left?, <span class="Constant">0/false</span>
+<span id="L918" class="LineNr"> 918 </span>  <span class="muControl">return-unless</span> cursor-at-left?,<span class="Constant"> false</span>
 <span id="L919" class="LineNr"> 919 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L920" class="LineNr"> 920 </span>  before-before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
-<span id="L921" class="LineNr"> 921 </span>  <span class="muControl">return-unless</span> before-before-cursor, <span class="Constant">0/false</span>  <span class="Comment"># cursor is at start of editor</span>
+<span id="L920" class="LineNr"> 920 </span>  before-before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
+<span id="L921" class="LineNr"> 921 </span>  <span class="muControl">return-unless</span> before-before-cursor,<span class="Constant"> false</span>  <span class="Comment"># cursor is at start of editor</span>
 <span id="L922" class="LineNr"> 922 </span>  char-before-cursor:char <span class="Special">&lt;-</span> get *before-cursor, <span class="Constant">value:offset</span>
 <span id="L923" class="LineNr"> 923 </span>  cursor-after-newline?:bool <span class="Special">&lt;-</span> equal char-before-cursor, <span class="Constant">10/newline</span>
-<span id="L924" class="LineNr"> 924 </span>  <span class="muControl">return-if</span> cursor-after-newline?, <span class="Constant">0/false</span>
+<span id="L924" class="LineNr"> 924 </span>  <span class="muControl">return-if</span> cursor-after-newline?,<span class="Constant"> false</span>
 <span id="L925" class="LineNr"> 925 </span>  <span class="Comment"># if cursor is at left margin and not at start, but previous character is not a newline,</span>
 <span id="L926" class="LineNr"> 926 </span>  <span class="Comment"># then we're at start of a wrapped line</span>
-<span id="L927" class="LineNr"> 927 </span> <span class="muControl"> return</span> <span class="Constant">1/true</span>
+<span id="L927" class="LineNr"> 927 </span> <span class="muControl"> return</span><span class="Constant"> true</span>
 <span id="L928" class="LineNr"> 928 </span>]
 <span id="L929" class="LineNr"> 929 </span>
 <span id="L930" class="LineNr"> 930 </span><span class="Comment"># takes a pointer 'curr' into the doubly-linked list and its sentinel, counts</span>
@@ -999,7 +999,7 @@ if ('onhashchange' in window) {
 <span id="L937" class="LineNr"> 937 </span>  at-start?:bool <span class="Special">&lt;-</span> equal curr, start
 <span id="L938" class="LineNr"> 938 </span>  <span class="muControl">return-if</span> at-start?
 <span id="L939" class="LineNr"> 939 </span>  <span class="Delimiter">{</span>
-<span id="L940" class="LineNr"> 940 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
+<span id="L940" class="LineNr"> 940 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
 <span id="L941" class="LineNr"> 941 </span>    <span class="muControl">break-unless</span> curr
 <span id="L942" class="LineNr"> 942 </span>    at-start?:bool <span class="Special">&lt;-</span> equal curr, start
 <span id="L943" class="LineNr"> 943 </span>    <span class="muControl">break-if</span> at-start?
@@ -1157,8 +1157,8 @@ if ('onhashchange' in window) {
 <span id="L1095" class="LineNr">1095 </span>  <span class="Delimiter">{</span>
 <span id="L1096" class="LineNr">1096 </span>    paste-start?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65507/paste-start</span>
 <span id="L1097" class="LineNr">1097 </span>    <span class="muControl">break-unless</span> paste-start?
-<span id="L1098" class="LineNr">1098 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">indent?:offset</span>, <span class="Constant">0/false</span>
-<span id="L1099" class="LineNr">1099 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L1098" class="LineNr">1098 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">indent?:offset</span>,<span class="Constant"> false</span>
+<span id="L1099" class="LineNr">1099 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L1100" class="LineNr">1100 </span>  <span class="Delimiter">}</span>
 <span id="L1101" class="LineNr">1101 </span>]
 <span id="L1102" class="LineNr">1102 </span>
@@ -1166,8 +1166,8 @@ if ('onhashchange' in window) {
 <span id="L1104" class="LineNr">1104 </span>  <span class="Delimiter">{</span>
 <span id="L1105" class="LineNr">1105 </span>    paste-end?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65506/paste-end</span>
 <span id="L1106" class="LineNr">1106 </span>    <span class="muControl">break-unless</span> paste-end?
-<span id="L1107" class="LineNr">1107 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">indent?:offset</span>, <span class="Constant">1/true</span>
-<span id="L1108" class="LineNr">1108 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L1107" class="LineNr">1107 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">indent?:offset</span>,<span class="Constant"> true</span>
+<span id="L1108" class="LineNr">1108 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L1109" class="LineNr">1109 </span>  <span class="Delimiter">}</span>
 <span id="L1110" class="LineNr">1110 </span>]
 <span id="L1111" class="LineNr">1111 </span>
diff --git a/html/edit/003-shortcuts.mu.html b/html/edit/003-shortcuts.mu.html
index 9d7cd6d1..e507b83d 100644
--- a/html/edit/003-shortcuts.mu.html
+++ b/html/edit/003-shortcuts.mu.html
@@ -15,16 +15,16 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -173,31 +173,31 @@ if ('onhashchange' in window) {
 <span id="L112" class="LineNr"> 112 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L113" class="LineNr"> 113 </span>  data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L114" class="LineNr"> 114 </span>  <span class="Comment"># if at start of text (before-cursor at § sentinel), return</span>
-<span id="L115" class="LineNr"> 115 </span>  <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
-<span id="L116" class="LineNr"> 116 </span>  <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L32'>prev</a>, <span class="Constant">0/no-more-render</span>, <span class="Constant">0/nothing-deleted</span>
+<span id="L115" class="LineNr"> 115 </span>  <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
+<span id="L116" class="LineNr"> 116 </span>  <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L38'>prev</a>,<span class="Constant"> false/no-more-render, null/nothing-deleted</span>
 <span id="L117" class="LineNr"> 117 </span>  trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[delete-before-cursor]</span>
 <span id="L118" class="LineNr"> 118 </span>  original-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L119" class="LineNr"> 119 </span>  scroll?:bool <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L156'>move-cursor-coordinates-left</a> editor
 <span id="L120" class="LineNr"> 120 </span>  backspaced-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy before-cursor
 <span id="L121" class="LineNr"> 121 </span>  data <span class="Special">&lt;-</span> remove before-cursor, data  <span class="Comment"># will also neatly trim next/prev pointers in backspaced-cell/before-cursor</span>
-<span id="L122" class="LineNr"> 122 </span>  before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L122" class="LineNr"> 122 </span>  before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L123" class="LineNr"> 123 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L124" class="LineNr"> 124 </span>  <span class="muControl">return-if</span> scroll?, <span class="Constant">1/go-render</span>
+<span id="L124" class="LineNr"> 124 </span>  <span class="muControl">return-if</span> scroll?,<span class="Constant"> true/go-render</span>
 <span id="L125" class="LineNr"> 125 </span>  <a href='../081print.mu.html#L768'>screen-width</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L768'>screen-width</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L126" class="LineNr"> 126 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L127" class="LineNr"> 127 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L128" class="LineNr"> 128 </span>  <span class="Comment"># did we just backspace over a newline?</span>
 <span id="L129" class="LineNr"> 129 </span>  same-row?:bool <span class="Special">&lt;-</span> equal cursor-row, original-row
-<span id="L130" class="LineNr"> 130 </span>  <span class="muControl">return-unless</span> same-row?, <span class="Constant">1/go-render</span>
+<span id="L130" class="LineNr"> 130 </span>  <span class="muControl">return-unless</span> same-row?,<span class="Constant"> true/go-render</span>
 <span id="L131" class="LineNr"> 131 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L132" class="LineNr"> 132 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
-<span id="L133" class="LineNr"> 133 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L133" class="LineNr"> 133 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L134" class="LineNr"> 134 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, cursor-row, cursor-column
 <span id="L135" class="LineNr"> 135 </span>  curr-column:num <span class="Special">&lt;-</span> copy cursor-column
 <span id="L136" class="LineNr"> 136 </span>  <span class="Delimiter">{</span>
 <span id="L137" class="LineNr"> 137 </span>    <span class="Comment"># hit right margin? give up and let caller render</span>
 <span id="L138" class="LineNr"> 138 </span>    at-right?:bool <span class="Special">&lt;-</span> greater-or-equal curr-column, right
-<span id="L139" class="LineNr"> 139 </span>    <span class="muControl">return-if</span> at-right?, <span class="Constant">1/go-render</span>
+<span id="L139" class="LineNr"> 139 </span>    <span class="muControl">return-if</span> at-right?,<span class="Constant"> true/go-render</span>
 <span id="L140" class="LineNr"> 140 </span>    <span class="muControl">break-unless</span> curr
 <span id="L141" class="LineNr"> 141 </span>    <span class="Comment"># newline? done.</span>
 <span id="L142" class="LineNr"> 142 </span>    currc:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
@@ -205,19 +205,19 @@ if ('onhashchange' in window) {
 <span id="L144" class="LineNr"> 144 </span>    <span class="muControl">break-if</span> at-newline?
 <span id="L145" class="LineNr"> 145 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='../081print.mu.html#L16'>screen</a>, currc
 <span id="L146" class="LineNr"> 146 </span>    curr-column <span class="Special">&lt;-</span> add curr-column,<span class="Constant"> 1</span>
-<span id="L147" class="LineNr"> 147 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L147" class="LineNr"> 147 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L148" class="LineNr"> 148 </span>   <span class="muControl"> loop</span>
 <span id="L149" class="LineNr"> 149 </span>  <span class="Delimiter">}</span>
 <span id="L150" class="LineNr"> 150 </span>  <span class="Comment"># we're guaranteed not to be at the right margin</span>
 <span id="L151" class="LineNr"> 151 </span>  space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
 <span id="L152" class="LineNr"> 152 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='../081print.mu.html#L16'>screen</a>, space
-<span id="L153" class="LineNr"> 153 </span>  go-render? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L153" class="LineNr"> 153 </span>  go-render? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L154" class="LineNr"> 154 </span>]
 <span id="L155" class="LineNr"> 155 </span>
 <span id="L156" class="LineNr"> 156 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L156'>move-cursor-coordinates-left</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L157" class="LineNr"> 157 </span>  <span class="Constant">local-scope</span>
 <span id="L158" class="LineNr"> 158 </span>  <span class="Constant">load-inputs</span>
-<span id="L159" class="LineNr"> 159 </span>  go-render?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L159" class="LineNr"> 159 </span>  go-render?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L160" class="LineNr"> 160 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L161" class="LineNr"> 161 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L162" class="LineNr"> 162 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
@@ -241,7 +241,7 @@ if ('onhashchange' in window) {
 <span id="L180" class="LineNr"> 180 </span>  <span class="Delimiter">{</span>
 <span id="L181" class="LineNr"> 181 </span>    <span class="muControl">break-unless</span> top-of-screen?
 <span id="L182" class="LineNr"> 182 </span><span class="Constant">    &lt;scroll-up&gt;</span>
-<span id="L183" class="LineNr"> 183 </span>    go-render? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L183" class="LineNr"> 183 </span>    go-render? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L184" class="LineNr"> 184 </span>  <span class="Delimiter">}</span>
 <span id="L185" class="LineNr"> 185 </span>  <span class="Delimiter">{</span>
 <span id="L186" class="LineNr"> 186 </span>    <span class="Comment"># case 1: if previous character was newline, figure out how long the previous line is</span>
@@ -285,7 +285,7 @@ if ('onhashchange' in window) {
 <span id="L224" class="LineNr"> 224 </span>  at-start?:bool <span class="Special">&lt;-</span> equal curr, start
 <span id="L225" class="LineNr"> 225 </span>  <span class="muControl">return-if</span> at-start?
 <span id="L226" class="LineNr"> 226 </span>  <span class="Delimiter">{</span>
-<span id="L227" class="LineNr"> 227 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
+<span id="L227" class="LineNr"> 227 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
 <span id="L228" class="LineNr"> 228 </span>    <span class="muControl">break-unless</span> curr
 <span id="L229" class="LineNr"> 229 </span>    at-start?:bool <span class="Special">&lt;-</span> equal curr, start
 <span id="L230" class="LineNr"> 230 </span>    <span class="muControl">break-if</span> at-start?
@@ -436,14 +436,14 @@ if ('onhashchange' in window) {
 <span id="L375" class="LineNr"> 375 </span>  <span class="Constant">load-inputs</span>
 <span id="L376" class="LineNr"> 376 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L377" class="LineNr"> 377 </span>  data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L378" class="LineNr"> 378 </span>  deleted-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
-<span id="L379" class="LineNr"> 379 </span>  <span class="muControl">return-unless</span> deleted-cell, <span class="Constant">0/don't-render</span>
+<span id="L378" class="LineNr"> 378 </span>  deleted-cell:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
+<span id="L379" class="LineNr"> 379 </span>  <span class="muControl">return-unless</span> deleted-cell,<span class="Constant"> false/don't-render</span>
 <span id="L380" class="LineNr"> 380 </span>  currc:char <span class="Special">&lt;-</span> get *deleted-cell, <span class="Constant">value:offset</span>
 <span id="L381" class="LineNr"> 381 </span>  data <span class="Special">&lt;-</span> remove deleted-cell, data
 <span id="L382" class="LineNr"> 382 </span>  deleted-newline?:bool <span class="Special">&lt;-</span> equal currc, <span class="Constant">10/newline</span>
-<span id="L383" class="LineNr"> 383 </span>  <span class="muControl">return-if</span> deleted-newline?, <span class="Constant">1/go-render</span>
+<span id="L383" class="LineNr"> 383 </span>  <span class="muControl">return-if</span> deleted-newline?,<span class="Constant"> true/go-render</span>
 <span id="L384" class="LineNr"> 384 </span>  <span class="Comment"># wasn't a newline? render rest of line</span>
-<span id="L385" class="LineNr"> 385 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor  <span class="Comment"># refresh after remove above</span>
+<span id="L385" class="LineNr"> 385 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor  <span class="Comment"># refresh after remove above</span>
 <span id="L386" class="LineNr"> 386 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L387" class="LineNr"> 387 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L388" class="LineNr"> 388 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, cursor-row, cursor-column
@@ -452,20 +452,20 @@ if ('onhashchange' in window) {
 <span id="L391" class="LineNr"> 391 </span>  <span class="Delimiter">{</span>
 <span id="L392" class="LineNr"> 392 </span>    <span class="Comment"># hit right margin? give up and let caller render</span>
 <span id="L393" class="LineNr"> 393 </span>    at-right?:bool <span class="Special">&lt;-</span> greater-or-equal curr-column, <a href='../081print.mu.html#L768'>screen-width</a>
-<span id="L394" class="LineNr"> 394 </span>    <span class="muControl">return-if</span> at-right?, <span class="Constant">1/go-render</span>
+<span id="L394" class="LineNr"> 394 </span>    <span class="muControl">return-if</span> at-right?,<span class="Constant"> true/go-render</span>
 <span id="L395" class="LineNr"> 395 </span>    <span class="muControl">break-unless</span> curr
 <span id="L396" class="LineNr"> 396 </span>    currc:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
 <span id="L397" class="LineNr"> 397 </span>    at-newline?:bool <span class="Special">&lt;-</span> equal currc, <span class="Constant">10/newline</span>
 <span id="L398" class="LineNr"> 398 </span>    <span class="muControl">break-if</span> at-newline?
 <span id="L399" class="LineNr"> 399 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='../081print.mu.html#L16'>screen</a>, currc
 <span id="L400" class="LineNr"> 400 </span>    curr-column <span class="Special">&lt;-</span> add curr-column,<span class="Constant"> 1</span>
-<span id="L401" class="LineNr"> 401 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L401" class="LineNr"> 401 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L402" class="LineNr"> 402 </span>   <span class="muControl"> loop</span>
 <span id="L403" class="LineNr"> 403 </span>  <span class="Delimiter">}</span>
 <span id="L404" class="LineNr"> 404 </span>  <span class="Comment"># we're guaranteed not to be at the right margin</span>
 <span id="L405" class="LineNr"> 405 </span>  space:char <span class="Special">&lt;-</span> copy <span class="Constant">32/space</span>
 <span id="L406" class="LineNr"> 406 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> print <a href='../081print.mu.html#L16'>screen</a>, space
-<span id="L407" class="LineNr"> 407 </span>  go-render? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L407" class="LineNr"> 407 </span>  go-render? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L408" class="LineNr"> 408 </span>]
 <span id="L409" class="LineNr"> 409 </span>
 <span id="L410" class="LineNr"> 410 </span><span class="Comment"># right arrow</span>
@@ -497,7 +497,7 @@ if ('onhashchange' in window) {
 <span id="L436" class="LineNr"> 436 </span>    move-to-next-character?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65514/right-arrow</span>
 <span id="L437" class="LineNr"> 437 </span>    <span class="muControl">break-unless</span> move-to-next-character?
 <span id="L438" class="LineNr"> 438 </span>    <span class="Comment"># if not at end of text</span>
-<span id="L439" class="LineNr"> 439 </span>    next-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L439" class="LineNr"> 439 </span>    next-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L440" class="LineNr"> 440 </span>    <span class="muControl">break-unless</span> next-cursor
 <span id="L441" class="LineNr"> 441 </span>    <span class="Comment"># scan to next character</span>
 <span id="L442" class="LineNr"> 442 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
@@ -529,11 +529,11 @@ if ('onhashchange' in window) {
 <span id="L468" class="LineNr"> 468 </span>    cursor-column <span class="Special">&lt;-</span> copy left
 <span id="L469" class="LineNr"> 469 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
 <span id="L470" class="LineNr"> 470 </span>    below-screen?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-row, <a href='../081print.mu.html#L782'>screen-height</a>  <span class="Comment"># must be equal</span>
-<span id="L471" class="LineNr"> 471 </span>    <span class="muControl">return-unless</span> below-screen?, <span class="Constant">0/don't-render</span>
+<span id="L471" class="LineNr"> 471 </span>    <span class="muControl">return-unless</span> below-screen?,<span class="Constant"> false/don't-render</span>
 <span id="L472" class="LineNr"> 472 </span><span class="Constant">    &lt;scroll-down&gt;</span>
 <span id="L473" class="LineNr"> 473 </span>    cursor-row <span class="Special">&lt;-</span> subtract cursor-row,<span class="Constant"> 1</span>  <span class="Comment"># bring back into screen range</span>
 <span id="L474" class="LineNr"> 474 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
-<span id="L475" class="LineNr"> 475 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L475" class="LineNr"> 475 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L476" class="LineNr"> 476 </span>  <span class="Delimiter">}</span>
 <span id="L477" class="LineNr"> 477 </span>  <span class="Comment"># if the line wraps, move cursor to start of next row</span>
 <span id="L478" class="LineNr"> 478 </span>  <span class="Delimiter">{</span>
@@ -542,8 +542,8 @@ if ('onhashchange' in window) {
 <span id="L481" class="LineNr"> 481 </span>    at-wrap?:bool <span class="Special">&lt;-</span> equal cursor-column, wrap-column
 <span id="L482" class="LineNr"> 482 </span>    <span class="muControl">break-unless</span> at-wrap?
 <span id="L483" class="LineNr"> 483 </span>    <span class="Comment"># and if next character isn't newline</span>
-<span id="L484" class="LineNr"> 484 </span>    <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
-<span id="L485" class="LineNr"> 485 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L484" class="LineNr"> 484 </span>    <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
+<span id="L485" class="LineNr"> 485 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L486" class="LineNr"> 486 </span>    next-character:char <span class="Special">&lt;-</span> get *next, <span class="Constant">value:offset</span>
 <span id="L487" class="LineNr"> 487 </span>    newline?:bool <span class="Special">&lt;-</span> equal next-character, <span class="Constant">10/newline</span>
 <span id="L488" class="LineNr"> 488 </span>    <span class="muControl">break-if</span> newline?
@@ -552,16 +552,16 @@ if ('onhashchange' in window) {
 <span id="L491" class="LineNr"> 491 </span>    cursor-column <span class="Special">&lt;-</span> copy left
 <span id="L492" class="LineNr"> 492 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
 <span id="L493" class="LineNr"> 493 </span>    below-screen?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-row, <a href='../081print.mu.html#L782'>screen-height</a>  <span class="Comment"># must be equal</span>
-<span id="L494" class="LineNr"> 494 </span>    <span class="muControl">return-unless</span> below-screen?, <span class="Constant">0/no-more-render</span>
+<span id="L494" class="LineNr"> 494 </span>    <span class="muControl">return-unless</span> below-screen?,<span class="Constant"> false/no-more-render</span>
 <span id="L495" class="LineNr"> 495 </span><span class="Constant">    &lt;scroll-down&gt;</span>
 <span id="L496" class="LineNr"> 496 </span>    cursor-row <span class="Special">&lt;-</span> subtract cursor-row,<span class="Constant"> 1</span>  <span class="Comment"># bring back into screen range</span>
 <span id="L497" class="LineNr"> 497 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
-<span id="L498" class="LineNr"> 498 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L498" class="LineNr"> 498 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L499" class="LineNr"> 499 </span>  <span class="Delimiter">}</span>
 <span id="L500" class="LineNr"> 500 </span>  <span class="Comment"># otherwise move cursor one character right</span>
 <span id="L501" class="LineNr"> 501 </span>  cursor-column <span class="Special">&lt;-</span> add cursor-column,<span class="Constant"> 1</span>
 <span id="L502" class="LineNr"> 502 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L503" class="LineNr"> 503 </span>  go-render? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L503" class="LineNr"> 503 </span>  go-render? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L504" class="LineNr"> 504 </span>]
 <span id="L505" class="LineNr"> 505 </span>
 <span id="L506" class="LineNr"> 506 </span><span class="muScenario">scenario</span> editor-moves-cursor-to-next-line-with-right-arrow [
@@ -782,11 +782,11 @@ if ('onhashchange' in window) {
 <span id="L721" class="LineNr"> 721 </span>    <span class="muControl">break-unless</span> move-to-previous-character?
 <span id="L722" class="LineNr"> 722 </span>    trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[left arrow]</span>
 <span id="L723" class="LineNr"> 723 </span>    <span class="Comment"># if not at start of text (before-cursor at § sentinel)</span>
-<span id="L724" class="LineNr"> 724 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
-<span id="L725" class="LineNr"> 725 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L32'>prev</a>, <span class="Constant">0/don't-render</span>
+<span id="L724" class="LineNr"> 724 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
+<span id="L725" class="LineNr"> 725 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L38'>prev</a>,<span class="Constant"> false/don't-render</span>
 <span id="L726" class="LineNr"> 726 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
 <span id="L727" class="LineNr"> 727 </span>    go-render? <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L156'>move-cursor-coordinates-left</a> editor
-<span id="L728" class="LineNr"> 728 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L728" class="LineNr"> 728 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L729" class="LineNr"> 729 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L730" class="LineNr"> 730 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">1/left-arrow</span>
 <span id="L731" class="LineNr"> 731 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
@@ -1061,7 +1061,7 @@ if ('onhashchange' in window) {
 <span id="L1000" class="LineNr">1000 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L1000'>move-to-previous-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
 <span id="L1001" class="LineNr">1001 </span>  <span class="Constant">local-scope</span>
 <span id="L1002" class="LineNr">1002 </span>  <span class="Constant">load-inputs</span>
-<span id="L1003" class="LineNr">1003 </span>  go-render?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L1003" class="LineNr">1003 </span>  go-render?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L1004" class="LineNr">1004 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L1005" class="LineNr">1005 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L1006" class="LineNr">1006 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
@@ -1099,7 +1099,7 @@ if ('onhashchange' in window) {
 <span id="L1038" class="LineNr">1038 </span>    <span class="Delimiter">{</span>
 <span id="L1039" class="LineNr">1039 </span>      done?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, target-column
 <span id="L1040" class="LineNr">1040 </span>      <span class="muControl">break-if</span> done?
-<span id="L1041" class="LineNr">1041 </span>      curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1041" class="LineNr">1041 </span>      curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1042" class="LineNr">1042 </span>      <span class="muControl">break-unless</span> curr
 <span id="L1043" class="LineNr">1043 </span>      currc:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
 <span id="L1044" class="LineNr">1044 </span>      at-newline?:bool <span class="Special">&lt;-</span> equal currc, <span class="Constant">10/newline</span>
@@ -1117,7 +1117,7 @@ if ('onhashchange' in window) {
 <span id="L1056" class="LineNr">1056 </span>    <span class="Comment"># if cursor already at top, scroll up</span>
 <span id="L1057" class="LineNr">1057 </span>    <span class="muControl">break-unless</span> already-at-top?
 <span id="L1058" class="LineNr">1058 </span><span class="Constant">    &lt;scroll-up&gt;</span>
-<span id="L1059" class="LineNr">1059 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L1059" class="LineNr">1059 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L1060" class="LineNr">1060 </span>  <span class="Delimiter">}</span>
 <span id="L1061" class="LineNr">1061 </span>]
 <span id="L1062" class="LineNr">1062 </span>
@@ -1141,9 +1141,9 @@ if ('onhashchange' in window) {
 <span id="L1080" class="LineNr">1080 </span>  <span class="Delimiter">{</span>
 <span id="L1081" class="LineNr">1081 </span>    <span class="muControl">break-if</span> len
 <span id="L1082" class="LineNr">1082 </span>    <span class="Comment"># empty line; just skip this newline</span>
-<span id="L1083" class="LineNr">1083 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
-<span id="L1084" class="LineNr">1084 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L32'>prev</a>, curr
-<span id="L1085" class="LineNr">1085 </span>   <span class="muControl"> return</span> <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L1083" class="LineNr">1083 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
+<span id="L1084" class="LineNr">1084 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L38'>prev</a>, curr
+<span id="L1085" class="LineNr">1085 </span>   <span class="muControl"> return</span> <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L1086" class="LineNr">1086 </span>  <span class="Delimiter">}</span>
 <span id="L1087" class="LineNr">1087 </span>  _, max:num <span class="Special">&lt;-</span> divide-with-remainder len, max-line-length
 <span id="L1088" class="LineNr">1088 </span>  <span class="Comment"># remainder 0 =&gt; scan one width-worth</span>
@@ -1157,9 +1157,9 @@ if ('onhashchange' in window) {
 <span id="L1096" class="LineNr">1096 </span>  <span class="Delimiter">{</span>
 <span id="L1097" class="LineNr">1097 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal count, max
 <span id="L1098" class="LineNr">1098 </span>    <span class="muControl">break-if</span> done?
-<span id="L1099" class="LineNr">1099 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
-<span id="L1100" class="LineNr">1100 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L1101" class="LineNr">1101 </span>    curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L1099" class="LineNr">1099 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
+<span id="L1100" class="LineNr">1100 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L1101" class="LineNr">1101 </span>    curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L1102" class="LineNr">1102 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
 <span id="L1103" class="LineNr">1103 </span>   <span class="muControl"> loop</span>
 <span id="L1104" class="LineNr">1104 </span>  <span class="Delimiter">}</span>
@@ -1472,19 +1472,19 @@ if ('onhashchange' in window) {
 <span id="L1411" class="LineNr">1411 </span>    <span class="muControl">break-if</span> before-cursor
 <span id="L1412" class="LineNr">1412 </span>    <span class="Delimiter">{</span>
 <span id="L1413" class="LineNr">1413 </span>      <span class="muControl">break-if</span> at-bottom-of-screen?
-<span id="L1414" class="LineNr">1414 </span>     <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1414" class="LineNr">1414 </span>     <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1415" class="LineNr">1415 </span>    <span class="Delimiter">}</span>
 <span id="L1416" class="LineNr">1416 </span>    <span class="Delimiter">{</span>
 <span id="L1417" class="LineNr">1417 </span>      <span class="muControl">break-unless</span> at-bottom-of-screen?
 <span id="L1418" class="LineNr">1418 </span>     <span class="muControl"> jump</span> <span class="Constant">+try-to-scroll</span>
 <span id="L1419" class="LineNr">1419 </span>    <span class="Delimiter">}</span>
 <span id="L1420" class="LineNr">1420 </span>  <span class="Delimiter">}</span>
-<span id="L1421" class="LineNr">1421 </span>  <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1421" class="LineNr">1421 </span>  <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1422" class="LineNr">1422 </span>  <span class="Delimiter">{</span>
-<span id="L1423" class="LineNr">1423 </span>    <span class="muControl">break-if</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1423" class="LineNr">1423 </span>    <span class="muControl">break-if</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1424" class="LineNr">1424 </span>    <span class="Delimiter">{</span>
 <span id="L1425" class="LineNr">1425 </span>      <span class="muControl">break-if</span> at-bottom-of-screen?
-<span id="L1426" class="LineNr">1426 </span>     <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1426" class="LineNr">1426 </span>     <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1427" class="LineNr">1427 </span>    <span class="Delimiter">}</span>
 <span id="L1428" class="LineNr">1428 </span>    <span class="Delimiter">{</span>
 <span id="L1429" class="LineNr">1429 </span>      <span class="muControl">break-unless</span> at-bottom-of-screen?
@@ -1498,22 +1498,22 @@ if ('onhashchange' in window) {
 <span id="L1437" class="LineNr">1437 </span>    target-column:num <span class="Special">&lt;-</span> copy cursor-column
 <span id="L1438" class="LineNr">1438 </span>    <span class="Comment"># scan to start of next line</span>
 <span id="L1439" class="LineNr">1439 </span>    <span class="Delimiter">{</span>
-<span id="L1440" class="LineNr">1440 </span>      <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
-<span id="L1441" class="LineNr">1441 </span>      <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1440" class="LineNr">1440 </span>      <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
+<span id="L1441" class="LineNr">1441 </span>      <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1442" class="LineNr">1442 </span>      done?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, right
 <span id="L1443" class="LineNr">1443 </span>      <span class="muControl">break-if</span> done?
 <span id="L1444" class="LineNr">1444 </span>      cursor-column <span class="Special">&lt;-</span> add cursor-column,<span class="Constant"> 1</span>
-<span id="L1445" class="LineNr">1445 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1445" class="LineNr">1445 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1446" class="LineNr">1446 </span>      c:char <span class="Special">&lt;-</span> get *next, <span class="Constant">value:offset</span>
 <span id="L1447" class="LineNr">1447 </span>      at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
 <span id="L1448" class="LineNr">1448 </span>      <span class="muControl">break-if</span> at-newline?
 <span id="L1449" class="LineNr">1449 </span>     <span class="muControl"> loop</span>
 <span id="L1450" class="LineNr">1450 </span>    <span class="Delimiter">}</span>
 <span id="L1451" class="LineNr">1451 </span>    <span class="Delimiter">{</span>
-<span id="L1452" class="LineNr">1452 </span>      <span class="muControl">break-if</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1452" class="LineNr">1452 </span>      <span class="muControl">break-if</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1453" class="LineNr">1453 </span>      <span class="Delimiter">{</span>
 <span id="L1454" class="LineNr">1454 </span>        <span class="muControl">break-if</span> at-bottom-of-screen?
-<span id="L1455" class="LineNr">1455 </span>       <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1455" class="LineNr">1455 </span>       <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1456" class="LineNr">1456 </span>      <span class="Delimiter">}</span>
 <span id="L1457" class="LineNr">1457 </span>      <span class="Delimiter">{</span>
 <span id="L1458" class="LineNr">1458 </span>        <span class="muControl">break-unless</span> at-bottom-of-screen?
@@ -1523,25 +1523,25 @@ if ('onhashchange' in window) {
 <span id="L1462" class="LineNr">1462 </span>    cursor-row <span class="Special">&lt;-</span> add cursor-row,<span class="Constant"> 1</span>
 <span id="L1463" class="LineNr">1463 </span>    cursor-column <span class="Special">&lt;-</span> copy left
 <span id="L1464" class="LineNr">1464 </span>    <span class="Delimiter">{</span>
-<span id="L1465" class="LineNr">1465 </span>      <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
-<span id="L1466" class="LineNr">1466 </span>      <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1465" class="LineNr">1465 </span>      <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
+<span id="L1466" class="LineNr">1466 </span>      <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1467" class="LineNr">1467 </span>      c:char <span class="Special">&lt;-</span> get *next, <span class="Constant">value:offset</span>
 <span id="L1468" class="LineNr">1468 </span>      at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
 <span id="L1469" class="LineNr">1469 </span>      <span class="muControl">break-if</span> at-newline?
 <span id="L1470" class="LineNr">1470 </span>      done?:bool <span class="Special">&lt;-</span> greater-or-equal cursor-column, target-column
 <span id="L1471" class="LineNr">1471 </span>      <span class="muControl">break-if</span> done?
 <span id="L1472" class="LineNr">1472 </span>      cursor-column <span class="Special">&lt;-</span> add cursor-column,<span class="Constant"> 1</span>
-<span id="L1473" class="LineNr">1473 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1473" class="LineNr">1473 </span>      before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1474" class="LineNr">1474 </span>     <span class="muControl"> loop</span>
 <span id="L1475" class="LineNr">1475 </span>    <span class="Delimiter">}</span>
 <span id="L1476" class="LineNr">1476 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L1477" class="LineNr">1477 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
 <span id="L1478" class="LineNr">1478 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
-<span id="L1479" class="LineNr">1479 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1479" class="LineNr">1479 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1480" class="LineNr">1480 </span>  <span class="Delimiter">}</span>
 <span id="L1481" class="LineNr">1481 </span><span class="Constant">  +try-to-scroll</span>
 <span id="L1482" class="LineNr">1482 </span><span class="Constant">  &lt;scroll-down&gt;</span>
-<span id="L1483" class="LineNr">1483 </span>  go-render? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L1483" class="LineNr">1483 </span>  go-render? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L1484" class="LineNr">1484 </span>]
 <span id="L1485" class="LineNr">1485 </span>
 <span id="L1486" class="LineNr">1486 </span><span class="muScenario">scenario</span> editor-adjusts-column-at-next-line [
@@ -1650,7 +1650,7 @@ if ('onhashchange' in window) {
 <span id="L1589" class="LineNr">1589 </span>    <a href='003-shortcuts.mu.html#L1610'>move-to-start-of-screen-line</a> editor
 <span id="L1590" class="LineNr">1590 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
 <span id="L1591" class="LineNr">1591 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L1592" class="LineNr">1592 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1592" class="LineNr">1592 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1593" class="LineNr">1593 </span>  <span class="Delimiter">}</span>
 <span id="L1594" class="LineNr">1594 </span>]
 <span id="L1595" class="LineNr">1595 </span>
@@ -1662,7 +1662,7 @@ if ('onhashchange' in window) {
 <span id="L1601" class="LineNr">1601 </span>    <a href='003-shortcuts.mu.html#L1610'>move-to-start-of-screen-line</a> editor
 <span id="L1602" class="LineNr">1602 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
 <span id="L1603" class="LineNr">1603 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L1604" class="LineNr">1604 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1604" class="LineNr">1604 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1605" class="LineNr">1605 </span>  <span class="Delimiter">}</span>
 <span id="L1606" class="LineNr">1606 </span>]
 <span id="L1607" class="LineNr">1607 </span>
@@ -1681,7 +1681,7 @@ if ('onhashchange' in window) {
 <span id="L1620" class="LineNr">1620 </span>    done?:bool <span class="Special">&lt;-</span> equal col, left
 <span id="L1621" class="LineNr">1621 </span>    <span class="muControl">break-if</span> done?
 <span id="L1622" class="LineNr">1622 </span>    assert curr, <span class="Constant">[move-to-start-of-line tried to move before start of text]</span>
-<span id="L1623" class="LineNr">1623 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> curr
+<span id="L1623" class="LineNr">1623 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> curr
 <span id="L1624" class="LineNr">1624 </span>    col <span class="Special">&lt;-</span> subtract col,<span class="Constant"> 1</span>
 <span id="L1625" class="LineNr">1625 </span>   <span class="muControl"> loop</span>
 <span id="L1626" class="LineNr">1626 </span>  <span class="Delimiter">}</span>
@@ -1875,7 +1875,7 @@ if ('onhashchange' in window) {
 <span id="L1814" class="LineNr">1814 </span>    <a href='003-shortcuts.mu.html#L1833'>move-to-end-of-line</a> editor
 <span id="L1815" class="LineNr">1815 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
 <span id="L1816" class="LineNr">1816 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L1817" class="LineNr">1817 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1817" class="LineNr">1817 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1818" class="LineNr">1818 </span>  <span class="Delimiter">}</span>
 <span id="L1819" class="LineNr">1819 </span>]
 <span id="L1820" class="LineNr">1820 </span>
@@ -1887,7 +1887,7 @@ if ('onhashchange' in window) {
 <span id="L1826" class="LineNr">1826 </span>    <a href='003-shortcuts.mu.html#L1833'>move-to-end-of-line</a> editor
 <span id="L1827" class="LineNr">1827 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
 <span id="L1828" class="LineNr">1828 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L1829" class="LineNr">1829 </span>   <span class="muControl"> return</span> <span class="Constant">0/don't-render</span>
+<span id="L1829" class="LineNr">1829 </span>   <span class="muControl"> return</span><span class="Constant"> false/don't-render</span>
 <span id="L1830" class="LineNr">1830 </span>  <span class="Delimiter">}</span>
 <span id="L1831" class="LineNr">1831 </span>]
 <span id="L1832" class="LineNr">1832 </span>
@@ -1899,8 +1899,8 @@ if ('onhashchange' in window) {
 <span id="L1838" class="LineNr">1838 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L1839" class="LineNr">1839 </span>  <span class="Comment"># while not at end of line, move</span>
 <span id="L1840" class="LineNr">1840 </span>  <span class="Delimiter">{</span>
-<span id="L1841" class="LineNr">1841 </span>    <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
-<span id="L1842" class="LineNr">1842 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>  <span class="Comment"># end of text</span>
+<span id="L1841" class="LineNr">1841 </span>    <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
+<span id="L1842" class="LineNr">1842 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>  <span class="Comment"># end of text</span>
 <span id="L1843" class="LineNr">1843 </span>    nextc:char <span class="Special">&lt;-</span> get *next, <span class="Constant">value:offset</span>
 <span id="L1844" class="LineNr">1844 </span>    at-end-of-line?:bool <span class="Special">&lt;-</span> equal nextc, <span class="Constant">10/newline</span>
 <span id="L1845" class="LineNr">1845 </span>    <span class="muControl">break-if</span> at-end-of-line?
@@ -1908,7 +1908,7 @@ if ('onhashchange' in window) {
 <span id="L1847" class="LineNr">1847 </span>    at-right?:bool <span class="Special">&lt;-</span> equal cursor-column, right
 <span id="L1848" class="LineNr">1848 </span>    <span class="muControl">break-if</span> at-right?
 <span id="L1849" class="LineNr">1849 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L1850" class="LineNr">1850 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L1850" class="LineNr">1850 </span>    before-cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L31'>next</a>
 <span id="L1851" class="LineNr">1851 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
 <span id="L1852" class="LineNr">1852 </span>   <span class="muControl"> loop</span>
 <span id="L1853" class="LineNr">1853 </span>  <span class="Delimiter">}</span>
@@ -2086,8 +2086,8 @@ if ('onhashchange' in window) {
 <span id="L2025" class="LineNr">2025 </span>  <span class="Delimiter">{</span>
 <span id="L2026" class="LineNr">2026 </span>    <span class="Comment"># if we have a wrapped line, give up and render the whole screen</span>
 <span id="L2027" class="LineNr">2027 </span>    wrap?:bool <span class="Special">&lt;-</span> greater-or-equal i, right
-<span id="L2028" class="LineNr">2028 </span>    <span class="muControl">return-if</span> wrap?, <span class="Constant">1/go-render</span>
-<span id="L2029" class="LineNr">2029 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L2028" class="LineNr">2028 </span>    <span class="muControl">return-if</span> wrap?,<span class="Constant"> true/go-render</span>
+<span id="L2029" class="LineNr">2029 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L2030" class="LineNr">2030 </span>    <span class="muControl">break-unless</span> curr
 <span id="L2031" class="LineNr">2031 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
 <span id="L2032" class="LineNr">2032 </span>    b:bool <span class="Special">&lt;-</span> equal c,<span class="Constant"> 10</span>
@@ -2102,11 +2102,11 @@ if ('onhashchange' in window) {
 <span id="L2041" class="LineNr">2041 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
 <span id="L2042" class="LineNr">2042 </span>  end:num <span class="Special">&lt;-</span> subtract right, left
 <span id="L2043" class="LineNr">2043 </span>  wrap?:bool <span class="Special">&lt;-</span> greater-or-equal old-row-len, end
-<span id="L2044" class="LineNr">2044 </span>  <span class="muControl">return-if</span> wrap?, <span class="Constant">1/go-render</span>
+<span id="L2044" class="LineNr">2044 </span>  <span class="muControl">return-if</span> wrap?,<span class="Constant"> true/go-render</span>
 <span id="L2045" class="LineNr">2045 </span>  curr-line:text <span class="Special">&lt;-</span> <a href='../061text.mu.html#L338'>buffer-to-array</a> buf
 <span id="L2046" class="LineNr">2046 </span>  curr-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L2047" class="LineNr">2047 </span>  <a href='003-shortcuts.mu.html#L2107'>render-code</a> <a href='../081print.mu.html#L16'>screen</a>, curr-line, curr-column, right, curr-row
-<span id="L2048" class="LineNr">2048 </span> <span class="muControl"> return</span> <span class="Constant">0/dont-render</span>
+<span id="L2048" class="LineNr">2048 </span> <span class="muControl"> return</span><span class="Constant"> false/dont-render</span>
 <span id="L2049" class="LineNr">2049 </span>]
 <span id="L2050" class="LineNr">2050 </span>
 <span id="L2051" class="LineNr">2051 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2051'>delete-to-start-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor [
@@ -2115,10 +2115,10 @@ if ('onhashchange' in window) {
 <span id="L2054" class="LineNr">2054 </span>  <span class="Comment"># compute range to delete</span>
 <span id="L2055" class="LineNr">2055 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L2056" class="LineNr">2056 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L2057" class="LineNr">2057 </span>  update-top-of-screen?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L2057" class="LineNr">2057 </span>  update-top-of-screen?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L2058" class="LineNr">2058 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L2059" class="LineNr">2059 </span>  start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy before-cursor
-<span id="L2060" class="LineNr">2060 </span>  end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L2060" class="LineNr">2060 </span>  end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L2061" class="LineNr">2061 </span>  <span class="Delimiter">{</span>
 <span id="L2062" class="LineNr">2062 </span>    at-start-of-text?:bool <span class="Special">&lt;-</span> equal start, init
 <span id="L2063" class="LineNr">2063 </span>    <span class="muControl">break-if</span> at-start-of-text?
@@ -2128,13 +2128,13 @@ if ('onhashchange' in window) {
 <span id="L2067" class="LineNr">2067 </span>    <span class="Comment"># if we went past top-of-screen, make a note to update it as well</span>
 <span id="L2068" class="LineNr">2068 </span>    at-top-of-screen?:bool <span class="Special">&lt;-</span> equal start, top-of-screen
 <span id="L2069" class="LineNr">2069 </span>    update-top-of-screen?:bool <span class="Special">&lt;-</span> or update-top-of-screen?, at-top-of-screen?
-<span id="L2070" class="LineNr">2070 </span>    start <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> start
+<span id="L2070" class="LineNr">2070 </span>    start <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> start
 <span id="L2071" class="LineNr">2071 </span>    assert start, <span class="Constant">[delete-to-start-of-line tried to move before start of text]</span>
 <span id="L2072" class="LineNr">2072 </span>   <span class="muControl"> loop</span>
 <span id="L2073" class="LineNr">2073 </span>  <span class="Delimiter">}</span>
 <span id="L2074" class="LineNr">2074 </span>  <span class="Comment"># snip it out</span>
-<span id="L2075" class="LineNr">2075 </span>  result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> start
-<span id="L2076" class="LineNr">2076 </span>  <a href='../065duplex_list.mu.html#L385'>remove-between</a> start, end
+<span id="L2075" class="LineNr">2075 </span>  result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> start
+<span id="L2076" class="LineNr">2076 </span>  <a href='../065duplex_list.mu.html#L391'>remove-between</a> start, end
 <span id="L2077" class="LineNr">2077 </span>  <span class="Comment"># update top-of-screen if it's just been invalidated</span>
 <span id="L2078" class="LineNr">2078 </span>  <span class="Delimiter">{</span>
 <span id="L2079" class="LineNr">2079 </span>    <span class="muControl">break-unless</span> update-top-of-screen?
@@ -2656,7 +2656,7 @@ if ('onhashchange' in window) {
 <span id="L2595" class="LineNr">2595 </span>  <span class="Constant">local-scope</span>
 <span id="L2596" class="LineNr">2596 </span>  <span class="Constant">load-inputs</span>
 <span id="L2597" class="LineNr">2597 </span>  <span class="Comment"># if we deleted nothing, there's nothing to render</span>
-<span id="L2598" class="LineNr">2598 </span>  <span class="muControl">return-unless</span> deleted-cells, <span class="Constant">0/dont-render</span>
+<span id="L2598" class="LineNr">2598 </span>  <span class="muControl">return-unless</span> deleted-cells,<span class="Constant"> false/dont-render</span>
 <span id="L2599" class="LineNr">2599 </span>  <span class="Comment"># if the line used to wrap before, give up and render the whole screen</span>
 <span id="L2600" class="LineNr">2600 </span>  curr-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L2601" class="LineNr">2601 </span>  num-deleted-cells:num <span class="Special">&lt;-</span> length deleted-cells
@@ -2665,9 +2665,9 @@ if ('onhashchange' in window) {
 <span id="L2604" class="LineNr">2604 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L2605" class="LineNr">2605 </span>  end:num <span class="Special">&lt;-</span> subtract right, left
 <span id="L2606" class="LineNr">2606 </span>  wrap?:bool <span class="Special">&lt;-</span> greater-or-equal old-row-len, end
-<span id="L2607" class="LineNr">2607 </span>  <span class="muControl">return-if</span> wrap?, <span class="Constant">1/go-render</span>
+<span id="L2607" class="LineNr">2607 </span>  <span class="muControl">return-if</span> wrap?,<span class="Constant"> true/go-render</span>
 <span id="L2608" class="LineNr">2608 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L2609" class="LineNr">2609 </span> <span class="muControl"> return</span> <span class="Constant">0/dont-render</span>
+<span id="L2609" class="LineNr">2609 </span> <span class="muControl"> return</span><span class="Constant"> false/dont-render</span>
 <span id="L2610" class="LineNr">2610 </span>]
 <span id="L2611" class="LineNr">2611 </span>
 <span id="L2612" class="LineNr">2612 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2612'>delete-to-end-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, editor:&amp;:editor [
@@ -2675,19 +2675,19 @@ if ('onhashchange' in window) {
 <span id="L2614" class="LineNr">2614 </span>  <span class="Constant">load-inputs</span>
 <span id="L2615" class="LineNr">2615 </span>  <span class="Comment"># compute range to delete</span>
 <span id="L2616" class="LineNr">2616 </span>  start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L2617" class="LineNr">2617 </span>  end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> start
+<span id="L2617" class="LineNr">2617 </span>  end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> start
 <span id="L2618" class="LineNr">2618 </span>  <span class="Delimiter">{</span>
-<span id="L2619" class="LineNr">2619 </span>    at-end-of-text?:bool <span class="Special">&lt;-</span> equal end, <span class="Constant">0/null</span>
+<span id="L2619" class="LineNr">2619 </span>    at-end-of-text?:bool <span class="Special">&lt;-</span> equal end,<span class="Constant"> null</span>
 <span id="L2620" class="LineNr">2620 </span>    <span class="muControl">break-if</span> at-end-of-text?
 <span id="L2621" class="LineNr">2621 </span>    curr:char <span class="Special">&lt;-</span> get *end, <span class="Constant">value:offset</span>
 <span id="L2622" class="LineNr">2622 </span>    at-end-of-line?:bool <span class="Special">&lt;-</span> equal curr, <span class="Constant">10/newline</span>
 <span id="L2623" class="LineNr">2623 </span>    <span class="muControl">break-if</span> at-end-of-line?
-<span id="L2624" class="LineNr">2624 </span>    end <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> end
+<span id="L2624" class="LineNr">2624 </span>    end <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> end
 <span id="L2625" class="LineNr">2625 </span>   <span class="muControl"> loop</span>
 <span id="L2626" class="LineNr">2626 </span>  <span class="Delimiter">}</span>
 <span id="L2627" class="LineNr">2627 </span>  <span class="Comment"># snip it out</span>
-<span id="L2628" class="LineNr">2628 </span>  result <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> start
-<span id="L2629" class="LineNr">2629 </span>  <a href='../065duplex_list.mu.html#L385'>remove-between</a> start, end
+<span id="L2628" class="LineNr">2628 </span>  result <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> start
+<span id="L2629" class="LineNr">2629 </span>  <a href='../065duplex_list.mu.html#L391'>remove-between</a> start, end
 <span id="L2630" class="LineNr">2630 </span>]
 <span id="L2631" class="LineNr">2631 </span>
 <span id="L2632" class="LineNr">2632 </span><span class="muScenario">scenario</span> editor-deletes-to-end-of-line-with-ctrl-k-2 [
@@ -2897,1617 +2897,1630 @@ if ('onhashchange' in window) {
 <span id="L2836" class="LineNr">2836 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L2837" class="LineNr">2837 </span>  max:num <span class="Special">&lt;-</span> subtract right, left
 <span id="L2838" class="LineNr">2838 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy top-of-screen
-<span id="L2839" class="LineNr">2839 </span>  top-of-screen <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L2849'>before-start-of-next-line</a> top-of-screen, max
+<span id="L2839" class="LineNr">2839 </span>  top-of-screen <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L2862'>before-start-of-next-line</a> top-of-screen, max
 <span id="L2840" class="LineNr">2840 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
 <span id="L2841" class="LineNr">2841 </span>  no-movement?:bool <span class="Special">&lt;-</span> equal old-top, top-of-screen
-<span id="L2842" class="LineNr">2842 </span>  <span class="muControl">return-if</span> no-movement?, <span class="Constant">0/don't-render</span>
+<span id="L2842" class="LineNr">2842 </span>  <span class="muControl">return-if</span> no-movement?,<span class="Constant"> false/don't-render</span>
 <span id="L2843" class="LineNr">2843 </span>]
 <span id="L2844" class="LineNr">2844 </span>
-<span id="L2845" class="LineNr">2845 </span><span class="Comment"># Takes a pointer into the doubly-linked list, scans ahead at most 'max'</span>
-<span id="L2846" class="LineNr">2846 </span><span class="Comment"># positions until the next newline.</span>
-<span id="L2847" class="LineNr">2847 </span><span class="Comment"># Returns original if no next newline.</span>
-<span id="L2848" class="LineNr">2848 </span><span class="Comment"># Beware: never return null pointer.</span>
-<span id="L2849" class="LineNr">2849 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2849'>before-start-of-next-line</a> original:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, max:num<span class="muRecipe"> -&gt; </span>curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
-<span id="L2850" class="LineNr">2850 </span>  <span class="Constant">local-scope</span>
-<span id="L2851" class="LineNr">2851 </span>  <span class="Constant">load-inputs</span>
-<span id="L2852" class="LineNr">2852 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L2853" class="LineNr">2853 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy original
-<span id="L2854" class="LineNr">2854 </span>  <span class="Comment"># skip the initial newline if it exists</span>
-<span id="L2855" class="LineNr">2855 </span>  <span class="Delimiter">{</span>
-<span id="L2856" class="LineNr">2856 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
-<span id="L2857" class="LineNr">2857 </span>    at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L2858" class="LineNr">2858 </span>    <span class="muControl">break-unless</span> at-newline?
-<span id="L2859" class="LineNr">2859 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L2860" class="LineNr">2860 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
-<span id="L2861" class="LineNr">2861 </span>  <span class="Delimiter">}</span>
-<span id="L2862" class="LineNr">2862 </span>  <span class="Delimiter">{</span>
-<span id="L2863" class="LineNr">2863 </span>    <span class="muControl">return-unless</span> curr, original
-<span id="L2864" class="LineNr">2864 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal count, max
-<span id="L2865" class="LineNr">2865 </span>    <span class="muControl">break-if</span> done?
-<span id="L2866" class="LineNr">2866 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
-<span id="L2867" class="LineNr">2867 </span>    at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L2868" class="LineNr">2868 </span>    <span class="muControl">break-if</span> at-newline?
-<span id="L2869" class="LineNr">2869 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L2870" class="LineNr">2870 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
-<span id="L2871" class="LineNr">2871 </span>   <span class="muControl"> loop</span>
-<span id="L2872" class="LineNr">2872 </span>  <span class="Delimiter">}</span>
-<span id="L2873" class="LineNr">2873 </span>  <span class="muControl">return-unless</span> curr, original
-<span id="L2874" class="LineNr">2874 </span> <span class="muControl"> return</span> curr
-<span id="L2875" class="LineNr">2875 </span>]
-<span id="L2876" class="LineNr">2876 </span>
-<span id="L2877" class="LineNr">2877 </span><span class="muScenario">scenario</span> editor-scrolls-down-past-wrapped-line-using-arrow-keys [
-<span id="L2878" class="LineNr">2878 </span>  <span class="Constant">local-scope</span>
-<span id="L2879" class="LineNr">2879 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L2880" class="LineNr">2880 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L2881" class="LineNr">2881 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
-<span id="L2882" class="LineNr">2882 </span>  <span class="Comment"># other lines</span>
-<span id="L2883" class="LineNr">2883 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
-<span id="L2884" class="LineNr">2884 </span><span class="Constant">g</span>
-<span id="L2885" class="LineNr">2885 </span><span class="Constant">h</span>
-<span id="L2886" class="LineNr">2886 </span><span class="Constant">i]</span>
-<span id="L2887" class="LineNr">2887 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L2888" class="LineNr">2888 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L2889" class="LineNr">2889 </span>  screen-should-contain [
-<span id="L2890" class="LineNr">2890 </span>   <span class="Constant"> .          .</span>
-<span id="L2891" class="LineNr">2891 </span>   <span class="Constant"> .abcd↩     .</span>
-<span id="L2892" class="LineNr">2892 </span>   <span class="Constant"> .ef        .</span>
-<span id="L2893" class="LineNr">2893 </span>   <span class="Constant"> .g         .</span>
-<span id="L2894" class="LineNr">2894 </span>  ]
-<span id="L2895" class="LineNr">2895 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
-<span id="L2896" class="LineNr">2896 </span>  assume-console [
-<span id="L2897" class="LineNr">2897 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L2898" class="LineNr">2898 </span>    press down-arrow
-<span id="L2899" class="LineNr">2899 </span>  ]
-<span id="L2900" class="LineNr">2900 </span>  run [
-<span id="L2901" class="LineNr">2901 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L2902" class="LineNr">2902 </span>  ]
-<span id="L2903" class="LineNr">2903 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L2904" class="LineNr">2904 </span>  screen-should-contain [
-<span id="L2905" class="LineNr">2905 </span>   <span class="Constant"> .          .</span>
-<span id="L2906" class="LineNr">2906 </span>   <span class="Constant"> .ef        .</span>
-<span id="L2907" class="LineNr">2907 </span>   <span class="Constant"> .g         .</span>
-<span id="L2908" class="LineNr">2908 </span>   <span class="Constant"> .h         .</span>
-<span id="L2909" class="LineNr">2909 </span>  ]
-<span id="L2910" class="LineNr">2910 </span>]
-<span id="L2911" class="LineNr">2911 </span>
-<span id="L2912" class="LineNr">2912 </span><span class="muScenario">scenario</span> editor-scrolls-down-past-wrapped-line-using-arrow-keys-2 [
-<span id="L2913" class="LineNr">2913 </span>  <span class="Constant">local-scope</span>
-<span id="L2914" class="LineNr">2914 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L2915" class="LineNr">2915 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L2916" class="LineNr">2916 </span>  <span class="Comment"># editor starts with a long line wrapping twice</span>
-<span id="L2917" class="LineNr">2917 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdefghij</span>
-<span id="L2918" class="LineNr">2918 </span><span class="Constant">k</span>
-<span id="L2919" class="LineNr">2919 </span><span class="Constant">l</span>
-<span id="L2920" class="LineNr">2920 </span><span class="Constant">m]</span>
-<span id="L2921" class="LineNr">2921 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L2922" class="LineNr">2922 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
-<span id="L2923" class="LineNr">2923 </span>  assume-console [
-<span id="L2924" class="LineNr">2924 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L2925" class="LineNr">2925 </span>    press down-arrow
-<span id="L2926" class="LineNr">2926 </span>  ]
-<span id="L2927" class="LineNr">2927 </span>  run [
-<span id="L2928" class="LineNr">2928 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L2929" class="LineNr">2929 </span>  ]
-<span id="L2930" class="LineNr">2930 </span>  <span class="Comment"># screen shows partial wrapped line containing a wrap icon</span>
-<span id="L2931" class="LineNr">2931 </span>  screen-should-contain [
-<span id="L2932" class="LineNr">2932 </span>   <span class="Constant"> .          .</span>
-<span id="L2933" class="LineNr">2933 </span>   <span class="Constant"> .efgh↩     .</span>
-<span id="L2934" class="LineNr">2934 </span>   <span class="Constant"> .ij        .</span>
-<span id="L2935" class="LineNr">2935 </span>   <span class="Constant"> .k         .</span>
-<span id="L2936" class="LineNr">2936 </span>  ]
-<span id="L2937" class="LineNr">2937 </span>  <span class="Comment"># scroll down again</span>
-<span id="L2938" class="LineNr">2938 </span>  assume-console [
-<span id="L2939" class="LineNr">2939 </span>    press down-arrow
-<span id="L2940" class="LineNr">2940 </span>  ]
-<span id="L2941" class="LineNr">2941 </span>  run [
-<span id="L2942" class="LineNr">2942 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L2943" class="LineNr">2943 </span>  ]
-<span id="L2944" class="LineNr">2944 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L2945" class="LineNr">2945 </span>  screen-should-contain [
-<span id="L2946" class="LineNr">2946 </span>   <span class="Constant"> .          .</span>
+<span id="L2845" class="LineNr">2845 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L888'>&lt;scroll-down2&gt;</a></span> [
+<span id="L2846" class="LineNr">2846 </span>  trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[scroll down]</span>
+<span id="L2847" class="LineNr">2847 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L2848" class="LineNr">2848 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
+<span id="L2849" class="LineNr">2849 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
+<span id="L2850" class="LineNr">2850 </span>  max:num <span class="Special">&lt;-</span> subtract right, left
+<span id="L2851" class="LineNr">2851 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy top-of-screen
+<span id="L2852" class="LineNr">2852 </span>  top-of-screen <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L2862'>before-start-of-next-line</a> top-of-screen, max
+<span id="L2853" class="LineNr">2853 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
+<span id="L2854" class="LineNr">2854 </span>  no-movement?:bool <span class="Special">&lt;-</span> equal old-top, top-of-screen
+<span id="L2855" class="LineNr">2855 </span>  <span class="muControl">return-if</span> no-movement?
+<span id="L2856" class="LineNr">2856 </span>]
+<span id="L2857" class="LineNr">2857 </span>
+<span id="L2858" class="LineNr">2858 </span><span class="Comment"># Takes a pointer into the doubly-linked list, scans ahead at most 'max'</span>
+<span id="L2859" class="LineNr">2859 </span><span class="Comment"># positions until the next newline.</span>
+<span id="L2860" class="LineNr">2860 </span><span class="Comment"># Returns original if no next newline.</span>
+<span id="L2861" class="LineNr">2861 </span><span class="Comment"># Beware: never return null pointer.</span>
+<span id="L2862" class="LineNr">2862 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L2862'>before-start-of-next-line</a> original:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char, max:num<span class="muRecipe"> -&gt; </span>curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
+<span id="L2863" class="LineNr">2863 </span>  <span class="Constant">local-scope</span>
+<span id="L2864" class="LineNr">2864 </span>  <span class="Constant">load-inputs</span>
+<span id="L2865" class="LineNr">2865 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L2866" class="LineNr">2866 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy original
+<span id="L2867" class="LineNr">2867 </span>  <span class="Comment"># skip the initial newline if it exists</span>
+<span id="L2868" class="LineNr">2868 </span>  <span class="Delimiter">{</span>
+<span id="L2869" class="LineNr">2869 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
+<span id="L2870" class="LineNr">2870 </span>    at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L2871" class="LineNr">2871 </span>    <span class="muControl">break-unless</span> at-newline?
+<span id="L2872" class="LineNr">2872 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L2873" class="LineNr">2873 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
+<span id="L2874" class="LineNr">2874 </span>  <span class="Delimiter">}</span>
+<span id="L2875" class="LineNr">2875 </span>  <span class="Delimiter">{</span>
+<span id="L2876" class="LineNr">2876 </span>    <span class="muControl">return-unless</span> curr, original
+<span id="L2877" class="LineNr">2877 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal count, max
+<span id="L2878" class="LineNr">2878 </span>    <span class="muControl">break-if</span> done?
+<span id="L2879" class="LineNr">2879 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
+<span id="L2880" class="LineNr">2880 </span>    at-newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L2881" class="LineNr">2881 </span>    <span class="muControl">break-if</span> at-newline?
+<span id="L2882" class="LineNr">2882 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L2883" class="LineNr">2883 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
+<span id="L2884" class="LineNr">2884 </span>   <span class="muControl"> loop</span>
+<span id="L2885" class="LineNr">2885 </span>  <span class="Delimiter">}</span>
+<span id="L2886" class="LineNr">2886 </span>  <span class="muControl">return-unless</span> curr, original
+<span id="L2887" class="LineNr">2887 </span> <span class="muControl"> return</span> curr
+<span id="L2888" class="LineNr">2888 </span>]
+<span id="L2889" class="LineNr">2889 </span>
+<span id="L2890" class="LineNr">2890 </span><span class="muScenario">scenario</span> editor-scrolls-down-past-wrapped-line-using-arrow-keys [
+<span id="L2891" class="LineNr">2891 </span>  <span class="Constant">local-scope</span>
+<span id="L2892" class="LineNr">2892 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L2893" class="LineNr">2893 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L2894" class="LineNr">2894 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
+<span id="L2895" class="LineNr">2895 </span>  <span class="Comment"># other lines</span>
+<span id="L2896" class="LineNr">2896 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
+<span id="L2897" class="LineNr">2897 </span><span class="Constant">g</span>
+<span id="L2898" class="LineNr">2898 </span><span class="Constant">h</span>
+<span id="L2899" class="LineNr">2899 </span><span class="Constant">i]</span>
+<span id="L2900" class="LineNr">2900 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L2901" class="LineNr">2901 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L2902" class="LineNr">2902 </span>  screen-should-contain [
+<span id="L2903" class="LineNr">2903 </span>   <span class="Constant"> .          .</span>
+<span id="L2904" class="LineNr">2904 </span>   <span class="Constant"> .abcd↩     .</span>
+<span id="L2905" class="LineNr">2905 </span>   <span class="Constant"> .ef        .</span>
+<span id="L2906" class="LineNr">2906 </span>   <span class="Constant"> .g         .</span>
+<span id="L2907" class="LineNr">2907 </span>  ]
+<span id="L2908" class="LineNr">2908 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
+<span id="L2909" class="LineNr">2909 </span>  assume-console [
+<span id="L2910" class="LineNr">2910 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L2911" class="LineNr">2911 </span>    press down-arrow
+<span id="L2912" class="LineNr">2912 </span>  ]
+<span id="L2913" class="LineNr">2913 </span>  run [
+<span id="L2914" class="LineNr">2914 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L2915" class="LineNr">2915 </span>  ]
+<span id="L2916" class="LineNr">2916 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L2917" class="LineNr">2917 </span>  screen-should-contain [
+<span id="L2918" class="LineNr">2918 </span>   <span class="Constant"> .          .</span>
+<span id="L2919" class="LineNr">2919 </span>   <span class="Constant"> .ef        .</span>
+<span id="L2920" class="LineNr">2920 </span>   <span class="Constant"> .g         .</span>
+<span id="L2921" class="LineNr">2921 </span>   <span class="Constant"> .h         .</span>
+<span id="L2922" class="LineNr">2922 </span>  ]
+<span id="L2923" class="LineNr">2923 </span>]
+<span id="L2924" class="LineNr">2924 </span>
+<span id="L2925" class="LineNr">2925 </span><span class="muScenario">scenario</span> editor-scrolls-down-past-wrapped-line-using-arrow-keys-2 [
+<span id="L2926" class="LineNr">2926 </span>  <span class="Constant">local-scope</span>
+<span id="L2927" class="LineNr">2927 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L2928" class="LineNr">2928 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L2929" class="LineNr">2929 </span>  <span class="Comment"># editor starts with a long line wrapping twice</span>
+<span id="L2930" class="LineNr">2930 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdefghij</span>
+<span id="L2931" class="LineNr">2931 </span><span class="Constant">k</span>
+<span id="L2932" class="LineNr">2932 </span><span class="Constant">l</span>
+<span id="L2933" class="LineNr">2933 </span><span class="Constant">m]</span>
+<span id="L2934" class="LineNr">2934 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L2935" class="LineNr">2935 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
+<span id="L2936" class="LineNr">2936 </span>  assume-console [
+<span id="L2937" class="LineNr">2937 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L2938" class="LineNr">2938 </span>    press down-arrow
+<span id="L2939" class="LineNr">2939 </span>  ]
+<span id="L2940" class="LineNr">2940 </span>  run [
+<span id="L2941" class="LineNr">2941 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L2942" class="LineNr">2942 </span>  ]
+<span id="L2943" class="LineNr">2943 </span>  <span class="Comment"># screen shows partial wrapped line containing a wrap icon</span>
+<span id="L2944" class="LineNr">2944 </span>  screen-should-contain [
+<span id="L2945" class="LineNr">2945 </span>   <span class="Constant"> .          .</span>
+<span id="L2946" class="LineNr">2946 </span>   <span class="Constant"> .efgh↩     .</span>
 <span id="L2947" class="LineNr">2947 </span>   <span class="Constant"> .ij        .</span>
 <span id="L2948" class="LineNr">2948 </span>   <span class="Constant"> .k         .</span>
-<span id="L2949" class="LineNr">2949 </span>   <span class="Constant"> .l         .</span>
-<span id="L2950" class="LineNr">2950 </span>  ]
-<span id="L2951" class="LineNr">2951 </span>]
-<span id="L2952" class="LineNr">2952 </span>
-<span id="L2953" class="LineNr">2953 </span><span class="muScenario">scenario</span> editor-scrolls-down-when-line-wraps [
-<span id="L2954" class="LineNr">2954 </span>  <span class="Constant">local-scope</span>
-<span id="L2955" class="LineNr">2955 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L2956" class="LineNr">2956 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
-<span id="L2957" class="LineNr">2957 </span>  <span class="Comment"># editor contains a long line in the third line</span>
-<span id="L2958" class="LineNr">2958 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L2959" class="LineNr">2959 </span><span class="Constant">b</span>
-<span id="L2960" class="LineNr">2960 </span><span class="Constant">cdef]</span>
-<span id="L2961" class="LineNr">2961 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L2962" class="LineNr">2962 </span>  <span class="Comment"># position cursor at end, type a character</span>
-<span id="L2963" class="LineNr">2963 </span>  assume-console [
-<span id="L2964" class="LineNr">2964 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 4</span>
-<span id="L2965" class="LineNr">2965 </span>    type <span class="Constant">[g]</span>
-<span id="L2966" class="LineNr">2966 </span>  ]
-<span id="L2967" class="LineNr">2967 </span>  run [
-<span id="L2968" class="LineNr">2968 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L2969" class="LineNr">2969 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L2970" class="LineNr">2970 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L2971" class="LineNr">2971 </span>  ]
-<span id="L2972" class="LineNr">2972 </span>  <span class="Comment"># screen scrolls</span>
-<span id="L2973" class="LineNr">2973 </span>  screen-should-contain [
-<span id="L2974" class="LineNr">2974 </span>   <span class="Constant"> .     .</span>
-<span id="L2975" class="LineNr">2975 </span>   <span class="Constant"> .b    .</span>
-<span id="L2976" class="LineNr">2976 </span><span class="Constant">    .cdef↩.</span>
-<span id="L2977" class="LineNr">2977 </span>   <span class="Constant"> .g    .</span>
-<span id="L2978" class="LineNr">2978 </span>  ]
-<span id="L2979" class="LineNr">2979 </span>  memory-should-contain [
-<span id="L2980" class="LineNr">2980 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L2981" class="LineNr">2981 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L2982" class="LineNr">2982 </span>  ]
-<span id="L2983" class="LineNr">2983 </span>]
-<span id="L2984" class="LineNr">2984 </span>
-<span id="L2985" class="LineNr">2985 </span><span class="muScenario">scenario</span> editor-stops-scrolling-once-bottom-is-visible [
-<span id="L2986" class="LineNr">2986 </span>  <span class="Constant">local-scope</span>
-<span id="L2987" class="LineNr">2987 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L2988" class="LineNr">2988 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L2989" class="LineNr">2989 </span>  <span class="Comment"># initialize editor with 2 lines</span>
-<span id="L2990" class="LineNr">2990 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L2991" class="LineNr">2991 </span><span class="Constant">b]</span>
-<span id="L2992" class="LineNr">2992 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L2993" class="LineNr">2993 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L2994" class="LineNr">2994 </span>  screen-should-contain [
-<span id="L2995" class="LineNr">2995 </span>   <span class="Constant"> .          .</span>
-<span id="L2996" class="LineNr">2996 </span>   <span class="Constant"> .a         .</span>
-<span id="L2997" class="LineNr">2997 </span>   <span class="Constant"> .b         .</span>
-<span id="L2998" class="LineNr">2998 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L2999" class="LineNr">2999 </span>  ]
-<span id="L3000" class="LineNr">3000 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
-<span id="L3001" class="LineNr">3001 </span>  assume-console [
-<span id="L3002" class="LineNr">3002 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L3003" class="LineNr">3003 </span>    press down-arrow
-<span id="L3004" class="LineNr">3004 </span>  ]
-<span id="L3005" class="LineNr">3005 </span>  run [
-<span id="L3006" class="LineNr">3006 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3007" class="LineNr">3007 </span>  ]
-<span id="L3008" class="LineNr">3008 </span>  <span class="Comment"># no change since the bottom border was already visible</span>
-<span id="L3009" class="LineNr">3009 </span>  screen-should-contain [
-<span id="L3010" class="LineNr">3010 </span>   <span class="Constant"> .          .</span>
-<span id="L3011" class="LineNr">3011 </span>   <span class="Constant"> .a         .</span>
-<span id="L3012" class="LineNr">3012 </span>   <span class="Constant"> .b         .</span>
-<span id="L3013" class="LineNr">3013 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L3014" class="LineNr">3014 </span>  ]
-<span id="L3015" class="LineNr">3015 </span>]
-<span id="L3016" class="LineNr">3016 </span>
-<span id="L3017" class="LineNr">3017 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-newline [
-<span id="L3018" class="LineNr">3018 </span>  <span class="Constant">local-scope</span>
-<span id="L3019" class="LineNr">3019 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
-<span id="L3020" class="LineNr">3020 </span>  <span class="Comment"># position cursor after last line and type newline</span>
-<span id="L3021" class="LineNr">3021 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3022" class="LineNr">3022 </span><span class="Constant">b</span>
-<span id="L3023" class="LineNr">3023 </span><span class="Constant">c]</span>
-<span id="L3024" class="LineNr">3024 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3025" class="LineNr">3025 </span>  assume-console [
-<span id="L3026" class="LineNr">3026 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 4</span>
-<span id="L3027" class="LineNr">3027 </span>    type [
+<span id="L2949" class="LineNr">2949 </span>  ]
+<span id="L2950" class="LineNr">2950 </span>  <span class="Comment"># scroll down again</span>
+<span id="L2951" class="LineNr">2951 </span>  assume-console [
+<span id="L2952" class="LineNr">2952 </span>    press down-arrow
+<span id="L2953" class="LineNr">2953 </span>  ]
+<span id="L2954" class="LineNr">2954 </span>  run [
+<span id="L2955" class="LineNr">2955 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L2956" class="LineNr">2956 </span>  ]
+<span id="L2957" class="LineNr">2957 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L2958" class="LineNr">2958 </span>  screen-should-contain [
+<span id="L2959" class="LineNr">2959 </span>   <span class="Constant"> .          .</span>
+<span id="L2960" class="LineNr">2960 </span>   <span class="Constant"> .ij        .</span>
+<span id="L2961" class="LineNr">2961 </span>   <span class="Constant"> .k         .</span>
+<span id="L2962" class="LineNr">2962 </span>   <span class="Constant"> .l         .</span>
+<span id="L2963" class="LineNr">2963 </span>  ]
+<span id="L2964" class="LineNr">2964 </span>]
+<span id="L2965" class="LineNr">2965 </span>
+<span id="L2966" class="LineNr">2966 </span><span class="muScenario">scenario</span> editor-scrolls-down-when-line-wraps [
+<span id="L2967" class="LineNr">2967 </span>  <span class="Constant">local-scope</span>
+<span id="L2968" class="LineNr">2968 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L2969" class="LineNr">2969 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
+<span id="L2970" class="LineNr">2970 </span>  <span class="Comment"># editor contains a long line in the third line</span>
+<span id="L2971" class="LineNr">2971 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L2972" class="LineNr">2972 </span><span class="Constant">b</span>
+<span id="L2973" class="LineNr">2973 </span><span class="Constant">cdef]</span>
+<span id="L2974" class="LineNr">2974 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L2975" class="LineNr">2975 </span>  <span class="Comment"># position cursor at end, type a character</span>
+<span id="L2976" class="LineNr">2976 </span>  assume-console [
+<span id="L2977" class="LineNr">2977 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 4</span>
+<span id="L2978" class="LineNr">2978 </span>    type <span class="Constant">[g]</span>
+<span id="L2979" class="LineNr">2979 </span>  ]
+<span id="L2980" class="LineNr">2980 </span>  run [
+<span id="L2981" class="LineNr">2981 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L2982" class="LineNr">2982 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L2983" class="LineNr">2983 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L2984" class="LineNr">2984 </span>  ]
+<span id="L2985" class="LineNr">2985 </span>  <span class="Comment"># screen scrolls</span>
+<span id="L2986" class="LineNr">2986 </span>  screen-should-contain [
+<span id="L2987" class="LineNr">2987 </span>   <span class="Constant"> .     .</span>
+<span id="L2988" class="LineNr">2988 </span>   <span class="Constant"> .b    .</span>
+<span id="L2989" class="LineNr">2989 </span><span class="Constant">    .cdef↩.</span>
+<span id="L2990" class="LineNr">2990 </span>   <span class="Constant"> .g    .</span>
+<span id="L2991" class="LineNr">2991 </span>  ]
+<span id="L2992" class="LineNr">2992 </span>  memory-should-contain [
+<span id="L2993" class="LineNr">2993 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L2994" class="LineNr">2994 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L2995" class="LineNr">2995 </span>  ]
+<span id="L2996" class="LineNr">2996 </span>]
+<span id="L2997" class="LineNr">2997 </span>
+<span id="L2998" class="LineNr">2998 </span><span class="muScenario">scenario</span> editor-stops-scrolling-once-bottom-is-visible [
+<span id="L2999" class="LineNr">2999 </span>  <span class="Constant">local-scope</span>
+<span id="L3000" class="LineNr">3000 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3001" class="LineNr">3001 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3002" class="LineNr">3002 </span>  <span class="Comment"># initialize editor with 2 lines</span>
+<span id="L3003" class="LineNr">3003 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3004" class="LineNr">3004 </span><span class="Constant">b]</span>
+<span id="L3005" class="LineNr">3005 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3006" class="LineNr">3006 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3007" class="LineNr">3007 </span>  screen-should-contain [
+<span id="L3008" class="LineNr">3008 </span>   <span class="Constant"> .          .</span>
+<span id="L3009" class="LineNr">3009 </span>   <span class="Constant"> .a         .</span>
+<span id="L3010" class="LineNr">3010 </span>   <span class="Constant"> .b         .</span>
+<span id="L3011" class="LineNr">3011 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3012" class="LineNr">3012 </span>  ]
+<span id="L3013" class="LineNr">3013 </span>  <span class="Comment"># position cursor at last line, then try to move further down</span>
+<span id="L3014" class="LineNr">3014 </span>  assume-console [
+<span id="L3015" class="LineNr">3015 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L3016" class="LineNr">3016 </span>    press down-arrow
+<span id="L3017" class="LineNr">3017 </span>  ]
+<span id="L3018" class="LineNr">3018 </span>  run [
+<span id="L3019" class="LineNr">3019 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3020" class="LineNr">3020 </span>  ]
+<span id="L3021" class="LineNr">3021 </span>  <span class="Comment"># no change since the bottom border was already visible</span>
+<span id="L3022" class="LineNr">3022 </span>  screen-should-contain [
+<span id="L3023" class="LineNr">3023 </span>   <span class="Constant"> .          .</span>
+<span id="L3024" class="LineNr">3024 </span>   <span class="Constant"> .a         .</span>
+<span id="L3025" class="LineNr">3025 </span>   <span class="Constant"> .b         .</span>
+<span id="L3026" class="LineNr">3026 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3027" class="LineNr">3027 </span>  ]
 <span id="L3028" class="LineNr">3028 </span>]
-<span id="L3029" class="LineNr">3029 </span>  ]
-<span id="L3030" class="LineNr">3030 </span>  run [
-<span id="L3031" class="LineNr">3031 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3032" class="LineNr">3032 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L3033" class="LineNr">3033 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L3034" class="LineNr">3034 </span>  ]
-<span id="L3035" class="LineNr">3035 </span>  <span class="Comment"># screen scrolls</span>
-<span id="L3036" class="LineNr">3036 </span>  screen-should-contain [
-<span id="L3037" class="LineNr">3037 </span>   <span class="Constant"> .     .</span>
-<span id="L3038" class="LineNr">3038 </span>   <span class="Constant"> .b    .</span>
-<span id="L3039" class="LineNr">3039 </span>   <span class="Constant"> .c    .</span>
-<span id="L3040" class="LineNr">3040 </span>   <span class="Constant"> .     .</span>
-<span id="L3041" class="LineNr">3041 </span>  ]
-<span id="L3042" class="LineNr">3042 </span>  memory-should-contain [
-<span id="L3043" class="LineNr">3043 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L3044" class="LineNr">3044 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L3045" class="LineNr">3045 </span>  ]
-<span id="L3046" class="LineNr">3046 </span>]
-<span id="L3047" class="LineNr">3047 </span>
-<span id="L3048" class="LineNr">3048 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-right-arrow [
-<span id="L3049" class="LineNr">3049 </span>  <span class="Constant">local-scope</span>
-<span id="L3050" class="LineNr">3050 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3051" class="LineNr">3051 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
-<span id="L3052" class="LineNr">3052 </span>  <span class="Comment"># editor contains a wrapped line</span>
-<span id="L3053" class="LineNr">3053 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3054" class="LineNr">3054 </span><span class="Constant">b</span>
-<span id="L3055" class="LineNr">3055 </span><span class="Constant">cdefgh]</span>
-<span id="L3056" class="LineNr">3056 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3057" class="LineNr">3057 </span>  <span class="Comment"># position cursor at end of screen and try to move right</span>
-<span id="L3058" class="LineNr">3058 </span>  assume-console [
-<span id="L3059" class="LineNr">3059 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 3</span>
-<span id="L3060" class="LineNr">3060 </span>    press right-arrow
-<span id="L3061" class="LineNr">3061 </span>  ]
-<span id="L3062" class="LineNr">3062 </span>  run [
-<span id="L3063" class="LineNr">3063 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3064" class="LineNr">3064 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L3065" class="LineNr">3065 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L3066" class="LineNr">3066 </span>  ]
-<span id="L3067" class="LineNr">3067 </span>  <span class="Comment"># screen scrolls</span>
-<span id="L3068" class="LineNr">3068 </span>  screen-should-contain [
-<span id="L3069" class="LineNr">3069 </span>   <span class="Constant"> .     .</span>
-<span id="L3070" class="LineNr">3070 </span>   <span class="Constant"> .b    .</span>
-<span id="L3071" class="LineNr">3071 </span><span class="Constant">    .cdef↩.</span>
-<span id="L3072" class="LineNr">3072 </span>   <span class="Constant"> .gh   .</span>
-<span id="L3073" class="LineNr">3073 </span>  ]
-<span id="L3074" class="LineNr">3074 </span>  memory-should-contain [
-<span id="L3075" class="LineNr">3075 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L3076" class="LineNr">3076 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L3077" class="LineNr">3077 </span>  ]
-<span id="L3078" class="LineNr">3078 </span>]
-<span id="L3079" class="LineNr">3079 </span>
-<span id="L3080" class="LineNr">3080 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-right-arrow-2 [
-<span id="L3081" class="LineNr">3081 </span>  <span class="Constant">local-scope</span>
-<span id="L3082" class="LineNr">3082 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3083" class="LineNr">3083 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
-<span id="L3084" class="LineNr">3084 </span>  <span class="Comment"># editor contains more lines than can fit on screen</span>
-<span id="L3085" class="LineNr">3085 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3086" class="LineNr">3086 </span><span class="Constant">b</span>
-<span id="L3087" class="LineNr">3087 </span><span class="Constant">c</span>
-<span id="L3088" class="LineNr">3088 </span><span class="Constant">d]</span>
-<span id="L3089" class="LineNr">3089 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3090" class="LineNr">3090 </span>  <span class="Comment"># position cursor at end of screen and try to move right</span>
-<span id="L3091" class="LineNr">3091 </span>  assume-console [
-<span id="L3092" class="LineNr">3092 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 3</span>
-<span id="L3093" class="LineNr">3093 </span>    press right-arrow
-<span id="L3094" class="LineNr">3094 </span>  ]
-<span id="L3095" class="LineNr">3095 </span>  run [
-<span id="L3096" class="LineNr">3096 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3097" class="LineNr">3097 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L3098" class="LineNr">3098 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L3099" class="LineNr">3099 </span>  ]
-<span id="L3100" class="LineNr">3100 </span>  <span class="Comment"># screen scrolls</span>
-<span id="L3101" class="LineNr">3101 </span>  screen-should-contain [
-<span id="L3102" class="LineNr">3102 </span>   <span class="Constant"> .     .</span>
-<span id="L3103" class="LineNr">3103 </span>   <span class="Constant"> .b    .</span>
-<span id="L3104" class="LineNr">3104 </span>   <span class="Constant"> .c    .</span>
-<span id="L3105" class="LineNr">3105 </span>   <span class="Constant"> .d    .</span>
-<span id="L3106" class="LineNr">3106 </span>  ]
-<span id="L3107" class="LineNr">3107 </span>  memory-should-contain [
-<span id="L3108" class="LineNr">3108 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L3109" class="LineNr">3109 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L3110" class="LineNr">3110 </span>  ]
-<span id="L3111" class="LineNr">3111 </span>]
-<span id="L3112" class="LineNr">3112 </span>
-<span id="L3113" class="LineNr">3113 </span><span class="muScenario">scenario</span> editor-scrolls-at-end-on-down-arrow [
-<span id="L3114" class="LineNr">3114 </span>  <span class="Constant">local-scope</span>
-<span id="L3115" class="LineNr">3115 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L3116" class="LineNr">3116 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
-<span id="L3117" class="LineNr">3117 </span><span class="Constant">de]</span>
-<span id="L3118" class="LineNr">3118 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3119" class="LineNr">3119 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3120" class="LineNr">3120 </span>  $clear-trace
-<span id="L3121" class="LineNr">3121 </span>  <span class="Comment"># try to move down past end of text</span>
-<span id="L3122" class="LineNr">3122 </span>  assume-console [
-<span id="L3123" class="LineNr">3123 </span>    left-click<span class="Constant"> 2</span>,<span class="Constant"> 0</span>
-<span id="L3124" class="LineNr">3124 </span>    press down-arrow
-<span id="L3125" class="LineNr">3125 </span>  ]
-<span id="L3126" class="LineNr">3126 </span>  run [
-<span id="L3127" class="LineNr">3127 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3128" class="LineNr">3128 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L3129" class="LineNr">3129 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L3130" class="LineNr">3130 </span>  ]
-<span id="L3131" class="LineNr">3131 </span>  <span class="Comment"># no change</span>
-<span id="L3132" class="LineNr">3132 </span>  memory-should-contain [
-<span id="L3133" class="LineNr">3133 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>
-<span id="L3134" class="LineNr">3134 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
-<span id="L3135" class="LineNr">3135 </span>  ]
-<span id="L3136" class="LineNr">3136 </span>]
-<span id="L3137" class="LineNr">3137 </span>
-<span id="L3138" class="LineNr">3138 </span><span class="muScenario">scenario</span> editor-combines-page-and-line-scroll [
-<span id="L3139" class="LineNr">3139 </span>  <span class="Constant">local-scope</span>
-<span id="L3140" class="LineNr">3140 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3141" class="LineNr">3141 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3142" class="LineNr">3142 </span>  <span class="Comment"># initialize editor with a few pages of lines</span>
-<span id="L3143" class="LineNr">3143 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3144" class="LineNr">3144 </span><span class="Constant">b</span>
-<span id="L3145" class="LineNr">3145 </span><span class="Constant">c</span>
-<span id="L3146" class="LineNr">3146 </span><span class="Constant">d</span>
-<span id="L3147" class="LineNr">3147 </span><span class="Constant">e</span>
-<span id="L3148" class="LineNr">3148 </span><span class="Constant">f</span>
-<span id="L3149" class="LineNr">3149 </span><span class="Constant">g]</span>
-<span id="L3150" class="LineNr">3150 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3151" class="LineNr">3151 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3152" class="LineNr">3152 </span>  <span class="Comment"># scroll down one page and one line</span>
-<span id="L3153" class="LineNr">3153 </span>  assume-console [
-<span id="L3154" class="LineNr">3154 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3155" class="LineNr">3155 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
-<span id="L3156" class="LineNr">3156 </span>    press down-arrow
-<span id="L3157" class="LineNr">3157 </span>  ]
-<span id="L3158" class="LineNr">3158 </span>  run [
-<span id="L3159" class="LineNr">3159 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3160" class="LineNr">3160 </span>  ]
-<span id="L3161" class="LineNr">3161 </span>  <span class="Comment"># screen scrolls down 3 lines</span>
-<span id="L3162" class="LineNr">3162 </span>  screen-should-contain [
-<span id="L3163" class="LineNr">3163 </span>   <span class="Constant"> .          .</span>
-<span id="L3164" class="LineNr">3164 </span>   <span class="Constant"> .d         .</span>
-<span id="L3165" class="LineNr">3165 </span>   <span class="Constant"> .e         .</span>
-<span id="L3166" class="LineNr">3166 </span>   <span class="Constant"> .f         .</span>
-<span id="L3167" class="LineNr">3167 </span>  ]
-<span id="L3168" class="LineNr">3168 </span>]
-<span id="L3169" class="LineNr">3169 </span>
-<span id="L3170" class="LineNr">3170 </span><span class="Comment"># scroll up if necessary</span>
-<span id="L3171" class="LineNr">3171 </span>
-<span id="L3172" class="LineNr">3172 </span><span class="muScenario">scenario</span> editor-can-scroll-up-using-arrow-keys [
-<span id="L3173" class="LineNr">3173 </span>  <span class="Constant">local-scope</span>
-<span id="L3174" class="LineNr">3174 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3175" class="LineNr">3175 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3176" class="LineNr">3176 </span>  <span class="Comment"># initialize editor with &gt;3 lines</span>
-<span id="L3177" class="LineNr">3177 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3178" class="LineNr">3178 </span><span class="Constant">b</span>
-<span id="L3179" class="LineNr">3179 </span><span class="Constant">c</span>
-<span id="L3180" class="LineNr">3180 </span><span class="Constant">d]</span>
-<span id="L3181" class="LineNr">3181 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3182" class="LineNr">3182 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3183" class="LineNr">3183 </span>  screen-should-contain [
-<span id="L3184" class="LineNr">3184 </span>   <span class="Constant"> .          .</span>
-<span id="L3185" class="LineNr">3185 </span>   <span class="Constant"> .a         .</span>
-<span id="L3186" class="LineNr">3186 </span>   <span class="Constant"> .b         .</span>
-<span id="L3187" class="LineNr">3187 </span>   <span class="Constant"> .c         .</span>
-<span id="L3188" class="LineNr">3188 </span>  ]
-<span id="L3189" class="LineNr">3189 </span>  <span class="Comment"># position cursor at top of second page, then try to move up</span>
-<span id="L3190" class="LineNr">3190 </span>  assume-console [
-<span id="L3191" class="LineNr">3191 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3192" class="LineNr">3192 </span>    press up-arrow
-<span id="L3193" class="LineNr">3193 </span>  ]
-<span id="L3194" class="LineNr">3194 </span>  run [
-<span id="L3195" class="LineNr">3195 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3196" class="LineNr">3196 </span>  ]
-<span id="L3197" class="LineNr">3197 </span>  <span class="Comment"># screen slides by one line</span>
-<span id="L3198" class="LineNr">3198 </span>  screen-should-contain [
-<span id="L3199" class="LineNr">3199 </span>   <span class="Constant"> .          .</span>
-<span id="L3200" class="LineNr">3200 </span>   <span class="Constant"> .b         .</span>
-<span id="L3201" class="LineNr">3201 </span>   <span class="Constant"> .c         .</span>
-<span id="L3202" class="LineNr">3202 </span>   <span class="Constant"> .d         .</span>
-<span id="L3203" class="LineNr">3203 </span>  ]
-<span id="L3204" class="LineNr">3204 </span>]
-<span id="L3205" class="LineNr">3205 </span>
-<span id="L3206" class="LineNr">3206 </span><span class="muRecipe">after</span> <span class="Constant">&lt;scroll-up&gt;</span> [
-<span id="L3207" class="LineNr">3207 </span>  trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[scroll up]</span>
-<span id="L3208" class="LineNr">3208 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3209" class="LineNr">3209 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy top-of-screen
-<span id="L3210" class="LineNr">3210 </span>  top-of-screen <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> top-of-screen, editor
-<span id="L3211" class="LineNr">3211 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
-<span id="L3212" class="LineNr">3212 </span>  no-movement?:bool <span class="Special">&lt;-</span> equal old-top, top-of-screen
-<span id="L3213" class="LineNr">3213 </span>  <span class="muControl">return-if</span> no-movement?, <span class="Constant">0/don't-render</span>
-<span id="L3214" class="LineNr">3214 </span>]
-<span id="L3215" class="LineNr">3215 </span>
-<span id="L3216" class="LineNr">3216 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys [
-<span id="L3217" class="LineNr">3217 </span>  <span class="Constant">local-scope</span>
-<span id="L3218" class="LineNr">3218 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3219" class="LineNr">3219 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3220" class="LineNr">3220 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
-<span id="L3221" class="LineNr">3221 </span>  <span class="Comment"># other lines</span>
-<span id="L3222" class="LineNr">3222 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
-<span id="L3223" class="LineNr">3223 </span><span class="Constant">g</span>
-<span id="L3224" class="LineNr">3224 </span><span class="Constant">h</span>
-<span id="L3225" class="LineNr">3225 </span><span class="Constant">i]</span>
-<span id="L3226" class="LineNr">3226 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3227" class="LineNr">3227 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3228" class="LineNr">3228 </span>  screen-should-contain [
-<span id="L3229" class="LineNr">3229 </span>   <span class="Constant"> .          .</span>
-<span id="L3230" class="LineNr">3230 </span>   <span class="Constant"> .abcd↩     .</span>
-<span id="L3231" class="LineNr">3231 </span>   <span class="Constant"> .ef        .</span>
-<span id="L3232" class="LineNr">3232 </span>   <span class="Constant"> .g         .</span>
-<span id="L3233" class="LineNr">3233 </span>  ]
-<span id="L3234" class="LineNr">3234 </span>  <span class="Comment"># position cursor at top of second page, just below wrapped line</span>
-<span id="L3235" class="LineNr">3235 </span>  assume-console [
-<span id="L3236" class="LineNr">3236 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3237" class="LineNr">3237 </span>  ]
-<span id="L3238" class="LineNr">3238 </span>  run [
-<span id="L3239" class="LineNr">3239 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3240" class="LineNr">3240 </span>  ]
+<span id="L3029" class="LineNr">3029 </span>
+<span id="L3030" class="LineNr">3030 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-newline [
+<span id="L3031" class="LineNr">3031 </span>  <span class="Constant">local-scope</span>
+<span id="L3032" class="LineNr">3032 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
+<span id="L3033" class="LineNr">3033 </span>  <span class="Comment"># position cursor after last line and type newline</span>
+<span id="L3034" class="LineNr">3034 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3035" class="LineNr">3035 </span><span class="Constant">b</span>
+<span id="L3036" class="LineNr">3036 </span><span class="Constant">c]</span>
+<span id="L3037" class="LineNr">3037 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3038" class="LineNr">3038 </span>  assume-console [
+<span id="L3039" class="LineNr">3039 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 4</span>
+<span id="L3040" class="LineNr">3040 </span>    type [
+<span id="L3041" class="LineNr">3041 </span>]
+<span id="L3042" class="LineNr">3042 </span>  ]
+<span id="L3043" class="LineNr">3043 </span>  run [
+<span id="L3044" class="LineNr">3044 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3045" class="LineNr">3045 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L3046" class="LineNr">3046 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L3047" class="LineNr">3047 </span>  ]
+<span id="L3048" class="LineNr">3048 </span>  <span class="Comment"># screen scrolls</span>
+<span id="L3049" class="LineNr">3049 </span>  screen-should-contain [
+<span id="L3050" class="LineNr">3050 </span>   <span class="Constant"> .     .</span>
+<span id="L3051" class="LineNr">3051 </span>   <span class="Constant"> .b    .</span>
+<span id="L3052" class="LineNr">3052 </span>   <span class="Constant"> .c    .</span>
+<span id="L3053" class="LineNr">3053 </span>   <span class="Constant"> .     .</span>
+<span id="L3054" class="LineNr">3054 </span>  ]
+<span id="L3055" class="LineNr">3055 </span>  memory-should-contain [
+<span id="L3056" class="LineNr">3056 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L3057" class="LineNr">3057 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L3058" class="LineNr">3058 </span>  ]
+<span id="L3059" class="LineNr">3059 </span>]
+<span id="L3060" class="LineNr">3060 </span>
+<span id="L3061" class="LineNr">3061 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-right-arrow [
+<span id="L3062" class="LineNr">3062 </span>  <span class="Constant">local-scope</span>
+<span id="L3063" class="LineNr">3063 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3064" class="LineNr">3064 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
+<span id="L3065" class="LineNr">3065 </span>  <span class="Comment"># editor contains a wrapped line</span>
+<span id="L3066" class="LineNr">3066 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3067" class="LineNr">3067 </span><span class="Constant">b</span>
+<span id="L3068" class="LineNr">3068 </span><span class="Constant">cdefgh]</span>
+<span id="L3069" class="LineNr">3069 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3070" class="LineNr">3070 </span>  <span class="Comment"># position cursor at end of screen and try to move right</span>
+<span id="L3071" class="LineNr">3071 </span>  assume-console [
+<span id="L3072" class="LineNr">3072 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 3</span>
+<span id="L3073" class="LineNr">3073 </span>    press right-arrow
+<span id="L3074" class="LineNr">3074 </span>  ]
+<span id="L3075" class="LineNr">3075 </span>  run [
+<span id="L3076" class="LineNr">3076 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3077" class="LineNr">3077 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L3078" class="LineNr">3078 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L3079" class="LineNr">3079 </span>  ]
+<span id="L3080" class="LineNr">3080 </span>  <span class="Comment"># screen scrolls</span>
+<span id="L3081" class="LineNr">3081 </span>  screen-should-contain [
+<span id="L3082" class="LineNr">3082 </span>   <span class="Constant"> .     .</span>
+<span id="L3083" class="LineNr">3083 </span>   <span class="Constant"> .b    .</span>
+<span id="L3084" class="LineNr">3084 </span><span class="Constant">    .cdef↩.</span>
+<span id="L3085" class="LineNr">3085 </span>   <span class="Constant"> .gh   .</span>
+<span id="L3086" class="LineNr">3086 </span>  ]
+<span id="L3087" class="LineNr">3087 </span>  memory-should-contain [
+<span id="L3088" class="LineNr">3088 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L3089" class="LineNr">3089 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L3090" class="LineNr">3090 </span>  ]
+<span id="L3091" class="LineNr">3091 </span>]
+<span id="L3092" class="LineNr">3092 </span>
+<span id="L3093" class="LineNr">3093 </span><span class="muScenario">scenario</span> editor-scrolls-down-on-right-arrow-2 [
+<span id="L3094" class="LineNr">3094 </span>  <span class="Constant">local-scope</span>
+<span id="L3095" class="LineNr">3095 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3096" class="LineNr">3096 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
+<span id="L3097" class="LineNr">3097 </span>  <span class="Comment"># editor contains more lines than can fit on screen</span>
+<span id="L3098" class="LineNr">3098 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3099" class="LineNr">3099 </span><span class="Constant">b</span>
+<span id="L3100" class="LineNr">3100 </span><span class="Constant">c</span>
+<span id="L3101" class="LineNr">3101 </span><span class="Constant">d]</span>
+<span id="L3102" class="LineNr">3102 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3103" class="LineNr">3103 </span>  <span class="Comment"># position cursor at end of screen and try to move right</span>
+<span id="L3104" class="LineNr">3104 </span>  assume-console [
+<span id="L3105" class="LineNr">3105 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 3</span>
+<span id="L3106" class="LineNr">3106 </span>    press right-arrow
+<span id="L3107" class="LineNr">3107 </span>  ]
+<span id="L3108" class="LineNr">3108 </span>  run [
+<span id="L3109" class="LineNr">3109 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3110" class="LineNr">3110 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L3111" class="LineNr">3111 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L3112" class="LineNr">3112 </span>  ]
+<span id="L3113" class="LineNr">3113 </span>  <span class="Comment"># screen scrolls</span>
+<span id="L3114" class="LineNr">3114 </span>  screen-should-contain [
+<span id="L3115" class="LineNr">3115 </span>   <span class="Constant"> .     .</span>
+<span id="L3116" class="LineNr">3116 </span>   <span class="Constant"> .b    .</span>
+<span id="L3117" class="LineNr">3117 </span>   <span class="Constant"> .c    .</span>
+<span id="L3118" class="LineNr">3118 </span>   <span class="Constant"> .d    .</span>
+<span id="L3119" class="LineNr">3119 </span>  ]
+<span id="L3120" class="LineNr">3120 </span>  memory-should-contain [
+<span id="L3121" class="LineNr">3121 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L3122" class="LineNr">3122 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L3123" class="LineNr">3123 </span>  ]
+<span id="L3124" class="LineNr">3124 </span>]
+<span id="L3125" class="LineNr">3125 </span>
+<span id="L3126" class="LineNr">3126 </span><span class="muScenario">scenario</span> editor-scrolls-at-end-on-down-arrow [
+<span id="L3127" class="LineNr">3127 </span>  <span class="Constant">local-scope</span>
+<span id="L3128" class="LineNr">3128 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L3129" class="LineNr">3129 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
+<span id="L3130" class="LineNr">3130 </span><span class="Constant">de]</span>
+<span id="L3131" class="LineNr">3131 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3132" class="LineNr">3132 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3133" class="LineNr">3133 </span>  $clear-trace
+<span id="L3134" class="LineNr">3134 </span>  <span class="Comment"># try to move down past end of text</span>
+<span id="L3135" class="LineNr">3135 </span>  assume-console [
+<span id="L3136" class="LineNr">3136 </span>    left-click<span class="Constant"> 2</span>,<span class="Constant"> 0</span>
+<span id="L3137" class="LineNr">3137 </span>    press down-arrow
+<span id="L3138" class="LineNr">3138 </span>  ]
+<span id="L3139" class="LineNr">3139 </span>  run [
+<span id="L3140" class="LineNr">3140 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3141" class="LineNr">3141 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L3142" class="LineNr">3142 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L3143" class="LineNr">3143 </span>  ]
+<span id="L3144" class="LineNr">3144 </span>  <span class="Comment"># no change</span>
+<span id="L3145" class="LineNr">3145 </span>  memory-should-contain [
+<span id="L3146" class="LineNr">3146 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 2</span>
+<span id="L3147" class="LineNr">3147 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 0</span>
+<span id="L3148" class="LineNr">3148 </span>  ]
+<span id="L3149" class="LineNr">3149 </span>]
+<span id="L3150" class="LineNr">3150 </span>
+<span id="L3151" class="LineNr">3151 </span><span class="muScenario">scenario</span> editor-combines-page-and-line-scroll [
+<span id="L3152" class="LineNr">3152 </span>  <span class="Constant">local-scope</span>
+<span id="L3153" class="LineNr">3153 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3154" class="LineNr">3154 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3155" class="LineNr">3155 </span>  <span class="Comment"># initialize editor with a few pages of lines</span>
+<span id="L3156" class="LineNr">3156 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3157" class="LineNr">3157 </span><span class="Constant">b</span>
+<span id="L3158" class="LineNr">3158 </span><span class="Constant">c</span>
+<span id="L3159" class="LineNr">3159 </span><span class="Constant">d</span>
+<span id="L3160" class="LineNr">3160 </span><span class="Constant">e</span>
+<span id="L3161" class="LineNr">3161 </span><span class="Constant">f</span>
+<span id="L3162" class="LineNr">3162 </span><span class="Constant">g]</span>
+<span id="L3163" class="LineNr">3163 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3164" class="LineNr">3164 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3165" class="LineNr">3165 </span>  <span class="Comment"># scroll down one page and one line</span>
+<span id="L3166" class="LineNr">3166 </span>  assume-console [
+<span id="L3167" class="LineNr">3167 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3168" class="LineNr">3168 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 0</span>
+<span id="L3169" class="LineNr">3169 </span>    press down-arrow
+<span id="L3170" class="LineNr">3170 </span>  ]
+<span id="L3171" class="LineNr">3171 </span>  run [
+<span id="L3172" class="LineNr">3172 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3173" class="LineNr">3173 </span>  ]
+<span id="L3174" class="LineNr">3174 </span>  <span class="Comment"># screen scrolls down 3 lines</span>
+<span id="L3175" class="LineNr">3175 </span>  screen-should-contain [
+<span id="L3176" class="LineNr">3176 </span>   <span class="Constant"> .          .</span>
+<span id="L3177" class="LineNr">3177 </span>   <span class="Constant"> .d         .</span>
+<span id="L3178" class="LineNr">3178 </span>   <span class="Constant"> .e         .</span>
+<span id="L3179" class="LineNr">3179 </span>   <span class="Constant"> .f         .</span>
+<span id="L3180" class="LineNr">3180 </span>  ]
+<span id="L3181" class="LineNr">3181 </span>]
+<span id="L3182" class="LineNr">3182 </span>
+<span id="L3183" class="LineNr">3183 </span><span class="Comment"># scroll up if necessary</span>
+<span id="L3184" class="LineNr">3184 </span>
+<span id="L3185" class="LineNr">3185 </span><span class="muScenario">scenario</span> editor-can-scroll-up-using-arrow-keys [
+<span id="L3186" class="LineNr">3186 </span>  <span class="Constant">local-scope</span>
+<span id="L3187" class="LineNr">3187 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3188" class="LineNr">3188 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3189" class="LineNr">3189 </span>  <span class="Comment"># initialize editor with &gt;3 lines</span>
+<span id="L3190" class="LineNr">3190 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3191" class="LineNr">3191 </span><span class="Constant">b</span>
+<span id="L3192" class="LineNr">3192 </span><span class="Constant">c</span>
+<span id="L3193" class="LineNr">3193 </span><span class="Constant">d]</span>
+<span id="L3194" class="LineNr">3194 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3195" class="LineNr">3195 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3196" class="LineNr">3196 </span>  screen-should-contain [
+<span id="L3197" class="LineNr">3197 </span>   <span class="Constant"> .          .</span>
+<span id="L3198" class="LineNr">3198 </span>   <span class="Constant"> .a         .</span>
+<span id="L3199" class="LineNr">3199 </span>   <span class="Constant"> .b         .</span>
+<span id="L3200" class="LineNr">3200 </span>   <span class="Constant"> .c         .</span>
+<span id="L3201" class="LineNr">3201 </span>  ]
+<span id="L3202" class="LineNr">3202 </span>  <span class="Comment"># position cursor at top of second page, then try to move up</span>
+<span id="L3203" class="LineNr">3203 </span>  assume-console [
+<span id="L3204" class="LineNr">3204 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3205" class="LineNr">3205 </span>    press up-arrow
+<span id="L3206" class="LineNr">3206 </span>  ]
+<span id="L3207" class="LineNr">3207 </span>  run [
+<span id="L3208" class="LineNr">3208 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3209" class="LineNr">3209 </span>  ]
+<span id="L3210" class="LineNr">3210 </span>  <span class="Comment"># screen slides by one line</span>
+<span id="L3211" class="LineNr">3211 </span>  screen-should-contain [
+<span id="L3212" class="LineNr">3212 </span>   <span class="Constant"> .          .</span>
+<span id="L3213" class="LineNr">3213 </span>   <span class="Constant"> .b         .</span>
+<span id="L3214" class="LineNr">3214 </span>   <span class="Constant"> .c         .</span>
+<span id="L3215" class="LineNr">3215 </span>   <span class="Constant"> .d         .</span>
+<span id="L3216" class="LineNr">3216 </span>  ]
+<span id="L3217" class="LineNr">3217 </span>]
+<span id="L3218" class="LineNr">3218 </span>
+<span id="L3219" class="LineNr">3219 </span><span class="muRecipe">after</span> <span class="Constant">&lt;scroll-up&gt;</span> [
+<span id="L3220" class="LineNr">3220 </span>  trace<span class="Constant"> 10</span>, <span class="Constant">[app]</span>, <span class="Constant">[scroll up]</span>
+<span id="L3221" class="LineNr">3221 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3222" class="LineNr">3222 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy top-of-screen
+<span id="L3223" class="LineNr">3223 </span>  top-of-screen <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> top-of-screen, editor
+<span id="L3224" class="LineNr">3224 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
+<span id="L3225" class="LineNr">3225 </span>  no-movement?:bool <span class="Special">&lt;-</span> equal old-top, top-of-screen
+<span id="L3226" class="LineNr">3226 </span>  <span class="muControl">return-if</span> no-movement?,<span class="Constant"> false/don't-render</span>
+<span id="L3227" class="LineNr">3227 </span>]
+<span id="L3228" class="LineNr">3228 </span>
+<span id="L3229" class="LineNr">3229 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys [
+<span id="L3230" class="LineNr">3230 </span>  <span class="Constant">local-scope</span>
+<span id="L3231" class="LineNr">3231 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3232" class="LineNr">3232 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3233" class="LineNr">3233 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
+<span id="L3234" class="LineNr">3234 </span>  <span class="Comment"># other lines</span>
+<span id="L3235" class="LineNr">3235 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
+<span id="L3236" class="LineNr">3236 </span><span class="Constant">g</span>
+<span id="L3237" class="LineNr">3237 </span><span class="Constant">h</span>
+<span id="L3238" class="LineNr">3238 </span><span class="Constant">i]</span>
+<span id="L3239" class="LineNr">3239 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3240" class="LineNr">3240 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L3241" class="LineNr">3241 </span>  screen-should-contain [
 <span id="L3242" class="LineNr">3242 </span>   <span class="Constant"> .          .</span>
-<span id="L3243" class="LineNr">3243 </span>   <span class="Constant"> .g         .</span>
-<span id="L3244" class="LineNr">3244 </span>   <span class="Constant"> .h         .</span>
-<span id="L3245" class="LineNr">3245 </span>   <span class="Constant"> .i         .</span>
+<span id="L3243" class="LineNr">3243 </span>   <span class="Constant"> .abcd↩     .</span>
+<span id="L3244" class="LineNr">3244 </span>   <span class="Constant"> .ef        .</span>
+<span id="L3245" class="LineNr">3245 </span>   <span class="Constant"> .g         .</span>
 <span id="L3246" class="LineNr">3246 </span>  ]
-<span id="L3247" class="LineNr">3247 </span>  <span class="Comment"># now move up one line</span>
+<span id="L3247" class="LineNr">3247 </span>  <span class="Comment"># position cursor at top of second page, just below wrapped line</span>
 <span id="L3248" class="LineNr">3248 </span>  assume-console [
-<span id="L3249" class="LineNr">3249 </span>    press up-arrow
+<span id="L3249" class="LineNr">3249 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L3250" class="LineNr">3250 </span>  ]
 <span id="L3251" class="LineNr">3251 </span>  run [
 <span id="L3252" class="LineNr">3252 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L3253" class="LineNr">3253 </span>  ]
-<span id="L3254" class="LineNr">3254 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L3255" class="LineNr">3255 </span>  screen-should-contain [
-<span id="L3256" class="LineNr">3256 </span>   <span class="Constant"> .          .</span>
-<span id="L3257" class="LineNr">3257 </span>   <span class="Constant"> .ef        .</span>
-<span id="L3258" class="LineNr">3258 </span>   <span class="Constant"> .g         .</span>
-<span id="L3259" class="LineNr">3259 </span>   <span class="Constant"> .h         .</span>
-<span id="L3260" class="LineNr">3260 </span>  ]
-<span id="L3261" class="LineNr">3261 </span>]
-<span id="L3262" class="LineNr">3262 </span>
-<span id="L3263" class="LineNr">3263 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-2 [
-<span id="L3264" class="LineNr">3264 </span>  <span class="Constant">local-scope</span>
-<span id="L3265" class="LineNr">3265 </span>  <span class="Comment"># screen has 1 line for menu + 4 lines</span>
-<span id="L3266" class="LineNr">3266 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L3267" class="LineNr">3267 </span>  <span class="Comment"># editor starts with a long line wrapping twice, occupying 3 of the 4 lines</span>
-<span id="L3268" class="LineNr">3268 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdefghij</span>
-<span id="L3269" class="LineNr">3269 </span><span class="Constant">k</span>
-<span id="L3270" class="LineNr">3270 </span><span class="Constant">l</span>
-<span id="L3271" class="LineNr">3271 </span><span class="Constant">m]</span>
-<span id="L3272" class="LineNr">3272 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3273" class="LineNr">3273 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3274" class="LineNr">3274 </span>  <span class="Comment"># position cursor at top of second page</span>
-<span id="L3275" class="LineNr">3275 </span>  assume-console [
-<span id="L3276" class="LineNr">3276 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3277" class="LineNr">3277 </span>  ]
-<span id="L3278" class="LineNr">3278 </span>  run [
-<span id="L3279" class="LineNr">3279 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3280" class="LineNr">3280 </span>  ]
-<span id="L3281" class="LineNr">3281 </span>  screen-should-contain [
-<span id="L3282" class="LineNr">3282 </span>   <span class="Constant"> .          .</span>
-<span id="L3283" class="LineNr">3283 </span>   <span class="Constant"> .k         .</span>
-<span id="L3284" class="LineNr">3284 </span>   <span class="Constant"> .l         .</span>
-<span id="L3285" class="LineNr">3285 </span>   <span class="Constant"> .m         .</span>
-<span id="L3286" class="LineNr">3286 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L3287" class="LineNr">3287 </span>  ]
-<span id="L3288" class="LineNr">3288 </span>  <span class="Comment"># move up one line</span>
-<span id="L3289" class="LineNr">3289 </span>  assume-console [
-<span id="L3290" class="LineNr">3290 </span>    press up-arrow
-<span id="L3291" class="LineNr">3291 </span>  ]
-<span id="L3292" class="LineNr">3292 </span>  run [
-<span id="L3293" class="LineNr">3293 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3294" class="LineNr">3294 </span>  ]
-<span id="L3295" class="LineNr">3295 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L3296" class="LineNr">3296 </span>  screen-should-contain [
-<span id="L3297" class="LineNr">3297 </span>   <span class="Constant"> .          .</span>
-<span id="L3298" class="LineNr">3298 </span>   <span class="Constant"> .ij        .</span>
-<span id="L3299" class="LineNr">3299 </span>   <span class="Constant"> .k         .</span>
-<span id="L3300" class="LineNr">3300 </span>   <span class="Constant"> .l         .</span>
-<span id="L3301" class="LineNr">3301 </span>   <span class="Constant"> .m         .</span>
-<span id="L3302" class="LineNr">3302 </span>  ]
-<span id="L3303" class="LineNr">3303 </span>  <span class="Comment"># move up a second line</span>
-<span id="L3304" class="LineNr">3304 </span>  assume-console [
-<span id="L3305" class="LineNr">3305 </span>    press up-arrow
-<span id="L3306" class="LineNr">3306 </span>  ]
-<span id="L3307" class="LineNr">3307 </span>  run [
-<span id="L3308" class="LineNr">3308 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3309" class="LineNr">3309 </span>  ]
-<span id="L3310" class="LineNr">3310 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L3311" class="LineNr">3311 </span>  screen-should-contain [
-<span id="L3312" class="LineNr">3312 </span>   <span class="Constant"> .          .</span>
-<span id="L3313" class="LineNr">3313 </span>   <span class="Constant"> .efgh↩     .</span>
-<span id="L3314" class="LineNr">3314 </span>   <span class="Constant"> .ij        .</span>
-<span id="L3315" class="LineNr">3315 </span>   <span class="Constant"> .k         .</span>
-<span id="L3316" class="LineNr">3316 </span>   <span class="Constant"> .l         .</span>
-<span id="L3317" class="LineNr">3317 </span>  ]
-<span id="L3318" class="LineNr">3318 </span>  <span class="Comment"># move up a third line</span>
-<span id="L3319" class="LineNr">3319 </span>  assume-console [
-<span id="L3320" class="LineNr">3320 </span>    press up-arrow
-<span id="L3321" class="LineNr">3321 </span>  ]
-<span id="L3322" class="LineNr">3322 </span>  run [
-<span id="L3323" class="LineNr">3323 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3324" class="LineNr">3324 </span>  ]
-<span id="L3325" class="LineNr">3325 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L3326" class="LineNr">3326 </span>  screen-should-contain [
-<span id="L3327" class="LineNr">3327 </span>   <span class="Constant"> .          .</span>
-<span id="L3328" class="LineNr">3328 </span>   <span class="Constant"> .abcd↩     .</span>
-<span id="L3329" class="LineNr">3329 </span>   <span class="Constant"> .efgh↩     .</span>
-<span id="L3330" class="LineNr">3330 </span>   <span class="Constant"> .ij        .</span>
-<span id="L3331" class="LineNr">3331 </span>   <span class="Constant"> .k         .</span>
-<span id="L3332" class="LineNr">3332 </span>  ]
-<span id="L3333" class="LineNr">3333 </span>]
-<span id="L3334" class="LineNr">3334 </span>
-<span id="L3335" class="LineNr">3335 </span><span class="Comment"># same as editor-scrolls-up-past-wrapped-line-using-arrow-keys but length</span>
-<span id="L3336" class="LineNr">3336 </span><span class="Comment"># slightly off, just to prevent over-training</span>
-<span id="L3337" class="LineNr">3337 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-3 [
-<span id="L3338" class="LineNr">3338 </span>  <span class="Constant">local-scope</span>
-<span id="L3339" class="LineNr">3339 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3340" class="LineNr">3340 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3341" class="LineNr">3341 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
-<span id="L3342" class="LineNr">3342 </span>  <span class="Comment"># other lines</span>
-<span id="L3343" class="LineNr">3343 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
-<span id="L3344" class="LineNr">3344 </span><span class="Constant">g</span>
-<span id="L3345" class="LineNr">3345 </span><span class="Constant">h</span>
-<span id="L3346" class="LineNr">3346 </span><span class="Constant">i]</span>
-<span id="L3347" class="LineNr">3347 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">6/right</span>
-<span id="L3348" class="LineNr">3348 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3349" class="LineNr">3349 </span>  screen-should-contain [
-<span id="L3350" class="LineNr">3350 </span>   <span class="Constant"> .          .</span>
-<span id="L3351" class="LineNr">3351 </span>   <span class="Constant"> .abcde↩    .</span>
-<span id="L3352" class="LineNr">3352 </span>   <span class="Constant"> .f         .</span>
-<span id="L3353" class="LineNr">3353 </span>   <span class="Constant"> .g         .</span>
-<span id="L3354" class="LineNr">3354 </span>  ]
-<span id="L3355" class="LineNr">3355 </span>  <span class="Comment"># position cursor at top of second page, just below wrapped line</span>
-<span id="L3356" class="LineNr">3356 </span>  assume-console [
-<span id="L3357" class="LineNr">3357 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3358" class="LineNr">3358 </span>  ]
-<span id="L3359" class="LineNr">3359 </span>  run [
-<span id="L3360" class="LineNr">3360 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3361" class="LineNr">3361 </span>  ]
+<span id="L3254" class="LineNr">3254 </span>  screen-should-contain [
+<span id="L3255" class="LineNr">3255 </span>   <span class="Constant"> .          .</span>
+<span id="L3256" class="LineNr">3256 </span>   <span class="Constant"> .g         .</span>
+<span id="L3257" class="LineNr">3257 </span>   <span class="Constant"> .h         .</span>
+<span id="L3258" class="LineNr">3258 </span>   <span class="Constant"> .i         .</span>
+<span id="L3259" class="LineNr">3259 </span>  ]
+<span id="L3260" class="LineNr">3260 </span>  <span class="Comment"># now move up one line</span>
+<span id="L3261" class="LineNr">3261 </span>  assume-console [
+<span id="L3262" class="LineNr">3262 </span>    press up-arrow
+<span id="L3263" class="LineNr">3263 </span>  ]
+<span id="L3264" class="LineNr">3264 </span>  run [
+<span id="L3265" class="LineNr">3265 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3266" class="LineNr">3266 </span>  ]
+<span id="L3267" class="LineNr">3267 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L3268" class="LineNr">3268 </span>  screen-should-contain [
+<span id="L3269" class="LineNr">3269 </span>   <span class="Constant"> .          .</span>
+<span id="L3270" class="LineNr">3270 </span>   <span class="Constant"> .ef        .</span>
+<span id="L3271" class="LineNr">3271 </span>   <span class="Constant"> .g         .</span>
+<span id="L3272" class="LineNr">3272 </span>   <span class="Constant"> .h         .</span>
+<span id="L3273" class="LineNr">3273 </span>  ]
+<span id="L3274" class="LineNr">3274 </span>]
+<span id="L3275" class="LineNr">3275 </span>
+<span id="L3276" class="LineNr">3276 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-2 [
+<span id="L3277" class="LineNr">3277 </span>  <span class="Constant">local-scope</span>
+<span id="L3278" class="LineNr">3278 </span>  <span class="Comment"># screen has 1 line for menu + 4 lines</span>
+<span id="L3279" class="LineNr">3279 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L3280" class="LineNr">3280 </span>  <span class="Comment"># editor starts with a long line wrapping twice, occupying 3 of the 4 lines</span>
+<span id="L3281" class="LineNr">3281 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdefghij</span>
+<span id="L3282" class="LineNr">3282 </span><span class="Constant">k</span>
+<span id="L3283" class="LineNr">3283 </span><span class="Constant">l</span>
+<span id="L3284" class="LineNr">3284 </span><span class="Constant">m]</span>
+<span id="L3285" class="LineNr">3285 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3286" class="LineNr">3286 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3287" class="LineNr">3287 </span>  <span class="Comment"># position cursor at top of second page</span>
+<span id="L3288" class="LineNr">3288 </span>  assume-console [
+<span id="L3289" class="LineNr">3289 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3290" class="LineNr">3290 </span>  ]
+<span id="L3291" class="LineNr">3291 </span>  run [
+<span id="L3292" class="LineNr">3292 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3293" class="LineNr">3293 </span>  ]
+<span id="L3294" class="LineNr">3294 </span>  screen-should-contain [
+<span id="L3295" class="LineNr">3295 </span>   <span class="Constant"> .          .</span>
+<span id="L3296" class="LineNr">3296 </span>   <span class="Constant"> .k         .</span>
+<span id="L3297" class="LineNr">3297 </span>   <span class="Constant"> .l         .</span>
+<span id="L3298" class="LineNr">3298 </span>   <span class="Constant"> .m         .</span>
+<span id="L3299" class="LineNr">3299 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L3300" class="LineNr">3300 </span>  ]
+<span id="L3301" class="LineNr">3301 </span>  <span class="Comment"># move up one line</span>
+<span id="L3302" class="LineNr">3302 </span>  assume-console [
+<span id="L3303" class="LineNr">3303 </span>    press up-arrow
+<span id="L3304" class="LineNr">3304 </span>  ]
+<span id="L3305" class="LineNr">3305 </span>  run [
+<span id="L3306" class="LineNr">3306 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3307" class="LineNr">3307 </span>  ]
+<span id="L3308" class="LineNr">3308 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L3309" class="LineNr">3309 </span>  screen-should-contain [
+<span id="L3310" class="LineNr">3310 </span>   <span class="Constant"> .          .</span>
+<span id="L3311" class="LineNr">3311 </span>   <span class="Constant"> .ij        .</span>
+<span id="L3312" class="LineNr">3312 </span>   <span class="Constant"> .k         .</span>
+<span id="L3313" class="LineNr">3313 </span>   <span class="Constant"> .l         .</span>
+<span id="L3314" class="LineNr">3314 </span>   <span class="Constant"> .m         .</span>
+<span id="L3315" class="LineNr">3315 </span>  ]
+<span id="L3316" class="LineNr">3316 </span>  <span class="Comment"># move up a second line</span>
+<span id="L3317" class="LineNr">3317 </span>  assume-console [
+<span id="L3318" class="LineNr">3318 </span>    press up-arrow
+<span id="L3319" class="LineNr">3319 </span>  ]
+<span id="L3320" class="LineNr">3320 </span>  run [
+<span id="L3321" class="LineNr">3321 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3322" class="LineNr">3322 </span>  ]
+<span id="L3323" class="LineNr">3323 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L3324" class="LineNr">3324 </span>  screen-should-contain [
+<span id="L3325" class="LineNr">3325 </span>   <span class="Constant"> .          .</span>
+<span id="L3326" class="LineNr">3326 </span>   <span class="Constant"> .efgh↩     .</span>
+<span id="L3327" class="LineNr">3327 </span>   <span class="Constant"> .ij        .</span>
+<span id="L3328" class="LineNr">3328 </span>   <span class="Constant"> .k         .</span>
+<span id="L3329" class="LineNr">3329 </span>   <span class="Constant"> .l         .</span>
+<span id="L3330" class="LineNr">3330 </span>  ]
+<span id="L3331" class="LineNr">3331 </span>  <span class="Comment"># move up a third line</span>
+<span id="L3332" class="LineNr">3332 </span>  assume-console [
+<span id="L3333" class="LineNr">3333 </span>    press up-arrow
+<span id="L3334" class="LineNr">3334 </span>  ]
+<span id="L3335" class="LineNr">3335 </span>  run [
+<span id="L3336" class="LineNr">3336 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3337" class="LineNr">3337 </span>  ]
+<span id="L3338" class="LineNr">3338 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L3339" class="LineNr">3339 </span>  screen-should-contain [
+<span id="L3340" class="LineNr">3340 </span>   <span class="Constant"> .          .</span>
+<span id="L3341" class="LineNr">3341 </span>   <span class="Constant"> .abcd↩     .</span>
+<span id="L3342" class="LineNr">3342 </span>   <span class="Constant"> .efgh↩     .</span>
+<span id="L3343" class="LineNr">3343 </span>   <span class="Constant"> .ij        .</span>
+<span id="L3344" class="LineNr">3344 </span>   <span class="Constant"> .k         .</span>
+<span id="L3345" class="LineNr">3345 </span>  ]
+<span id="L3346" class="LineNr">3346 </span>]
+<span id="L3347" class="LineNr">3347 </span>
+<span id="L3348" class="LineNr">3348 </span><span class="Comment"># same as editor-scrolls-up-past-wrapped-line-using-arrow-keys but length</span>
+<span id="L3349" class="LineNr">3349 </span><span class="Comment"># slightly off, just to prevent over-training</span>
+<span id="L3350" class="LineNr">3350 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-3 [
+<span id="L3351" class="LineNr">3351 </span>  <span class="Constant">local-scope</span>
+<span id="L3352" class="LineNr">3352 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3353" class="LineNr">3353 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3354" class="LineNr">3354 </span>  <span class="Comment"># initialize editor with a long, wrapped line and more than a screen of</span>
+<span id="L3355" class="LineNr">3355 </span>  <span class="Comment"># other lines</span>
+<span id="L3356" class="LineNr">3356 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[abcdef</span>
+<span id="L3357" class="LineNr">3357 </span><span class="Constant">g</span>
+<span id="L3358" class="LineNr">3358 </span><span class="Constant">h</span>
+<span id="L3359" class="LineNr">3359 </span><span class="Constant">i]</span>
+<span id="L3360" class="LineNr">3360 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">6/right</span>
+<span id="L3361" class="LineNr">3361 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L3362" class="LineNr">3362 </span>  screen-should-contain [
 <span id="L3363" class="LineNr">3363 </span>   <span class="Constant"> .          .</span>
-<span id="L3364" class="LineNr">3364 </span>   <span class="Constant"> .g         .</span>
-<span id="L3365" class="LineNr">3365 </span>   <span class="Constant"> .h         .</span>
-<span id="L3366" class="LineNr">3366 </span>   <span class="Constant"> .i         .</span>
+<span id="L3364" class="LineNr">3364 </span>   <span class="Constant"> .abcde↩    .</span>
+<span id="L3365" class="LineNr">3365 </span>   <span class="Constant"> .f         .</span>
+<span id="L3366" class="LineNr">3366 </span>   <span class="Constant"> .g         .</span>
 <span id="L3367" class="LineNr">3367 </span>  ]
-<span id="L3368" class="LineNr">3368 </span>  <span class="Comment"># now move up one line</span>
+<span id="L3368" class="LineNr">3368 </span>  <span class="Comment"># position cursor at top of second page, just below wrapped line</span>
 <span id="L3369" class="LineNr">3369 </span>  assume-console [
-<span id="L3370" class="LineNr">3370 </span>    press up-arrow
+<span id="L3370" class="LineNr">3370 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L3371" class="LineNr">3371 </span>  ]
 <span id="L3372" class="LineNr">3372 </span>  run [
 <span id="L3373" class="LineNr">3373 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L3374" class="LineNr">3374 </span>  ]
-<span id="L3375" class="LineNr">3375 </span>  <span class="Comment"># screen shows partial wrapped line</span>
-<span id="L3376" class="LineNr">3376 </span>  screen-should-contain [
-<span id="L3377" class="LineNr">3377 </span>   <span class="Constant"> .          .</span>
-<span id="L3378" class="LineNr">3378 </span>   <span class="Constant"> .f         .</span>
-<span id="L3379" class="LineNr">3379 </span>   <span class="Constant"> .g         .</span>
-<span id="L3380" class="LineNr">3380 </span>   <span class="Constant"> .h         .</span>
-<span id="L3381" class="LineNr">3381 </span>  ]
-<span id="L3382" class="LineNr">3382 </span>]
-<span id="L3383" class="LineNr">3383 </span>
-<span id="L3384" class="LineNr">3384 </span><span class="Comment"># check empty lines</span>
-<span id="L3385" class="LineNr">3385 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-4 [
-<span id="L3386" class="LineNr">3386 </span>  <span class="Constant">local-scope</span>
-<span id="L3387" class="LineNr">3387 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3388" class="LineNr">3388 </span>  <span class="Comment"># initialize editor with some lines around an empty line</span>
-<span id="L3389" class="LineNr">3389 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3390" class="LineNr">3390 </span><span class="Constant">b</span>
-<span id="L3391" class="LineNr">3391 </span>
-<span id="L3392" class="LineNr">3392 </span>c
-<span id="L3393" class="LineNr">3393 </span>d
-<span id="L3394" class="LineNr">3394 </span>e]
-<span id="L3395" class="LineNr">3395 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">6/right</span>
-<span id="L3396" class="LineNr">3396 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3397" class="LineNr">3397 </span>  assume-console [
-<span id="L3398" class="LineNr">3398 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3399" class="LineNr">3399 </span>  ]
-<span id="L3400" class="LineNr">3400 </span>  run [
-<span id="L3401" class="LineNr">3401 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3402" class="LineNr">3402 </span>  ]
-<span id="L3403" class="LineNr">3403 </span>  screen-should-contain [
-<span id="L3404" class="LineNr">3404 </span>   <span class="Constant"> .          .</span>
-<span id="L3405" class="LineNr">3405 </span>   <span class="Constant"> .          .</span>
-<span id="L3406" class="LineNr">3406 </span>   <span class="Constant"> .c         .</span>
-<span id="L3407" class="LineNr">3407 </span>   <span class="Constant"> .d         .</span>
-<span id="L3408" class="LineNr">3408 </span>  ]
-<span id="L3409" class="LineNr">3409 </span>  assume-console [
-<span id="L3410" class="LineNr">3410 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3411" class="LineNr">3411 </span>  ]
-<span id="L3412" class="LineNr">3412 </span>  run [
-<span id="L3413" class="LineNr">3413 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3414" class="LineNr">3414 </span>  ]
-<span id="L3415" class="LineNr">3415 </span>  screen-should-contain [
-<span id="L3416" class="LineNr">3416 </span>   <span class="Constant"> .          .</span>
-<span id="L3417" class="LineNr">3417 </span>   <span class="Constant"> .d         .</span>
-<span id="L3418" class="LineNr">3418 </span>   <span class="Constant"> .e         .</span>
-<span id="L3419" class="LineNr">3419 </span>   <span class="Constant"> .╌╌╌╌╌╌    .</span>
-<span id="L3420" class="LineNr">3420 </span>  ]
-<span id="L3421" class="LineNr">3421 </span>  assume-console [
-<span id="L3422" class="LineNr">3422 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
-<span id="L3423" class="LineNr">3423 </span>  ]
-<span id="L3424" class="LineNr">3424 </span>  run [
-<span id="L3425" class="LineNr">3425 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3426" class="LineNr">3426 </span>  ]
-<span id="L3427" class="LineNr">3427 </span>  screen-should-contain [
-<span id="L3428" class="LineNr">3428 </span>   <span class="Constant"> .          .</span>
+<span id="L3375" class="LineNr">3375 </span>  screen-should-contain [
+<span id="L3376" class="LineNr">3376 </span>   <span class="Constant"> .          .</span>
+<span id="L3377" class="LineNr">3377 </span>   <span class="Constant"> .g         .</span>
+<span id="L3378" class="LineNr">3378 </span>   <span class="Constant"> .h         .</span>
+<span id="L3379" class="LineNr">3379 </span>   <span class="Constant"> .i         .</span>
+<span id="L3380" class="LineNr">3380 </span>  ]
+<span id="L3381" class="LineNr">3381 </span>  <span class="Comment"># now move up one line</span>
+<span id="L3382" class="LineNr">3382 </span>  assume-console [
+<span id="L3383" class="LineNr">3383 </span>    press up-arrow
+<span id="L3384" class="LineNr">3384 </span>  ]
+<span id="L3385" class="LineNr">3385 </span>  run [
+<span id="L3386" class="LineNr">3386 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3387" class="LineNr">3387 </span>  ]
+<span id="L3388" class="LineNr">3388 </span>  <span class="Comment"># screen shows partial wrapped line</span>
+<span id="L3389" class="LineNr">3389 </span>  screen-should-contain [
+<span id="L3390" class="LineNr">3390 </span>   <span class="Constant"> .          .</span>
+<span id="L3391" class="LineNr">3391 </span>   <span class="Constant"> .f         .</span>
+<span id="L3392" class="LineNr">3392 </span>   <span class="Constant"> .g         .</span>
+<span id="L3393" class="LineNr">3393 </span>   <span class="Constant"> .h         .</span>
+<span id="L3394" class="LineNr">3394 </span>  ]
+<span id="L3395" class="LineNr">3395 </span>]
+<span id="L3396" class="LineNr">3396 </span>
+<span id="L3397" class="LineNr">3397 </span><span class="Comment"># check empty lines</span>
+<span id="L3398" class="LineNr">3398 </span><span class="muScenario">scenario</span> editor-scrolls-up-past-wrapped-line-using-arrow-keys-4 [
+<span id="L3399" class="LineNr">3399 </span>  <span class="Constant">local-scope</span>
+<span id="L3400" class="LineNr">3400 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3401" class="LineNr">3401 </span>  <span class="Comment"># initialize editor with some lines around an empty line</span>
+<span id="L3402" class="LineNr">3402 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3403" class="LineNr">3403 </span><span class="Constant">b</span>
+<span id="L3404" class="LineNr">3404 </span>
+<span id="L3405" class="LineNr">3405 </span>c
+<span id="L3406" class="LineNr">3406 </span>d
+<span id="L3407" class="LineNr">3407 </span>e]
+<span id="L3408" class="LineNr">3408 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">6/right</span>
+<span id="L3409" class="LineNr">3409 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3410" class="LineNr">3410 </span>  assume-console [
+<span id="L3411" class="LineNr">3411 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3412" class="LineNr">3412 </span>  ]
+<span id="L3413" class="LineNr">3413 </span>  run [
+<span id="L3414" class="LineNr">3414 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3415" class="LineNr">3415 </span>  ]
+<span id="L3416" class="LineNr">3416 </span>  screen-should-contain [
+<span id="L3417" class="LineNr">3417 </span>   <span class="Constant"> .          .</span>
+<span id="L3418" class="LineNr">3418 </span>   <span class="Constant"> .          .</span>
+<span id="L3419" class="LineNr">3419 </span>   <span class="Constant"> .c         .</span>
+<span id="L3420" class="LineNr">3420 </span>   <span class="Constant"> .d         .</span>
+<span id="L3421" class="LineNr">3421 </span>  ]
+<span id="L3422" class="LineNr">3422 </span>  assume-console [
+<span id="L3423" class="LineNr">3423 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3424" class="LineNr">3424 </span>  ]
+<span id="L3425" class="LineNr">3425 </span>  run [
+<span id="L3426" class="LineNr">3426 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3427" class="LineNr">3427 </span>  ]
+<span id="L3428" class="LineNr">3428 </span>  screen-should-contain [
 <span id="L3429" class="LineNr">3429 </span>   <span class="Constant"> .          .</span>
-<span id="L3430" class="LineNr">3430 </span>   <span class="Constant"> .c         .</span>
-<span id="L3431" class="LineNr">3431 </span>   <span class="Constant"> .d         .</span>
-<span id="L3432" class="LineNr">3432 </span>  ]
-<span id="L3433" class="LineNr">3433 </span>]
-<span id="L3434" class="LineNr">3434 </span>
-<span id="L3435" class="LineNr">3435 </span><span class="muScenario">scenario</span> editor-scrolls-up-on-left-arrow [
-<span id="L3436" class="LineNr">3436 </span>  <span class="Constant">local-scope</span>
-<span id="L3437" class="LineNr">3437 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3438" class="LineNr">3438 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
-<span id="L3439" class="LineNr">3439 </span>  <span class="Comment"># editor contains &gt;3 lines</span>
-<span id="L3440" class="LineNr">3440 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3441" class="LineNr">3441 </span><span class="Constant">b</span>
-<span id="L3442" class="LineNr">3442 </span><span class="Constant">c</span>
-<span id="L3443" class="LineNr">3443 </span><span class="Constant">d</span>
-<span id="L3444" class="LineNr">3444 </span><span class="Constant">e]</span>
-<span id="L3445" class="LineNr">3445 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L3446" class="LineNr">3446 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3447" class="LineNr">3447 </span>  <span class="Comment"># position cursor at top of second page</span>
-<span id="L3448" class="LineNr">3448 </span>  assume-console [
-<span id="L3449" class="LineNr">3449 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3450" class="LineNr">3450 </span>  ]
-<span id="L3451" class="LineNr">3451 </span>  run [
-<span id="L3452" class="LineNr">3452 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3453" class="LineNr">3453 </span>  ]
-<span id="L3454" class="LineNr">3454 </span>  screen-should-contain [
-<span id="L3455" class="LineNr">3455 </span>   <span class="Constant"> .     .</span>
-<span id="L3456" class="LineNr">3456 </span>   <span class="Constant"> .c    .</span>
-<span id="L3457" class="LineNr">3457 </span>   <span class="Constant"> .d    .</span>
-<span id="L3458" class="LineNr">3458 </span>   <span class="Constant"> .e    .</span>
-<span id="L3459" class="LineNr">3459 </span>  ]
-<span id="L3460" class="LineNr">3460 </span>  <span class="Comment"># now try to move left</span>
+<span id="L3430" class="LineNr">3430 </span>   <span class="Constant"> .d         .</span>
+<span id="L3431" class="LineNr">3431 </span>   <span class="Constant"> .e         .</span>
+<span id="L3432" class="LineNr">3432 </span>   <span class="Constant"> .╌╌╌╌╌╌    .</span>
+<span id="L3433" class="LineNr">3433 </span>  ]
+<span id="L3434" class="LineNr">3434 </span>  assume-console [
+<span id="L3435" class="LineNr">3435 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L3436" class="LineNr">3436 </span>  ]
+<span id="L3437" class="LineNr">3437 </span>  run [
+<span id="L3438" class="LineNr">3438 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3439" class="LineNr">3439 </span>  ]
+<span id="L3440" class="LineNr">3440 </span>  screen-should-contain [
+<span id="L3441" class="LineNr">3441 </span>   <span class="Constant"> .          .</span>
+<span id="L3442" class="LineNr">3442 </span>   <span class="Constant"> .          .</span>
+<span id="L3443" class="LineNr">3443 </span>   <span class="Constant"> .c         .</span>
+<span id="L3444" class="LineNr">3444 </span>   <span class="Constant"> .d         .</span>
+<span id="L3445" class="LineNr">3445 </span>  ]
+<span id="L3446" class="LineNr">3446 </span>]
+<span id="L3447" class="LineNr">3447 </span>
+<span id="L3448" class="LineNr">3448 </span><span class="muScenario">scenario</span> editor-scrolls-up-on-left-arrow [
+<span id="L3449" class="LineNr">3449 </span>  <span class="Constant">local-scope</span>
+<span id="L3450" class="LineNr">3450 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3451" class="LineNr">3451 </span>  assume-screen <span class="Constant">5/width</span>, <span class="Constant">4/height</span>
+<span id="L3452" class="LineNr">3452 </span>  <span class="Comment"># editor contains &gt;3 lines</span>
+<span id="L3453" class="LineNr">3453 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3454" class="LineNr">3454 </span><span class="Constant">b</span>
+<span id="L3455" class="LineNr">3455 </span><span class="Constant">c</span>
+<span id="L3456" class="LineNr">3456 </span><span class="Constant">d</span>
+<span id="L3457" class="LineNr">3457 </span><span class="Constant">e]</span>
+<span id="L3458" class="LineNr">3458 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L3459" class="LineNr">3459 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3460" class="LineNr">3460 </span>  <span class="Comment"># position cursor at top of second page</span>
 <span id="L3461" class="LineNr">3461 </span>  assume-console [
-<span id="L3462" class="LineNr">3462 </span>    press left-arrow
+<span id="L3462" class="LineNr">3462 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L3463" class="LineNr">3463 </span>  ]
 <span id="L3464" class="LineNr">3464 </span>  run [
 <span id="L3465" class="LineNr">3465 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3466" class="LineNr">3466 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L3467" class="LineNr">3467 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L3468" class="LineNr">3468 </span>  ]
-<span id="L3469" class="LineNr">3469 </span>  <span class="Comment"># screen scrolls</span>
-<span id="L3470" class="LineNr">3470 </span>  screen-should-contain [
-<span id="L3471" class="LineNr">3471 </span>   <span class="Constant"> .     .</span>
-<span id="L3472" class="LineNr">3472 </span>   <span class="Constant"> .b    .</span>
-<span id="L3473" class="LineNr">3473 </span>   <span class="Constant"> .c    .</span>
-<span id="L3474" class="LineNr">3474 </span>   <span class="Constant"> .d    .</span>
-<span id="L3475" class="LineNr">3475 </span>  ]
-<span id="L3476" class="LineNr">3476 </span>  memory-should-contain [
-<span id="L3477" class="LineNr">3477 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L3478" class="LineNr">3478 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L3479" class="LineNr">3479 </span>  ]
-<span id="L3480" class="LineNr">3480 </span>]
-<span id="L3481" class="LineNr">3481 </span>
-<span id="L3482" class="LineNr">3482 </span><span class="muScenario">scenario</span> editor-can-scroll-up-to-start-of-file [
-<span id="L3483" class="LineNr">3483 </span>  <span class="Constant">local-scope</span>
-<span id="L3484" class="LineNr">3484 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3485" class="LineNr">3485 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3486" class="LineNr">3486 </span>  <span class="Comment"># initialize editor with &gt;3 lines</span>
-<span id="L3487" class="LineNr">3487 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3488" class="LineNr">3488 </span><span class="Constant">b</span>
-<span id="L3489" class="LineNr">3489 </span><span class="Constant">c</span>
-<span id="L3490" class="LineNr">3490 </span><span class="Constant">d]</span>
-<span id="L3491" class="LineNr">3491 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3492" class="LineNr">3492 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3493" class="LineNr">3493 </span>  screen-should-contain [
-<span id="L3494" class="LineNr">3494 </span>   <span class="Constant"> .          .</span>
-<span id="L3495" class="LineNr">3495 </span>   <span class="Constant"> .a         .</span>
-<span id="L3496" class="LineNr">3496 </span>   <span class="Constant"> .b         .</span>
-<span id="L3497" class="LineNr">3497 </span>   <span class="Constant"> .c         .</span>
-<span id="L3498" class="LineNr">3498 </span>  ]
-<span id="L3499" class="LineNr">3499 </span>  <span class="Comment"># position cursor at top of second page, then try to move up to start of</span>
-<span id="L3500" class="LineNr">3500 </span>  <span class="Comment"># text</span>
-<span id="L3501" class="LineNr">3501 </span>  assume-console [
-<span id="L3502" class="LineNr">3502 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3503" class="LineNr">3503 </span>    press up-arrow
-<span id="L3504" class="LineNr">3504 </span>    press up-arrow
-<span id="L3505" class="LineNr">3505 </span>  ]
-<span id="L3506" class="LineNr">3506 </span>  run [
-<span id="L3507" class="LineNr">3507 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3508" class="LineNr">3508 </span>  ]
-<span id="L3509" class="LineNr">3509 </span>  <span class="Comment"># screen slides by one line</span>
-<span id="L3510" class="LineNr">3510 </span>  screen-should-contain [
-<span id="L3511" class="LineNr">3511 </span>   <span class="Constant"> .          .</span>
-<span id="L3512" class="LineNr">3512 </span>   <span class="Constant"> .a         .</span>
-<span id="L3513" class="LineNr">3513 </span>   <span class="Constant"> .b         .</span>
-<span id="L3514" class="LineNr">3514 </span>   <span class="Constant"> .c         .</span>
-<span id="L3515" class="LineNr">3515 </span>  ]
-<span id="L3516" class="LineNr">3516 </span>  <span class="Comment"># try to move up again</span>
-<span id="L3517" class="LineNr">3517 </span>  assume-console [
-<span id="L3518" class="LineNr">3518 </span>    press up-arrow
-<span id="L3519" class="LineNr">3519 </span>  ]
-<span id="L3520" class="LineNr">3520 </span>  run [
-<span id="L3521" class="LineNr">3521 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3522" class="LineNr">3522 </span>  ]
-<span id="L3523" class="LineNr">3523 </span>  <span class="Comment"># screen remains unchanged</span>
-<span id="L3524" class="LineNr">3524 </span>  screen-should-contain [
-<span id="L3525" class="LineNr">3525 </span>   <span class="Constant"> .          .</span>
-<span id="L3526" class="LineNr">3526 </span>   <span class="Constant"> .a         .</span>
-<span id="L3527" class="LineNr">3527 </span>   <span class="Constant"> .b         .</span>
-<span id="L3528" class="LineNr">3528 </span>   <span class="Constant"> .c         .</span>
-<span id="L3529" class="LineNr">3529 </span>  ]
-<span id="L3530" class="LineNr">3530 </span>]
-<span id="L3531" class="LineNr">3531 </span>
-<span id="L3532" class="LineNr">3532 </span><span class="Comment"># ctrl-f/page-down - render next page if it exists</span>
-<span id="L3533" class="LineNr">3533 </span>
-<span id="L3534" class="LineNr">3534 </span><span class="muScenario">scenario</span> editor-can-scroll [
-<span id="L3535" class="LineNr">3535 </span>  <span class="Constant">local-scope</span>
-<span id="L3536" class="LineNr">3536 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3537" class="LineNr">3537 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3538" class="LineNr">3538 </span><span class="Constant">b</span>
-<span id="L3539" class="LineNr">3539 </span><span class="Constant">c</span>
-<span id="L3540" class="LineNr">3540 </span><span class="Constant">d]</span>
-<span id="L3541" class="LineNr">3541 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3542" class="LineNr">3542 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3543" class="LineNr">3543 </span>  screen-should-contain [
-<span id="L3544" class="LineNr">3544 </span>   <span class="Constant"> .          .</span>
-<span id="L3545" class="LineNr">3545 </span>   <span class="Constant"> .a         .</span>
-<span id="L3546" class="LineNr">3546 </span>   <span class="Constant"> .b         .</span>
-<span id="L3547" class="LineNr">3547 </span>   <span class="Constant"> .c         .</span>
-<span id="L3548" class="LineNr">3548 </span>  ]
-<span id="L3549" class="LineNr">3549 </span>  <span class="Comment"># scroll down</span>
-<span id="L3550" class="LineNr">3550 </span>  assume-console [
-<span id="L3551" class="LineNr">3551 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3552" class="LineNr">3552 </span>  ]
-<span id="L3553" class="LineNr">3553 </span>  run [
-<span id="L3554" class="LineNr">3554 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3555" class="LineNr">3555 </span>  ]
-<span id="L3556" class="LineNr">3556 </span>  <span class="Comment"># screen shows next page</span>
-<span id="L3557" class="LineNr">3557 </span>  screen-should-contain [
-<span id="L3558" class="LineNr">3558 </span>   <span class="Constant"> .          .</span>
-<span id="L3559" class="LineNr">3559 </span>   <span class="Constant"> .c         .</span>
-<span id="L3560" class="LineNr">3560 </span>   <span class="Constant"> .d         .</span>
-<span id="L3561" class="LineNr">3561 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L3562" class="LineNr">3562 </span>  ]
-<span id="L3563" class="LineNr">3563 </span>]
-<span id="L3564" class="LineNr">3564 </span>
-<span id="L3565" class="LineNr">3565 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L3566" class="LineNr">3566 </span>  <span class="Delimiter">{</span>
-<span id="L3567" class="LineNr">3567 </span>    page-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">6/ctrl-f</span>
-<span id="L3568" class="LineNr">3568 </span>    <span class="muControl">break-unless</span> page-down?
-<span id="L3569" class="LineNr">3569 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3570" class="LineNr">3570 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L3571" class="LineNr">3571 </span>    <a href='003-shortcuts.mu.html#L3597'>page-down</a> editor
-<span id="L3572" class="LineNr">3572 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
-<span id="L3573" class="LineNr">3573 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L3574" class="LineNr">3574 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3575" class="LineNr">3575 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
-<span id="L3576" class="LineNr">3576 </span>   <span class="muControl"> return</span> movement?/go-render
-<span id="L3577" class="LineNr">3577 </span>  <span class="Delimiter">}</span>
-<span id="L3578" class="LineNr">3578 </span>]
-<span id="L3579" class="LineNr">3579 </span>
-<span id="L3580" class="LineNr">3580 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L199'>&lt;handle-special-key&gt;</a></span> [
-<span id="L3581" class="LineNr">3581 </span>  <span class="Delimiter">{</span>
-<span id="L3582" class="LineNr">3582 </span>    page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
-<span id="L3583" class="LineNr">3583 </span>    <span class="muControl">break-unless</span> page-down?
-<span id="L3584" class="LineNr">3584 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3585" class="LineNr">3585 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L3586" class="LineNr">3586 </span>    <a href='003-shortcuts.mu.html#L3597'>page-down</a> editor
-<span id="L3587" class="LineNr">3587 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
-<span id="L3588" class="LineNr">3588 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L3589" class="LineNr">3589 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3590" class="LineNr">3590 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
-<span id="L3591" class="LineNr">3591 </span>   <span class="muControl"> return</span> movement?/go-render
-<span id="L3592" class="LineNr">3592 </span>  <span class="Delimiter">}</span>
-<span id="L3593" class="LineNr">3593 </span>]
-<span id="L3594" class="LineNr">3594 </span>
-<span id="L3595" class="LineNr">3595 </span><span class="Comment"># page-down skips entire wrapped lines, so it can't scroll past lines</span>
-<span id="L3596" class="LineNr">3596 </span><span class="Comment"># taking up the entire screen</span>
-<span id="L3597" class="LineNr">3597 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3597'>page-down</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
-<span id="L3598" class="LineNr">3598 </span>  <span class="Constant">local-scope</span>
-<span id="L3599" class="LineNr">3599 </span>  <span class="Constant">load-inputs</span>
-<span id="L3600" class="LineNr">3600 </span>  <span class="Comment"># if editor contents don't overflow screen, do nothing</span>
-<span id="L3601" class="LineNr">3601 </span>  bottom-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">bottom-of-screen:offset</span>
-<span id="L3602" class="LineNr">3602 </span>  <span class="muControl">return-unless</span> bottom-of-screen
-<span id="L3603" class="LineNr">3603 </span>  <span class="Comment"># if not, position cursor at final character</span>
-<span id="L3604" class="LineNr">3604 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L3605" class="LineNr">3605 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> bottom-of-screen
-<span id="L3606" class="LineNr">3606 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L3607" class="LineNr">3607 </span>  <span class="Comment"># keep one line in common with previous page</span>
-<span id="L3608" class="LineNr">3608 </span>  <span class="Delimiter">{</span>
-<span id="L3609" class="LineNr">3609 </span>    <a href='../065duplex_list.mu.html#L572'>last</a>:char <span class="Special">&lt;-</span> get *before-cursor, <span class="Constant">value:offset</span>
-<span id="L3610" class="LineNr">3610 </span>    newline?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L572'>last</a>, <span class="Constant">10/newline</span>
-<span id="L3611" class="LineNr">3611 </span>    <span class="muControl">break-unless</span> newline?:bool
-<span id="L3612" class="LineNr">3612 </span>    before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
-<span id="L3613" class="LineNr">3613 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L3614" class="LineNr">3614 </span>  <span class="Delimiter">}</span>
-<span id="L3615" class="LineNr">3615 </span>  <span class="Comment"># move cursor and top-of-screen to start of that line</span>
-<span id="L3616" class="LineNr">3616 </span>  <a href='003-shortcuts.mu.html#L3622'>move-to-start-of-line</a> editor
-<span id="L3617" class="LineNr">3617 </span>  before-cursor <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L3618" class="LineNr">3618 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, before-cursor
-<span id="L3619" class="LineNr">3619 </span>]
-<span id="L3620" class="LineNr">3620 </span>
-<span id="L3621" class="LineNr">3621 </span><span class="Comment"># jump to previous newline</span>
-<span id="L3622" class="LineNr">3622 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3622'>move-to-start-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
-<span id="L3623" class="LineNr">3623 </span>  <span class="Constant">local-scope</span>
-<span id="L3624" class="LineNr">3624 </span>  <span class="Constant">load-inputs</span>
-<span id="L3625" class="LineNr">3625 </span>  <span class="Comment"># update cursor column</span>
-<span id="L3626" class="LineNr">3626 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
-<span id="L3627" class="LineNr">3627 </span>  cursor-column:num <span class="Special">&lt;-</span> copy left
-<span id="L3628" class="LineNr">3628 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L3629" class="LineNr">3629 </span>  <span class="Comment"># update before-cursor</span>
-<span id="L3630" class="LineNr">3630 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L3631" class="LineNr">3631 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L3632" class="LineNr">3632 </span>  <span class="Comment"># while not at start of line, move</span>
-<span id="L3633" class="LineNr">3633 </span>  <span class="Delimiter">{</span>
-<span id="L3634" class="LineNr">3634 </span>    at-start-of-text?:bool <span class="Special">&lt;-</span> equal before-cursor, init
-<span id="L3635" class="LineNr">3635 </span>    <span class="muControl">break-if</span> at-start-of-text?
-<span id="L3636" class="LineNr">3636 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a>:char <span class="Special">&lt;-</span> get *before-cursor, <span class="Constant">value:offset</span>
-<span id="L3637" class="LineNr">3637 </span>    at-start-of-line?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L32'>prev</a>, <span class="Constant">10/newline</span>
-<span id="L3638" class="LineNr">3638 </span>    <span class="muControl">break-if</span> at-start-of-line?
-<span id="L3639" class="LineNr">3639 </span>    before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> before-cursor
-<span id="L3640" class="LineNr">3640 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L3641" class="LineNr">3641 </span>    assert before-cursor, <span class="Constant">[move-to-start-of-line tried to move before start of text]</span>
-<span id="L3642" class="LineNr">3642 </span>   <span class="muControl"> loop</span>
-<span id="L3643" class="LineNr">3643 </span>  <span class="Delimiter">}</span>
-<span id="L3644" class="LineNr">3644 </span>]
-<span id="L3645" class="LineNr">3645 </span>
-<span id="L3646" class="LineNr">3646 </span><span class="muScenario">scenario</span> editor-does-not-scroll-past-end [
-<span id="L3647" class="LineNr">3647 </span>  <span class="Constant">local-scope</span>
-<span id="L3648" class="LineNr">3648 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3649" class="LineNr">3649 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3650" class="LineNr">3650 </span><span class="Constant">b]</span>
-<span id="L3651" class="LineNr">3651 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3652" class="LineNr">3652 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3653" class="LineNr">3653 </span>  screen-should-contain [
-<span id="L3654" class="LineNr">3654 </span>   <span class="Constant"> .          .</span>
-<span id="L3655" class="LineNr">3655 </span>   <span class="Constant"> .a         .</span>
-<span id="L3656" class="LineNr">3656 </span>   <span class="Constant"> .b         .</span>
-<span id="L3657" class="LineNr">3657 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L3658" class="LineNr">3658 </span>  ]
-<span id="L3659" class="LineNr">3659 </span>  <span class="Comment"># scroll down</span>
-<span id="L3660" class="LineNr">3660 </span>  assume-console [
-<span id="L3661" class="LineNr">3661 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3662" class="LineNr">3662 </span>  ]
-<span id="L3663" class="LineNr">3663 </span>  run [
-<span id="L3664" class="LineNr">3664 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3665" class="LineNr">3665 </span>  ]
-<span id="L3666" class="LineNr">3666 </span>  <span class="Comment"># screen remains unmodified</span>
-<span id="L3667" class="LineNr">3667 </span>  screen-should-contain [
-<span id="L3668" class="LineNr">3668 </span>   <span class="Constant"> .          .</span>
-<span id="L3669" class="LineNr">3669 </span>   <span class="Constant"> .a         .</span>
-<span id="L3670" class="LineNr">3670 </span>   <span class="Constant"> .b         .</span>
-<span id="L3671" class="LineNr">3671 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L3672" class="LineNr">3672 </span>  ]
-<span id="L3673" class="LineNr">3673 </span>]
-<span id="L3674" class="LineNr">3674 </span>
-<span id="L3675" class="LineNr">3675 </span><span class="muScenario">scenario</span> editor-starts-next-page-at-start-of-wrapped-line [
-<span id="L3676" class="LineNr">3676 </span>  <span class="Constant">local-scope</span>
-<span id="L3677" class="LineNr">3677 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
-<span id="L3678" class="LineNr">3678 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3679" class="LineNr">3679 </span>  <span class="Comment"># editor contains a long last line</span>
-<span id="L3680" class="LineNr">3680 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3681" class="LineNr">3681 </span><span class="Constant">b</span>
-<span id="L3682" class="LineNr">3682 </span><span class="Constant">cdefgh]</span>
-<span id="L3683" class="LineNr">3683 </span>  <span class="Comment"># editor screen triggers wrap of last line</span>
-<span id="L3684" class="LineNr">3684 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L3685" class="LineNr">3685 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3686" class="LineNr">3686 </span>  <span class="Comment"># some part of last line is not displayed</span>
-<span id="L3687" class="LineNr">3687 </span>  screen-should-contain [
-<span id="L3688" class="LineNr">3688 </span>   <span class="Constant"> .          .</span>
-<span id="L3689" class="LineNr">3689 </span>   <span class="Constant"> .a         .</span>
-<span id="L3690" class="LineNr">3690 </span>   <span class="Constant"> .b         .</span>
-<span id="L3691" class="LineNr">3691 </span>   <span class="Constant"> .cde↩      .</span>
-<span id="L3692" class="LineNr">3692 </span>  ]
-<span id="L3693" class="LineNr">3693 </span>  <span class="Comment"># scroll down</span>
-<span id="L3694" class="LineNr">3694 </span>  assume-console [
-<span id="L3695" class="LineNr">3695 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3696" class="LineNr">3696 </span>  ]
-<span id="L3697" class="LineNr">3697 </span>  run [
-<span id="L3698" class="LineNr">3698 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3699" class="LineNr">3699 </span>  ]
-<span id="L3700" class="LineNr">3700 </span>  <span class="Comment"># screen shows entire wrapped line</span>
-<span id="L3701" class="LineNr">3701 </span>  screen-should-contain [
-<span id="L3702" class="LineNr">3702 </span>   <span class="Constant"> .          .</span>
-<span id="L3703" class="LineNr">3703 </span>   <span class="Constant"> .cde↩      .</span>
-<span id="L3704" class="LineNr">3704 </span>   <span class="Constant"> .fgh       .</span>
-<span id="L3705" class="LineNr">3705 </span>   <span class="Constant"> .╌╌╌╌      .</span>
-<span id="L3706" class="LineNr">3706 </span>  ]
-<span id="L3707" class="LineNr">3707 </span>]
-<span id="L3708" class="LineNr">3708 </span>
-<span id="L3709" class="LineNr">3709 </span><span class="muScenario">scenario</span> editor-starts-next-page-at-start-of-wrapped-line-2 [
-<span id="L3710" class="LineNr">3710 </span>  <span class="Constant">local-scope</span>
-<span id="L3711" class="LineNr">3711 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
-<span id="L3712" class="LineNr">3712 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3713" class="LineNr">3713 </span>  <span class="Comment"># editor contains a very long line that occupies last two lines of screen</span>
-<span id="L3714" class="LineNr">3714 </span>  <span class="Comment"># and still has something left over</span>
-<span id="L3715" class="LineNr">3715 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3716" class="LineNr">3716 </span><span class="Constant">bcdefgh]</span>
-<span id="L3717" class="LineNr">3717 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L3718" class="LineNr">3718 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3719" class="LineNr">3719 </span>  <span class="Comment"># some part of last line is not displayed</span>
-<span id="L3720" class="LineNr">3720 </span>  screen-should-contain [
-<span id="L3721" class="LineNr">3721 </span>   <span class="Constant"> .          .</span>
-<span id="L3722" class="LineNr">3722 </span>   <span class="Constant"> .a         .</span>
-<span id="L3723" class="LineNr">3723 </span>   <span class="Constant"> .bcd↩      .</span>
-<span id="L3724" class="LineNr">3724 </span>   <span class="Constant"> .efg↩      .</span>
-<span id="L3725" class="LineNr">3725 </span>  ]
-<span id="L3726" class="LineNr">3726 </span>  <span class="Comment"># scroll down</span>
-<span id="L3727" class="LineNr">3727 </span>  assume-console [
-<span id="L3728" class="LineNr">3728 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3729" class="LineNr">3729 </span>  ]
-<span id="L3730" class="LineNr">3730 </span>  run [
-<span id="L3731" class="LineNr">3731 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3732" class="LineNr">3732 </span>  ]
-<span id="L3733" class="LineNr">3733 </span>  <span class="Comment"># screen shows entire wrapped line</span>
-<span id="L3734" class="LineNr">3734 </span>  screen-should-contain [
-<span id="L3735" class="LineNr">3735 </span>   <span class="Constant"> .          .</span>
+<span id="L3466" class="LineNr">3466 </span>  ]
+<span id="L3467" class="LineNr">3467 </span>  screen-should-contain [
+<span id="L3468" class="LineNr">3468 </span>   <span class="Constant"> .     .</span>
+<span id="L3469" class="LineNr">3469 </span>   <span class="Constant"> .c    .</span>
+<span id="L3470" class="LineNr">3470 </span>   <span class="Constant"> .d    .</span>
+<span id="L3471" class="LineNr">3471 </span>   <span class="Constant"> .e    .</span>
+<span id="L3472" class="LineNr">3472 </span>  ]
+<span id="L3473" class="LineNr">3473 </span>  <span class="Comment"># now try to move left</span>
+<span id="L3474" class="LineNr">3474 </span>  assume-console [
+<span id="L3475" class="LineNr">3475 </span>    press left-arrow
+<span id="L3476" class="LineNr">3476 </span>  ]
+<span id="L3477" class="LineNr">3477 </span>  run [
+<span id="L3478" class="LineNr">3478 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3479" class="LineNr">3479 </span>    3:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L3480" class="LineNr">3480 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L3481" class="LineNr">3481 </span>  ]
+<span id="L3482" class="LineNr">3482 </span>  <span class="Comment"># screen scrolls</span>
+<span id="L3483" class="LineNr">3483 </span>  screen-should-contain [
+<span id="L3484" class="LineNr">3484 </span>   <span class="Constant"> .     .</span>
+<span id="L3485" class="LineNr">3485 </span>   <span class="Constant"> .b    .</span>
+<span id="L3486" class="LineNr">3486 </span>   <span class="Constant"> .c    .</span>
+<span id="L3487" class="LineNr">3487 </span>   <span class="Constant"> .d    .</span>
+<span id="L3488" class="LineNr">3488 </span>  ]
+<span id="L3489" class="LineNr">3489 </span>  memory-should-contain [
+<span id="L3490" class="LineNr">3490 </span>   <span class="Constant"> 3</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L3491" class="LineNr">3491 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L3492" class="LineNr">3492 </span>  ]
+<span id="L3493" class="LineNr">3493 </span>]
+<span id="L3494" class="LineNr">3494 </span>
+<span id="L3495" class="LineNr">3495 </span><span class="muScenario">scenario</span> editor-can-scroll-up-to-start-of-file [
+<span id="L3496" class="LineNr">3496 </span>  <span class="Constant">local-scope</span>
+<span id="L3497" class="LineNr">3497 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3498" class="LineNr">3498 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3499" class="LineNr">3499 </span>  <span class="Comment"># initialize editor with &gt;3 lines</span>
+<span id="L3500" class="LineNr">3500 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3501" class="LineNr">3501 </span><span class="Constant">b</span>
+<span id="L3502" class="LineNr">3502 </span><span class="Constant">c</span>
+<span id="L3503" class="LineNr">3503 </span><span class="Constant">d]</span>
+<span id="L3504" class="LineNr">3504 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3505" class="LineNr">3505 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3506" class="LineNr">3506 </span>  screen-should-contain [
+<span id="L3507" class="LineNr">3507 </span>   <span class="Constant"> .          .</span>
+<span id="L3508" class="LineNr">3508 </span>   <span class="Constant"> .a         .</span>
+<span id="L3509" class="LineNr">3509 </span>   <span class="Constant"> .b         .</span>
+<span id="L3510" class="LineNr">3510 </span>   <span class="Constant"> .c         .</span>
+<span id="L3511" class="LineNr">3511 </span>  ]
+<span id="L3512" class="LineNr">3512 </span>  <span class="Comment"># position cursor at top of second page, then try to move up to start of</span>
+<span id="L3513" class="LineNr">3513 </span>  <span class="Comment"># text</span>
+<span id="L3514" class="LineNr">3514 </span>  assume-console [
+<span id="L3515" class="LineNr">3515 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3516" class="LineNr">3516 </span>    press up-arrow
+<span id="L3517" class="LineNr">3517 </span>    press up-arrow
+<span id="L3518" class="LineNr">3518 </span>  ]
+<span id="L3519" class="LineNr">3519 </span>  run [
+<span id="L3520" class="LineNr">3520 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3521" class="LineNr">3521 </span>  ]
+<span id="L3522" class="LineNr">3522 </span>  <span class="Comment"># screen slides by one line</span>
+<span id="L3523" class="LineNr">3523 </span>  screen-should-contain [
+<span id="L3524" class="LineNr">3524 </span>   <span class="Constant"> .          .</span>
+<span id="L3525" class="LineNr">3525 </span>   <span class="Constant"> .a         .</span>
+<span id="L3526" class="LineNr">3526 </span>   <span class="Constant"> .b         .</span>
+<span id="L3527" class="LineNr">3527 </span>   <span class="Constant"> .c         .</span>
+<span id="L3528" class="LineNr">3528 </span>  ]
+<span id="L3529" class="LineNr">3529 </span>  <span class="Comment"># try to move up again</span>
+<span id="L3530" class="LineNr">3530 </span>  assume-console [
+<span id="L3531" class="LineNr">3531 </span>    press up-arrow
+<span id="L3532" class="LineNr">3532 </span>  ]
+<span id="L3533" class="LineNr">3533 </span>  run [
+<span id="L3534" class="LineNr">3534 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3535" class="LineNr">3535 </span>  ]
+<span id="L3536" class="LineNr">3536 </span>  <span class="Comment"># screen remains unchanged</span>
+<span id="L3537" class="LineNr">3537 </span>  screen-should-contain [
+<span id="L3538" class="LineNr">3538 </span>   <span class="Constant"> .          .</span>
+<span id="L3539" class="LineNr">3539 </span>   <span class="Constant"> .a         .</span>
+<span id="L3540" class="LineNr">3540 </span>   <span class="Constant"> .b         .</span>
+<span id="L3541" class="LineNr">3541 </span>   <span class="Constant"> .c         .</span>
+<span id="L3542" class="LineNr">3542 </span>  ]
+<span id="L3543" class="LineNr">3543 </span>]
+<span id="L3544" class="LineNr">3544 </span>
+<span id="L3545" class="LineNr">3545 </span><span class="Comment"># ctrl-f/page-down - render next page if it exists</span>
+<span id="L3546" class="LineNr">3546 </span>
+<span id="L3547" class="LineNr">3547 </span><span class="muScenario">scenario</span> editor-can-scroll [
+<span id="L3548" class="LineNr">3548 </span>  <span class="Constant">local-scope</span>
+<span id="L3549" class="LineNr">3549 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3550" class="LineNr">3550 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3551" class="LineNr">3551 </span><span class="Constant">b</span>
+<span id="L3552" class="LineNr">3552 </span><span class="Constant">c</span>
+<span id="L3553" class="LineNr">3553 </span><span class="Constant">d]</span>
+<span id="L3554" class="LineNr">3554 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3555" class="LineNr">3555 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3556" class="LineNr">3556 </span>  screen-should-contain [
+<span id="L3557" class="LineNr">3557 </span>   <span class="Constant"> .          .</span>
+<span id="L3558" class="LineNr">3558 </span>   <span class="Constant"> .a         .</span>
+<span id="L3559" class="LineNr">3559 </span>   <span class="Constant"> .b         .</span>
+<span id="L3560" class="LineNr">3560 </span>   <span class="Constant"> .c         .</span>
+<span id="L3561" class="LineNr">3561 </span>  ]
+<span id="L3562" class="LineNr">3562 </span>  <span class="Comment"># scroll down</span>
+<span id="L3563" class="LineNr">3563 </span>  assume-console [
+<span id="L3564" class="LineNr">3564 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3565" class="LineNr">3565 </span>  ]
+<span id="L3566" class="LineNr">3566 </span>  run [
+<span id="L3567" class="LineNr">3567 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3568" class="LineNr">3568 </span>  ]
+<span id="L3569" class="LineNr">3569 </span>  <span class="Comment"># screen shows next page</span>
+<span id="L3570" class="LineNr">3570 </span>  screen-should-contain [
+<span id="L3571" class="LineNr">3571 </span>   <span class="Constant"> .          .</span>
+<span id="L3572" class="LineNr">3572 </span>   <span class="Constant"> .c         .</span>
+<span id="L3573" class="LineNr">3573 </span>   <span class="Constant"> .d         .</span>
+<span id="L3574" class="LineNr">3574 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3575" class="LineNr">3575 </span>  ]
+<span id="L3576" class="LineNr">3576 </span>]
+<span id="L3577" class="LineNr">3577 </span>
+<span id="L3578" class="LineNr">3578 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L3579" class="LineNr">3579 </span>  <span class="Delimiter">{</span>
+<span id="L3580" class="LineNr">3580 </span>    page-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">6/ctrl-f</span>
+<span id="L3581" class="LineNr">3581 </span>    <span class="muControl">break-unless</span> page-down?
+<span id="L3582" class="LineNr">3582 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3583" class="LineNr">3583 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L3584" class="LineNr">3584 </span>    <a href='003-shortcuts.mu.html#L3610'>page-down</a> editor
+<span id="L3585" class="LineNr">3585 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
+<span id="L3586" class="LineNr">3586 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L3587" class="LineNr">3587 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3588" class="LineNr">3588 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
+<span id="L3589" class="LineNr">3589 </span>   <span class="muControl"> return</span> movement?/go-render
+<span id="L3590" class="LineNr">3590 </span>  <span class="Delimiter">}</span>
+<span id="L3591" class="LineNr">3591 </span>]
+<span id="L3592" class="LineNr">3592 </span>
+<span id="L3593" class="LineNr">3593 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L199'>&lt;handle-special-key&gt;</a></span> [
+<span id="L3594" class="LineNr">3594 </span>  <span class="Delimiter">{</span>
+<span id="L3595" class="LineNr">3595 </span>    page-down?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65518/page-down</span>
+<span id="L3596" class="LineNr">3596 </span>    <span class="muControl">break-unless</span> page-down?
+<span id="L3597" class="LineNr">3597 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3598" class="LineNr">3598 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L3599" class="LineNr">3599 </span>    <a href='003-shortcuts.mu.html#L3610'>page-down</a> editor
+<span id="L3600" class="LineNr">3600 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
+<span id="L3601" class="LineNr">3601 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L3602" class="LineNr">3602 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3603" class="LineNr">3603 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
+<span id="L3604" class="LineNr">3604 </span>   <span class="muControl"> return</span> movement?/go-render
+<span id="L3605" class="LineNr">3605 </span>  <span class="Delimiter">}</span>
+<span id="L3606" class="LineNr">3606 </span>]
+<span id="L3607" class="LineNr">3607 </span>
+<span id="L3608" class="LineNr">3608 </span><span class="Comment"># page-down skips entire wrapped lines, so it can't scroll past lines</span>
+<span id="L3609" class="LineNr">3609 </span><span class="Comment"># taking up the entire screen</span>
+<span id="L3610" class="LineNr">3610 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3610'>page-down</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
+<span id="L3611" class="LineNr">3611 </span>  <span class="Constant">local-scope</span>
+<span id="L3612" class="LineNr">3612 </span>  <span class="Constant">load-inputs</span>
+<span id="L3613" class="LineNr">3613 </span>  <span class="Comment"># if editor contents don't overflow screen, do nothing</span>
+<span id="L3614" class="LineNr">3614 </span>  bottom-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">bottom-of-screen:offset</span>
+<span id="L3615" class="LineNr">3615 </span>  <span class="muControl">return-unless</span> bottom-of-screen
+<span id="L3616" class="LineNr">3616 </span>  <span class="Comment"># if not, position cursor at final character</span>
+<span id="L3617" class="LineNr">3617 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L3618" class="LineNr">3618 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> bottom-of-screen
+<span id="L3619" class="LineNr">3619 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
+<span id="L3620" class="LineNr">3620 </span>  <span class="Comment"># keep one line in common with previous page</span>
+<span id="L3621" class="LineNr">3621 </span>  <span class="Delimiter">{</span>
+<span id="L3622" class="LineNr">3622 </span>    <a href='../065duplex_list.mu.html#L629'>last</a>:char <span class="Special">&lt;-</span> get *before-cursor, <span class="Constant">value:offset</span>
+<span id="L3623" class="LineNr">3623 </span>    newline?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L629'>last</a>, <span class="Constant">10/newline</span>
+<span id="L3624" class="LineNr">3624 </span>    <span class="muControl">break-unless</span> newline?:bool
+<span id="L3625" class="LineNr">3625 </span>    before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
+<span id="L3626" class="LineNr">3626 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
+<span id="L3627" class="LineNr">3627 </span>  <span class="Delimiter">}</span>
+<span id="L3628" class="LineNr">3628 </span>  <span class="Comment"># move cursor and top-of-screen to start of that line</span>
+<span id="L3629" class="LineNr">3629 </span>  <a href='003-shortcuts.mu.html#L3635'>move-to-start-of-line</a> editor
+<span id="L3630" class="LineNr">3630 </span>  before-cursor <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L3631" class="LineNr">3631 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, before-cursor
+<span id="L3632" class="LineNr">3632 </span>]
+<span id="L3633" class="LineNr">3633 </span>
+<span id="L3634" class="LineNr">3634 </span><span class="Comment"># jump to previous newline</span>
+<span id="L3635" class="LineNr">3635 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3635'>move-to-start-of-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
+<span id="L3636" class="LineNr">3636 </span>  <span class="Constant">local-scope</span>
+<span id="L3637" class="LineNr">3637 </span>  <span class="Constant">load-inputs</span>
+<span id="L3638" class="LineNr">3638 </span>  <span class="Comment"># update cursor column</span>
+<span id="L3639" class="LineNr">3639 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
+<span id="L3640" class="LineNr">3640 </span>  cursor-column:num <span class="Special">&lt;-</span> copy left
+<span id="L3641" class="LineNr">3641 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
+<span id="L3642" class="LineNr">3642 </span>  <span class="Comment"># update before-cursor</span>
+<span id="L3643" class="LineNr">3643 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L3644" class="LineNr">3644 </span>  init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
+<span id="L3645" class="LineNr">3645 </span>  <span class="Comment"># while not at start of line, move</span>
+<span id="L3646" class="LineNr">3646 </span>  <span class="Delimiter">{</span>
+<span id="L3647" class="LineNr">3647 </span>    at-start-of-text?:bool <span class="Special">&lt;-</span> equal before-cursor, init
+<span id="L3648" class="LineNr">3648 </span>    <span class="muControl">break-if</span> at-start-of-text?
+<span id="L3649" class="LineNr">3649 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a>:char <span class="Special">&lt;-</span> get *before-cursor, <span class="Constant">value:offset</span>
+<span id="L3650" class="LineNr">3650 </span>    at-start-of-line?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L38'>prev</a>, <span class="Constant">10/newline</span>
+<span id="L3651" class="LineNr">3651 </span>    <span class="muControl">break-if</span> at-start-of-line?
+<span id="L3652" class="LineNr">3652 </span>    before-cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> before-cursor
+<span id="L3653" class="LineNr">3653 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
+<span id="L3654" class="LineNr">3654 </span>    assert before-cursor, <span class="Constant">[move-to-start-of-line tried to move before start of text]</span>
+<span id="L3655" class="LineNr">3655 </span>   <span class="muControl"> loop</span>
+<span id="L3656" class="LineNr">3656 </span>  <span class="Delimiter">}</span>
+<span id="L3657" class="LineNr">3657 </span>]
+<span id="L3658" class="LineNr">3658 </span>
+<span id="L3659" class="LineNr">3659 </span><span class="muScenario">scenario</span> editor-does-not-scroll-past-end [
+<span id="L3660" class="LineNr">3660 </span>  <span class="Constant">local-scope</span>
+<span id="L3661" class="LineNr">3661 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3662" class="LineNr">3662 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3663" class="LineNr">3663 </span><span class="Constant">b]</span>
+<span id="L3664" class="LineNr">3664 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3665" class="LineNr">3665 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3666" class="LineNr">3666 </span>  screen-should-contain [
+<span id="L3667" class="LineNr">3667 </span>   <span class="Constant"> .          .</span>
+<span id="L3668" class="LineNr">3668 </span>   <span class="Constant"> .a         .</span>
+<span id="L3669" class="LineNr">3669 </span>   <span class="Constant"> .b         .</span>
+<span id="L3670" class="LineNr">3670 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3671" class="LineNr">3671 </span>  ]
+<span id="L3672" class="LineNr">3672 </span>  <span class="Comment"># scroll down</span>
+<span id="L3673" class="LineNr">3673 </span>  assume-console [
+<span id="L3674" class="LineNr">3674 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3675" class="LineNr">3675 </span>  ]
+<span id="L3676" class="LineNr">3676 </span>  run [
+<span id="L3677" class="LineNr">3677 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3678" class="LineNr">3678 </span>  ]
+<span id="L3679" class="LineNr">3679 </span>  <span class="Comment"># screen remains unmodified</span>
+<span id="L3680" class="LineNr">3680 </span>  screen-should-contain [
+<span id="L3681" class="LineNr">3681 </span>   <span class="Constant"> .          .</span>
+<span id="L3682" class="LineNr">3682 </span>   <span class="Constant"> .a         .</span>
+<span id="L3683" class="LineNr">3683 </span>   <span class="Constant"> .b         .</span>
+<span id="L3684" class="LineNr">3684 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3685" class="LineNr">3685 </span>  ]
+<span id="L3686" class="LineNr">3686 </span>]
+<span id="L3687" class="LineNr">3687 </span>
+<span id="L3688" class="LineNr">3688 </span><span class="muScenario">scenario</span> editor-starts-next-page-at-start-of-wrapped-line [
+<span id="L3689" class="LineNr">3689 </span>  <span class="Constant">local-scope</span>
+<span id="L3690" class="LineNr">3690 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
+<span id="L3691" class="LineNr">3691 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3692" class="LineNr">3692 </span>  <span class="Comment"># editor contains a long last line</span>
+<span id="L3693" class="LineNr">3693 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3694" class="LineNr">3694 </span><span class="Constant">b</span>
+<span id="L3695" class="LineNr">3695 </span><span class="Constant">cdefgh]</span>
+<span id="L3696" class="LineNr">3696 </span>  <span class="Comment"># editor screen triggers wrap of last line</span>
+<span id="L3697" class="LineNr">3697 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L3698" class="LineNr">3698 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3699" class="LineNr">3699 </span>  <span class="Comment"># some part of last line is not displayed</span>
+<span id="L3700" class="LineNr">3700 </span>  screen-should-contain [
+<span id="L3701" class="LineNr">3701 </span>   <span class="Constant"> .          .</span>
+<span id="L3702" class="LineNr">3702 </span>   <span class="Constant"> .a         .</span>
+<span id="L3703" class="LineNr">3703 </span>   <span class="Constant"> .b         .</span>
+<span id="L3704" class="LineNr">3704 </span>   <span class="Constant"> .cde↩      .</span>
+<span id="L3705" class="LineNr">3705 </span>  ]
+<span id="L3706" class="LineNr">3706 </span>  <span class="Comment"># scroll down</span>
+<span id="L3707" class="LineNr">3707 </span>  assume-console [
+<span id="L3708" class="LineNr">3708 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3709" class="LineNr">3709 </span>  ]
+<span id="L3710" class="LineNr">3710 </span>  run [
+<span id="L3711" class="LineNr">3711 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3712" class="LineNr">3712 </span>  ]
+<span id="L3713" class="LineNr">3713 </span>  <span class="Comment"># screen shows entire wrapped line</span>
+<span id="L3714" class="LineNr">3714 </span>  screen-should-contain [
+<span id="L3715" class="LineNr">3715 </span>   <span class="Constant"> .          .</span>
+<span id="L3716" class="LineNr">3716 </span>   <span class="Constant"> .cde↩      .</span>
+<span id="L3717" class="LineNr">3717 </span>   <span class="Constant"> .fgh       .</span>
+<span id="L3718" class="LineNr">3718 </span>   <span class="Constant"> .╌╌╌╌      .</span>
+<span id="L3719" class="LineNr">3719 </span>  ]
+<span id="L3720" class="LineNr">3720 </span>]
+<span id="L3721" class="LineNr">3721 </span>
+<span id="L3722" class="LineNr">3722 </span><span class="muScenario">scenario</span> editor-starts-next-page-at-start-of-wrapped-line-2 [
+<span id="L3723" class="LineNr">3723 </span>  <span class="Constant">local-scope</span>
+<span id="L3724" class="LineNr">3724 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
+<span id="L3725" class="LineNr">3725 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3726" class="LineNr">3726 </span>  <span class="Comment"># editor contains a very long line that occupies last two lines of screen</span>
+<span id="L3727" class="LineNr">3727 </span>  <span class="Comment"># and still has something left over</span>
+<span id="L3728" class="LineNr">3728 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3729" class="LineNr">3729 </span><span class="Constant">bcdefgh]</span>
+<span id="L3730" class="LineNr">3730 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L3731" class="LineNr">3731 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3732" class="LineNr">3732 </span>  <span class="Comment"># some part of last line is not displayed</span>
+<span id="L3733" class="LineNr">3733 </span>  screen-should-contain [
+<span id="L3734" class="LineNr">3734 </span>   <span class="Constant"> .          .</span>
+<span id="L3735" class="LineNr">3735 </span>   <span class="Constant"> .a         .</span>
 <span id="L3736" class="LineNr">3736 </span>   <span class="Constant"> .bcd↩      .</span>
 <span id="L3737" class="LineNr">3737 </span>   <span class="Constant"> .efg↩      .</span>
-<span id="L3738" class="LineNr">3738 </span>   <span class="Constant"> .h         .</span>
-<span id="L3739" class="LineNr">3739 </span>  ]
-<span id="L3740" class="LineNr">3740 </span>]
-<span id="L3741" class="LineNr">3741 </span>
-<span id="L3742" class="LineNr">3742 </span><span class="Comment"># ctrl-b/page-up - render previous page if it exists</span>
-<span id="L3743" class="LineNr">3743 </span>
-<span id="L3744" class="LineNr">3744 </span><span class="muScenario">scenario</span> editor-can-scroll-up [
-<span id="L3745" class="LineNr">3745 </span>  <span class="Constant">local-scope</span>
-<span id="L3746" class="LineNr">3746 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3747" class="LineNr">3747 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3748" class="LineNr">3748 </span><span class="Constant">b</span>
-<span id="L3749" class="LineNr">3749 </span><span class="Constant">c</span>
-<span id="L3750" class="LineNr">3750 </span><span class="Constant">d]</span>
-<span id="L3751" class="LineNr">3751 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3752" class="LineNr">3752 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3753" class="LineNr">3753 </span>  screen-should-contain [
-<span id="L3754" class="LineNr">3754 </span>   <span class="Constant"> .          .</span>
-<span id="L3755" class="LineNr">3755 </span>   <span class="Constant"> .a         .</span>
-<span id="L3756" class="LineNr">3756 </span>   <span class="Constant"> .b         .</span>
-<span id="L3757" class="LineNr">3757 </span>   <span class="Constant"> .c         .</span>
-<span id="L3758" class="LineNr">3758 </span>  ]
-<span id="L3759" class="LineNr">3759 </span>  <span class="Comment"># scroll down</span>
-<span id="L3760" class="LineNr">3760 </span>  assume-console [
-<span id="L3761" class="LineNr">3761 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3762" class="LineNr">3762 </span>  ]
-<span id="L3763" class="LineNr">3763 </span>  run [
-<span id="L3764" class="LineNr">3764 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3765" class="LineNr">3765 </span>  ]
-<span id="L3766" class="LineNr">3766 </span>  <span class="Comment"># screen shows next page</span>
-<span id="L3767" class="LineNr">3767 </span>  screen-should-contain [
-<span id="L3768" class="LineNr">3768 </span>   <span class="Constant"> .          .</span>
-<span id="L3769" class="LineNr">3769 </span>   <span class="Constant"> .c         .</span>
-<span id="L3770" class="LineNr">3770 </span>   <span class="Constant"> .d         .</span>
-<span id="L3771" class="LineNr">3771 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L3772" class="LineNr">3772 </span>  ]
-<span id="L3773" class="LineNr">3773 </span>  <span class="Comment"># scroll back up</span>
-<span id="L3774" class="LineNr">3774 </span>  assume-console [
-<span id="L3775" class="LineNr">3775 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
-<span id="L3776" class="LineNr">3776 </span>  ]
-<span id="L3777" class="LineNr">3777 </span>  run [
-<span id="L3778" class="LineNr">3778 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3779" class="LineNr">3779 </span>  ]
-<span id="L3780" class="LineNr">3780 </span>  <span class="Comment"># screen shows original page again</span>
-<span id="L3781" class="LineNr">3781 </span>  screen-should-contain [
-<span id="L3782" class="LineNr">3782 </span>   <span class="Constant"> .          .</span>
-<span id="L3783" class="LineNr">3783 </span>   <span class="Constant"> .a         .</span>
-<span id="L3784" class="LineNr">3784 </span>   <span class="Constant"> .b         .</span>
-<span id="L3785" class="LineNr">3785 </span>   <span class="Constant"> .c         .</span>
-<span id="L3786" class="LineNr">3786 </span>  ]
-<span id="L3787" class="LineNr">3787 </span>]
-<span id="L3788" class="LineNr">3788 </span>
-<span id="L3789" class="LineNr">3789 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L3790" class="LineNr">3790 </span>  <span class="Delimiter">{</span>
-<span id="L3791" class="LineNr">3791 </span>    page-up?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">2/ctrl-b</span>
-<span id="L3792" class="LineNr">3792 </span>    <span class="muControl">break-unless</span> page-up?
-<span id="L3793" class="LineNr">3793 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3794" class="LineNr">3794 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L3795" class="LineNr">3795 </span>    editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L3820'>page-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L3796" class="LineNr">3796 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
-<span id="L3797" class="LineNr">3797 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L3798" class="LineNr">3798 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3799" class="LineNr">3799 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
-<span id="L3800" class="LineNr">3800 </span>   <span class="muControl"> return</span> movement?/go-render
-<span id="L3801" class="LineNr">3801 </span>  <span class="Delimiter">}</span>
-<span id="L3802" class="LineNr">3802 </span>]
-<span id="L3803" class="LineNr">3803 </span>
-<span id="L3804" class="LineNr">3804 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L199'>&lt;handle-special-key&gt;</a></span> [
-<span id="L3805" class="LineNr">3805 </span>  <span class="Delimiter">{</span>
-<span id="L3806" class="LineNr">3806 </span>    page-up?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65519/page-up</span>
-<span id="L3807" class="LineNr">3807 </span>    <span class="muControl">break-unless</span> page-up?
-<span id="L3808" class="LineNr">3808 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3809" class="LineNr">3809 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L3810" class="LineNr">3810 </span>    editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L3820'>page-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L3811" class="LineNr">3811 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
-<span id="L3812" class="LineNr">3812 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L3813" class="LineNr">3813 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3814" class="LineNr">3814 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
-<span id="L3815" class="LineNr">3815 </span>    <span class="Comment"># don't bother re-rendering if nothing changed. todo: test this</span>
-<span id="L3816" class="LineNr">3816 </span>   <span class="muControl"> return</span> movement?/go-render
-<span id="L3817" class="LineNr">3817 </span>  <span class="Delimiter">}</span>
-<span id="L3818" class="LineNr">3818 </span>]
-<span id="L3819" class="LineNr">3819 </span>
-<span id="L3820" class="LineNr">3820 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3820'>page-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
-<span id="L3821" class="LineNr">3821 </span>  <span class="Constant">local-scope</span>
-<span id="L3822" class="LineNr">3822 </span>  <span class="Constant">load-inputs</span>
-<span id="L3823" class="LineNr">3823 </span>  max:num <span class="Special">&lt;-</span> subtract <a href='../081print.mu.html#L782'>screen-height</a>, <span class="Constant">1/menu-bar</span>, <span class="Constant">1/overlapping-line</span>
-<span id="L3824" class="LineNr">3824 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L3825" class="LineNr">3825 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L3826" class="LineNr">3826 </span>  <span class="Delimiter">{</span>
-<span id="L3827" class="LineNr">3827 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal count, max
-<span id="L3828" class="LineNr">3828 </span>    <span class="muControl">break-if</span> done?
-<span id="L3829" class="LineNr">3829 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> top-of-screen, editor
-<span id="L3830" class="LineNr">3830 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L3831" class="LineNr">3831 </span>    top-of-screen <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L32'>prev</a>
-<span id="L3832" class="LineNr">3832 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
-<span id="L3833" class="LineNr">3833 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
-<span id="L3834" class="LineNr">3834 </span>   <span class="muControl"> loop</span>
-<span id="L3835" class="LineNr">3835 </span>  <span class="Delimiter">}</span>
-<span id="L3836" class="LineNr">3836 </span>]
-<span id="L3837" class="LineNr">3837 </span>
-<span id="L3838" class="LineNr">3838 </span><span class="muScenario">scenario</span> editor-can-scroll-up-multiple-pages [
-<span id="L3839" class="LineNr">3839 </span>  <span class="Constant">local-scope</span>
-<span id="L3840" class="LineNr">3840 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
-<span id="L3841" class="LineNr">3841 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3842" class="LineNr">3842 </span>  <span class="Comment"># initialize editor with 8 lines</span>
-<span id="L3843" class="LineNr">3843 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3844" class="LineNr">3844 </span><span class="Constant">b</span>
-<span id="L3845" class="LineNr">3845 </span><span class="Constant">c</span>
-<span id="L3846" class="LineNr">3846 </span><span class="Constant">d</span>
-<span id="L3847" class="LineNr">3847 </span><span class="Constant">e</span>
-<span id="L3848" class="LineNr">3848 </span><span class="Constant">f</span>
-<span id="L3849" class="LineNr">3849 </span><span class="Constant">g</span>
-<span id="L3850" class="LineNr">3850 </span><span class="Constant">h]</span>
-<span id="L3851" class="LineNr">3851 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L3852" class="LineNr">3852 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3853" class="LineNr">3853 </span>  screen-should-contain [
-<span id="L3854" class="LineNr">3854 </span>   <span class="Constant"> .          .</span>
-<span id="L3855" class="LineNr">3855 </span>   <span class="Constant"> .a         .</span>
-<span id="L3856" class="LineNr">3856 </span>   <span class="Constant"> .b         .</span>
-<span id="L3857" class="LineNr">3857 </span>   <span class="Constant"> .c         .</span>
-<span id="L3858" class="LineNr">3858 </span>  ]
-<span id="L3859" class="LineNr">3859 </span>  <span class="Comment"># scroll down two pages</span>
-<span id="L3860" class="LineNr">3860 </span>  assume-console [
-<span id="L3861" class="LineNr">3861 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3862" class="LineNr">3862 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3863" class="LineNr">3863 </span>  ]
-<span id="L3864" class="LineNr">3864 </span>  run [
-<span id="L3865" class="LineNr">3865 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3866" class="LineNr">3866 </span>  ]
-<span id="L3867" class="LineNr">3867 </span>  <span class="Comment"># screen shows third page</span>
-<span id="L3868" class="LineNr">3868 </span>  screen-should-contain [
-<span id="L3869" class="LineNr">3869 </span>   <span class="Constant"> .          .</span>
-<span id="L3870" class="LineNr">3870 </span>   <span class="Constant"> .e         .</span>
-<span id="L3871" class="LineNr">3871 </span>   <span class="Constant"> .f         .</span>
-<span id="L3872" class="LineNr">3872 </span>   <span class="Constant"> .g         .</span>
-<span id="L3873" class="LineNr">3873 </span>  ]
-<span id="L3874" class="LineNr">3874 </span>  <span class="Comment"># scroll up</span>
-<span id="L3875" class="LineNr">3875 </span>  assume-console [
-<span id="L3876" class="LineNr">3876 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
-<span id="L3877" class="LineNr">3877 </span>  ]
-<span id="L3878" class="LineNr">3878 </span>  run [
-<span id="L3879" class="LineNr">3879 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3880" class="LineNr">3880 </span>  ]
-<span id="L3881" class="LineNr">3881 </span>  <span class="Comment"># screen shows second page</span>
-<span id="L3882" class="LineNr">3882 </span>  screen-should-contain [
-<span id="L3883" class="LineNr">3883 </span>   <span class="Constant"> .          .</span>
-<span id="L3884" class="LineNr">3884 </span>   <span class="Constant"> .c         .</span>
-<span id="L3885" class="LineNr">3885 </span>   <span class="Constant"> .d         .</span>
-<span id="L3886" class="LineNr">3886 </span>   <span class="Constant"> .e         .</span>
-<span id="L3887" class="LineNr">3887 </span>  ]
-<span id="L3888" class="LineNr">3888 </span>  <span class="Comment"># scroll up again</span>
-<span id="L3889" class="LineNr">3889 </span>  assume-console [
-<span id="L3890" class="LineNr">3890 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
-<span id="L3891" class="LineNr">3891 </span>  ]
-<span id="L3892" class="LineNr">3892 </span>  run [
-<span id="L3893" class="LineNr">3893 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3894" class="LineNr">3894 </span>  ]
-<span id="L3895" class="LineNr">3895 </span>  <span class="Comment"># screen shows original page again</span>
-<span id="L3896" class="LineNr">3896 </span>  screen-should-contain [
-<span id="L3897" class="LineNr">3897 </span>   <span class="Constant"> .          .</span>
-<span id="L3898" class="LineNr">3898 </span>   <span class="Constant"> .a         .</span>
-<span id="L3899" class="LineNr">3899 </span>   <span class="Constant"> .b         .</span>
-<span id="L3900" class="LineNr">3900 </span>   <span class="Constant"> .c         .</span>
-<span id="L3901" class="LineNr">3901 </span>  ]
-<span id="L3902" class="LineNr">3902 </span>]
-<span id="L3903" class="LineNr">3903 </span>
-<span id="L3904" class="LineNr">3904 </span><span class="muScenario">scenario</span> editor-can-scroll-up-wrapped-lines [
-<span id="L3905" class="LineNr">3905 </span>  <span class="Constant">local-scope</span>
-<span id="L3906" class="LineNr">3906 </span>  <span class="Comment"># screen has 1 line for menu + 5 lines for text</span>
-<span id="L3907" class="LineNr">3907 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">6/height</span>
-<span id="L3908" class="LineNr">3908 </span>  <span class="Comment"># editor contains a long line in the first page</span>
-<span id="L3909" class="LineNr">3909 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3910" class="LineNr">3910 </span><span class="Constant">b</span>
-<span id="L3911" class="LineNr">3911 </span><span class="Constant">cdefgh</span>
-<span id="L3912" class="LineNr">3912 </span><span class="Constant">i</span>
-<span id="L3913" class="LineNr">3913 </span><span class="Constant">j</span>
-<span id="L3914" class="LineNr">3914 </span><span class="Constant">k</span>
-<span id="L3915" class="LineNr">3915 </span><span class="Constant">l</span>
-<span id="L3916" class="LineNr">3916 </span><span class="Constant">m</span>
-<span id="L3917" class="LineNr">3917 </span><span class="Constant">n</span>
-<span id="L3918" class="LineNr">3918 </span><span class="Constant">o]</span>
-<span id="L3919" class="LineNr">3919 </span>  <span class="Comment"># editor screen triggers wrap of last line</span>
-<span id="L3920" class="LineNr">3920 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L3921" class="LineNr">3921 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3922" class="LineNr">3922 </span>  <span class="Comment"># some part of last line is not displayed</span>
-<span id="L3923" class="LineNr">3923 </span>  screen-should-contain [
-<span id="L3924" class="LineNr">3924 </span>   <span class="Constant"> .          .</span>
-<span id="L3925" class="LineNr">3925 </span>   <span class="Constant"> .a         .</span>
-<span id="L3926" class="LineNr">3926 </span>   <span class="Constant"> .b         .</span>
-<span id="L3927" class="LineNr">3927 </span>   <span class="Constant"> .cde↩      .</span>
-<span id="L3928" class="LineNr">3928 </span>   <span class="Constant"> .fgh       .</span>
-<span id="L3929" class="LineNr">3929 </span>   <span class="Constant"> .i         .</span>
-<span id="L3930" class="LineNr">3930 </span>  ]
-<span id="L3931" class="LineNr">3931 </span>  <span class="Comment"># scroll down a page and a line</span>
-<span id="L3932" class="LineNr">3932 </span>  assume-console [
-<span id="L3933" class="LineNr">3933 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3934" class="LineNr">3934 </span>    left-click<span class="Constant"> 5</span>,<span class="Constant"> 0</span>
-<span id="L3935" class="LineNr">3935 </span>    press down-arrow
-<span id="L3936" class="LineNr">3936 </span>  ]
-<span id="L3937" class="LineNr">3937 </span>  run [
-<span id="L3938" class="LineNr">3938 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3939" class="LineNr">3939 </span>  ]
-<span id="L3940" class="LineNr">3940 </span>  <span class="Comment"># screen shows entire wrapped line</span>
-<span id="L3941" class="LineNr">3941 </span>  screen-should-contain [
-<span id="L3942" class="LineNr">3942 </span>   <span class="Constant"> .          .</span>
-<span id="L3943" class="LineNr">3943 </span>   <span class="Constant"> .j         .</span>
-<span id="L3944" class="LineNr">3944 </span>   <span class="Constant"> .k         .</span>
-<span id="L3945" class="LineNr">3945 </span>   <span class="Constant"> .l         .</span>
-<span id="L3946" class="LineNr">3946 </span>   <span class="Constant"> .m         .</span>
-<span id="L3947" class="LineNr">3947 </span>   <span class="Constant"> .n         .</span>
-<span id="L3948" class="LineNr">3948 </span>  ]
-<span id="L3949" class="LineNr">3949 </span>  <span class="Comment"># now scroll up one page</span>
-<span id="L3950" class="LineNr">3950 </span>  assume-console [
-<span id="L3951" class="LineNr">3951 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L3738" class="LineNr">3738 </span>  ]
+<span id="L3739" class="LineNr">3739 </span>  <span class="Comment"># scroll down</span>
+<span id="L3740" class="LineNr">3740 </span>  assume-console [
+<span id="L3741" class="LineNr">3741 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3742" class="LineNr">3742 </span>  ]
+<span id="L3743" class="LineNr">3743 </span>  run [
+<span id="L3744" class="LineNr">3744 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3745" class="LineNr">3745 </span>  ]
+<span id="L3746" class="LineNr">3746 </span>  <span class="Comment"># screen shows entire wrapped line</span>
+<span id="L3747" class="LineNr">3747 </span>  screen-should-contain [
+<span id="L3748" class="LineNr">3748 </span>   <span class="Constant"> .          .</span>
+<span id="L3749" class="LineNr">3749 </span>   <span class="Constant"> .bcd↩      .</span>
+<span id="L3750" class="LineNr">3750 </span>   <span class="Constant"> .efg↩      .</span>
+<span id="L3751" class="LineNr">3751 </span>   <span class="Constant"> .h         .</span>
+<span id="L3752" class="LineNr">3752 </span>  ]
+<span id="L3753" class="LineNr">3753 </span>]
+<span id="L3754" class="LineNr">3754 </span>
+<span id="L3755" class="LineNr">3755 </span><span class="Comment"># ctrl-b/page-up - render previous page if it exists</span>
+<span id="L3756" class="LineNr">3756 </span>
+<span id="L3757" class="LineNr">3757 </span><span class="muScenario">scenario</span> editor-can-scroll-up [
+<span id="L3758" class="LineNr">3758 </span>  <span class="Constant">local-scope</span>
+<span id="L3759" class="LineNr">3759 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3760" class="LineNr">3760 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3761" class="LineNr">3761 </span><span class="Constant">b</span>
+<span id="L3762" class="LineNr">3762 </span><span class="Constant">c</span>
+<span id="L3763" class="LineNr">3763 </span><span class="Constant">d]</span>
+<span id="L3764" class="LineNr">3764 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3765" class="LineNr">3765 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3766" class="LineNr">3766 </span>  screen-should-contain [
+<span id="L3767" class="LineNr">3767 </span>   <span class="Constant"> .          .</span>
+<span id="L3768" class="LineNr">3768 </span>   <span class="Constant"> .a         .</span>
+<span id="L3769" class="LineNr">3769 </span>   <span class="Constant"> .b         .</span>
+<span id="L3770" class="LineNr">3770 </span>   <span class="Constant"> .c         .</span>
+<span id="L3771" class="LineNr">3771 </span>  ]
+<span id="L3772" class="LineNr">3772 </span>  <span class="Comment"># scroll down</span>
+<span id="L3773" class="LineNr">3773 </span>  assume-console [
+<span id="L3774" class="LineNr">3774 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3775" class="LineNr">3775 </span>  ]
+<span id="L3776" class="LineNr">3776 </span>  run [
+<span id="L3777" class="LineNr">3777 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3778" class="LineNr">3778 </span>  ]
+<span id="L3779" class="LineNr">3779 </span>  <span class="Comment"># screen shows next page</span>
+<span id="L3780" class="LineNr">3780 </span>  screen-should-contain [
+<span id="L3781" class="LineNr">3781 </span>   <span class="Constant"> .          .</span>
+<span id="L3782" class="LineNr">3782 </span>   <span class="Constant"> .c         .</span>
+<span id="L3783" class="LineNr">3783 </span>   <span class="Constant"> .d         .</span>
+<span id="L3784" class="LineNr">3784 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L3785" class="LineNr">3785 </span>  ]
+<span id="L3786" class="LineNr">3786 </span>  <span class="Comment"># scroll back up</span>
+<span id="L3787" class="LineNr">3787 </span>  assume-console [
+<span id="L3788" class="LineNr">3788 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L3789" class="LineNr">3789 </span>  ]
+<span id="L3790" class="LineNr">3790 </span>  run [
+<span id="L3791" class="LineNr">3791 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3792" class="LineNr">3792 </span>  ]
+<span id="L3793" class="LineNr">3793 </span>  <span class="Comment"># screen shows original page again</span>
+<span id="L3794" class="LineNr">3794 </span>  screen-should-contain [
+<span id="L3795" class="LineNr">3795 </span>   <span class="Constant"> .          .</span>
+<span id="L3796" class="LineNr">3796 </span>   <span class="Constant"> .a         .</span>
+<span id="L3797" class="LineNr">3797 </span>   <span class="Constant"> .b         .</span>
+<span id="L3798" class="LineNr">3798 </span>   <span class="Constant"> .c         .</span>
+<span id="L3799" class="LineNr">3799 </span>  ]
+<span id="L3800" class="LineNr">3800 </span>]
+<span id="L3801" class="LineNr">3801 </span>
+<span id="L3802" class="LineNr">3802 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L3803" class="LineNr">3803 </span>  <span class="Delimiter">{</span>
+<span id="L3804" class="LineNr">3804 </span>    page-up?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">2/ctrl-b</span>
+<span id="L3805" class="LineNr">3805 </span>    <span class="muControl">break-unless</span> page-up?
+<span id="L3806" class="LineNr">3806 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3807" class="LineNr">3807 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L3808" class="LineNr">3808 </span>    editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L3833'>page-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L3809" class="LineNr">3809 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
+<span id="L3810" class="LineNr">3810 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L3811" class="LineNr">3811 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3812" class="LineNr">3812 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
+<span id="L3813" class="LineNr">3813 </span>   <span class="muControl"> return</span> movement?/go-render
+<span id="L3814" class="LineNr">3814 </span>  <span class="Delimiter">}</span>
+<span id="L3815" class="LineNr">3815 </span>]
+<span id="L3816" class="LineNr">3816 </span>
+<span id="L3817" class="LineNr">3817 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L199'>&lt;handle-special-key&gt;</a></span> [
+<span id="L3818" class="LineNr">3818 </span>  <span class="Delimiter">{</span>
+<span id="L3819" class="LineNr">3819 </span>    page-up?:bool <span class="Special">&lt;-</span> equal k, <span class="Constant">65519/page-up</span>
+<span id="L3820" class="LineNr">3820 </span>    <span class="muControl">break-unless</span> page-up?
+<span id="L3821" class="LineNr">3821 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3822" class="LineNr">3822 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L3823" class="LineNr">3823 </span>    editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L3833'>page-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L3824" class="LineNr">3824 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
+<span id="L3825" class="LineNr">3825 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L3826" class="LineNr">3826 </span>    top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3827" class="LineNr">3827 </span>    movement?:bool <span class="Special">&lt;-</span> not-equal top-of-screen, old-top
+<span id="L3828" class="LineNr">3828 </span>    <span class="Comment"># don't bother re-rendering if nothing changed. todo: test this</span>
+<span id="L3829" class="LineNr">3829 </span>   <span class="muControl"> return</span> movement?/go-render
+<span id="L3830" class="LineNr">3830 </span>  <span class="Delimiter">}</span>
+<span id="L3831" class="LineNr">3831 </span>]
+<span id="L3832" class="LineNr">3832 </span>
+<span id="L3833" class="LineNr">3833 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L3833'>page-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>editor:&amp;:editor [
+<span id="L3834" class="LineNr">3834 </span>  <span class="Constant">local-scope</span>
+<span id="L3835" class="LineNr">3835 </span>  <span class="Constant">load-inputs</span>
+<span id="L3836" class="LineNr">3836 </span>  max:num <span class="Special">&lt;-</span> subtract <a href='../081print.mu.html#L782'>screen-height</a>, <span class="Constant">1/menu-bar</span>, <span class="Constant">1/overlapping-line</span>
+<span id="L3837" class="LineNr">3837 </span>  count:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L3838" class="LineNr">3838 </span>  top-of-screen:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L3839" class="LineNr">3839 </span>  <span class="Delimiter">{</span>
+<span id="L3840" class="LineNr">3840 </span>    done?:bool <span class="Special">&lt;-</span> greater-or-equal count, max
+<span id="L3841" class="LineNr">3841 </span>    <span class="muControl">break-if</span> done?
+<span id="L3842" class="LineNr">3842 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> top-of-screen, editor
+<span id="L3843" class="LineNr">3843 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L3844" class="LineNr">3844 </span>    top-of-screen <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L38'>prev</a>
+<span id="L3845" class="LineNr">3845 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, top-of-screen
+<span id="L3846" class="LineNr">3846 </span>    count <span class="Special">&lt;-</span> add count,<span class="Constant"> 1</span>
+<span id="L3847" class="LineNr">3847 </span>   <span class="muControl"> loop</span>
+<span id="L3848" class="LineNr">3848 </span>  <span class="Delimiter">}</span>
+<span id="L3849" class="LineNr">3849 </span>]
+<span id="L3850" class="LineNr">3850 </span>
+<span id="L3851" class="LineNr">3851 </span><span class="muScenario">scenario</span> editor-can-scroll-up-multiple-pages [
+<span id="L3852" class="LineNr">3852 </span>  <span class="Constant">local-scope</span>
+<span id="L3853" class="LineNr">3853 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines</span>
+<span id="L3854" class="LineNr">3854 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3855" class="LineNr">3855 </span>  <span class="Comment"># initialize editor with 8 lines</span>
+<span id="L3856" class="LineNr">3856 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3857" class="LineNr">3857 </span><span class="Constant">b</span>
+<span id="L3858" class="LineNr">3858 </span><span class="Constant">c</span>
+<span id="L3859" class="LineNr">3859 </span><span class="Constant">d</span>
+<span id="L3860" class="LineNr">3860 </span><span class="Constant">e</span>
+<span id="L3861" class="LineNr">3861 </span><span class="Constant">f</span>
+<span id="L3862" class="LineNr">3862 </span><span class="Constant">g</span>
+<span id="L3863" class="LineNr">3863 </span><span class="Constant">h]</span>
+<span id="L3864" class="LineNr">3864 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L3865" class="LineNr">3865 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3866" class="LineNr">3866 </span>  screen-should-contain [
+<span id="L3867" class="LineNr">3867 </span>   <span class="Constant"> .          .</span>
+<span id="L3868" class="LineNr">3868 </span>   <span class="Constant"> .a         .</span>
+<span id="L3869" class="LineNr">3869 </span>   <span class="Constant"> .b         .</span>
+<span id="L3870" class="LineNr">3870 </span>   <span class="Constant"> .c         .</span>
+<span id="L3871" class="LineNr">3871 </span>  ]
+<span id="L3872" class="LineNr">3872 </span>  <span class="Comment"># scroll down two pages</span>
+<span id="L3873" class="LineNr">3873 </span>  assume-console [
+<span id="L3874" class="LineNr">3874 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3875" class="LineNr">3875 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3876" class="LineNr">3876 </span>  ]
+<span id="L3877" class="LineNr">3877 </span>  run [
+<span id="L3878" class="LineNr">3878 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3879" class="LineNr">3879 </span>  ]
+<span id="L3880" class="LineNr">3880 </span>  <span class="Comment"># screen shows third page</span>
+<span id="L3881" class="LineNr">3881 </span>  screen-should-contain [
+<span id="L3882" class="LineNr">3882 </span>   <span class="Constant"> .          .</span>
+<span id="L3883" class="LineNr">3883 </span>   <span class="Constant"> .e         .</span>
+<span id="L3884" class="LineNr">3884 </span>   <span class="Constant"> .f         .</span>
+<span id="L3885" class="LineNr">3885 </span>   <span class="Constant"> .g         .</span>
+<span id="L3886" class="LineNr">3886 </span>  ]
+<span id="L3887" class="LineNr">3887 </span>  <span class="Comment"># scroll up</span>
+<span id="L3888" class="LineNr">3888 </span>  assume-console [
+<span id="L3889" class="LineNr">3889 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L3890" class="LineNr">3890 </span>  ]
+<span id="L3891" class="LineNr">3891 </span>  run [
+<span id="L3892" class="LineNr">3892 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3893" class="LineNr">3893 </span>  ]
+<span id="L3894" class="LineNr">3894 </span>  <span class="Comment"># screen shows second page</span>
+<span id="L3895" class="LineNr">3895 </span>  screen-should-contain [
+<span id="L3896" class="LineNr">3896 </span>   <span class="Constant"> .          .</span>
+<span id="L3897" class="LineNr">3897 </span>   <span class="Constant"> .c         .</span>
+<span id="L3898" class="LineNr">3898 </span>   <span class="Constant"> .d         .</span>
+<span id="L3899" class="LineNr">3899 </span>   <span class="Constant"> .e         .</span>
+<span id="L3900" class="LineNr">3900 </span>  ]
+<span id="L3901" class="LineNr">3901 </span>  <span class="Comment"># scroll up again</span>
+<span id="L3902" class="LineNr">3902 </span>  assume-console [
+<span id="L3903" class="LineNr">3903 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L3904" class="LineNr">3904 </span>  ]
+<span id="L3905" class="LineNr">3905 </span>  run [
+<span id="L3906" class="LineNr">3906 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3907" class="LineNr">3907 </span>  ]
+<span id="L3908" class="LineNr">3908 </span>  <span class="Comment"># screen shows original page again</span>
+<span id="L3909" class="LineNr">3909 </span>  screen-should-contain [
+<span id="L3910" class="LineNr">3910 </span>   <span class="Constant"> .          .</span>
+<span id="L3911" class="LineNr">3911 </span>   <span class="Constant"> .a         .</span>
+<span id="L3912" class="LineNr">3912 </span>   <span class="Constant"> .b         .</span>
+<span id="L3913" class="LineNr">3913 </span>   <span class="Constant"> .c         .</span>
+<span id="L3914" class="LineNr">3914 </span>  ]
+<span id="L3915" class="LineNr">3915 </span>]
+<span id="L3916" class="LineNr">3916 </span>
+<span id="L3917" class="LineNr">3917 </span><span class="muScenario">scenario</span> editor-can-scroll-up-wrapped-lines [
+<span id="L3918" class="LineNr">3918 </span>  <span class="Constant">local-scope</span>
+<span id="L3919" class="LineNr">3919 </span>  <span class="Comment"># screen has 1 line for menu + 5 lines for text</span>
+<span id="L3920" class="LineNr">3920 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">6/height</span>
+<span id="L3921" class="LineNr">3921 </span>  <span class="Comment"># editor contains a long line in the first page</span>
+<span id="L3922" class="LineNr">3922 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3923" class="LineNr">3923 </span><span class="Constant">b</span>
+<span id="L3924" class="LineNr">3924 </span><span class="Constant">cdefgh</span>
+<span id="L3925" class="LineNr">3925 </span><span class="Constant">i</span>
+<span id="L3926" class="LineNr">3926 </span><span class="Constant">j</span>
+<span id="L3927" class="LineNr">3927 </span><span class="Constant">k</span>
+<span id="L3928" class="LineNr">3928 </span><span class="Constant">l</span>
+<span id="L3929" class="LineNr">3929 </span><span class="Constant">m</span>
+<span id="L3930" class="LineNr">3930 </span><span class="Constant">n</span>
+<span id="L3931" class="LineNr">3931 </span><span class="Constant">o]</span>
+<span id="L3932" class="LineNr">3932 </span>  <span class="Comment"># editor screen triggers wrap of last line</span>
+<span id="L3933" class="LineNr">3933 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L3934" class="LineNr">3934 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3935" class="LineNr">3935 </span>  <span class="Comment"># some part of last line is not displayed</span>
+<span id="L3936" class="LineNr">3936 </span>  screen-should-contain [
+<span id="L3937" class="LineNr">3937 </span>   <span class="Constant"> .          .</span>
+<span id="L3938" class="LineNr">3938 </span>   <span class="Constant"> .a         .</span>
+<span id="L3939" class="LineNr">3939 </span>   <span class="Constant"> .b         .</span>
+<span id="L3940" class="LineNr">3940 </span>   <span class="Constant"> .cde↩      .</span>
+<span id="L3941" class="LineNr">3941 </span>   <span class="Constant"> .fgh       .</span>
+<span id="L3942" class="LineNr">3942 </span>   <span class="Constant"> .i         .</span>
+<span id="L3943" class="LineNr">3943 </span>  ]
+<span id="L3944" class="LineNr">3944 </span>  <span class="Comment"># scroll down a page and a line</span>
+<span id="L3945" class="LineNr">3945 </span>  assume-console [
+<span id="L3946" class="LineNr">3946 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L3947" class="LineNr">3947 </span>    left-click<span class="Constant"> 5</span>,<span class="Constant"> 0</span>
+<span id="L3948" class="LineNr">3948 </span>    press down-arrow
+<span id="L3949" class="LineNr">3949 </span>  ]
+<span id="L3950" class="LineNr">3950 </span>  run [
+<span id="L3951" class="LineNr">3951 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L3952" class="LineNr">3952 </span>  ]
-<span id="L3953" class="LineNr">3953 </span>  run [
-<span id="L3954" class="LineNr">3954 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3955" class="LineNr">3955 </span>  ]
-<span id="L3956" class="LineNr">3956 </span>  <span class="Comment"># screen resets</span>
-<span id="L3957" class="LineNr">3957 </span>  screen-should-contain [
-<span id="L3958" class="LineNr">3958 </span>   <span class="Constant"> .          .</span>
-<span id="L3959" class="LineNr">3959 </span>   <span class="Constant"> .b         .</span>
-<span id="L3960" class="LineNr">3960 </span>   <span class="Constant"> .cde↩      .</span>
-<span id="L3961" class="LineNr">3961 </span>   <span class="Constant"> .fgh       .</span>
-<span id="L3962" class="LineNr">3962 </span>   <span class="Constant"> .i         .</span>
-<span id="L3963" class="LineNr">3963 </span>   <span class="Constant"> .j         .</span>
-<span id="L3964" class="LineNr">3964 </span>  ]
-<span id="L3965" class="LineNr">3965 </span>]
-<span id="L3966" class="LineNr">3966 </span>
-<span id="L3967" class="LineNr">3967 </span><span class="muScenario">scenario</span> editor-can-scroll-up-wrapped-lines-2 [
-<span id="L3968" class="LineNr">3968 </span>  <span class="Constant">local-scope</span>
-<span id="L3969" class="LineNr">3969 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
-<span id="L3970" class="LineNr">3970 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L3971" class="LineNr">3971 </span>  <span class="Comment"># editor contains a very long line that occupies last two lines of screen</span>
-<span id="L3972" class="LineNr">3972 </span>  <span class="Comment"># and still has something left over</span>
-<span id="L3973" class="LineNr">3973 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
-<span id="L3974" class="LineNr">3974 </span><span class="Constant">bcdefgh]</span>
-<span id="L3975" class="LineNr">3975 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L3976" class="LineNr">3976 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L3977" class="LineNr">3977 </span>  <span class="Comment"># some part of last line is not displayed</span>
-<span id="L3978" class="LineNr">3978 </span>  screen-should-contain [
-<span id="L3979" class="LineNr">3979 </span>   <span class="Constant"> .          .</span>
-<span id="L3980" class="LineNr">3980 </span>   <span class="Constant"> .a         .</span>
-<span id="L3981" class="LineNr">3981 </span>   <span class="Constant"> .bcd↩      .</span>
-<span id="L3982" class="LineNr">3982 </span>   <span class="Constant"> .efg↩      .</span>
-<span id="L3983" class="LineNr">3983 </span>  ]
-<span id="L3984" class="LineNr">3984 </span>  <span class="Comment"># scroll down</span>
-<span id="L3985" class="LineNr">3985 </span>  assume-console [
-<span id="L3986" class="LineNr">3986 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L3987" class="LineNr">3987 </span>  ]
-<span id="L3988" class="LineNr">3988 </span>  run [
-<span id="L3989" class="LineNr">3989 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L3990" class="LineNr">3990 </span>  ]
-<span id="L3991" class="LineNr">3991 </span>  <span class="Comment"># screen shows entire wrapped line</span>
-<span id="L3992" class="LineNr">3992 </span>  screen-should-contain [
-<span id="L3993" class="LineNr">3993 </span>   <span class="Constant"> .          .</span>
+<span id="L3953" class="LineNr">3953 </span>  <span class="Comment"># screen shows entire wrapped line</span>
+<span id="L3954" class="LineNr">3954 </span>  screen-should-contain [
+<span id="L3955" class="LineNr">3955 </span>   <span class="Constant"> .          .</span>
+<span id="L3956" class="LineNr">3956 </span>   <span class="Constant"> .j         .</span>
+<span id="L3957" class="LineNr">3957 </span>   <span class="Constant"> .k         .</span>
+<span id="L3958" class="LineNr">3958 </span>   <span class="Constant"> .l         .</span>
+<span id="L3959" class="LineNr">3959 </span>   <span class="Constant"> .m         .</span>
+<span id="L3960" class="LineNr">3960 </span>   <span class="Constant"> .n         .</span>
+<span id="L3961" class="LineNr">3961 </span>  ]
+<span id="L3962" class="LineNr">3962 </span>  <span class="Comment"># now scroll up one page</span>
+<span id="L3963" class="LineNr">3963 </span>  assume-console [
+<span id="L3964" class="LineNr">3964 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L3965" class="LineNr">3965 </span>  ]
+<span id="L3966" class="LineNr">3966 </span>  run [
+<span id="L3967" class="LineNr">3967 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L3968" class="LineNr">3968 </span>  ]
+<span id="L3969" class="LineNr">3969 </span>  <span class="Comment"># screen resets</span>
+<span id="L3970" class="LineNr">3970 </span>  screen-should-contain [
+<span id="L3971" class="LineNr">3971 </span>   <span class="Constant"> .          .</span>
+<span id="L3972" class="LineNr">3972 </span>   <span class="Constant"> .b         .</span>
+<span id="L3973" class="LineNr">3973 </span>   <span class="Constant"> .cde↩      .</span>
+<span id="L3974" class="LineNr">3974 </span>   <span class="Constant"> .fgh       .</span>
+<span id="L3975" class="LineNr">3975 </span>   <span class="Constant"> .i         .</span>
+<span id="L3976" class="LineNr">3976 </span>   <span class="Constant"> .j         .</span>
+<span id="L3977" class="LineNr">3977 </span>  ]
+<span id="L3978" class="LineNr">3978 </span>]
+<span id="L3979" class="LineNr">3979 </span>
+<span id="L3980" class="LineNr">3980 </span><span class="muScenario">scenario</span> editor-can-scroll-up-wrapped-lines-2 [
+<span id="L3981" class="LineNr">3981 </span>  <span class="Constant">local-scope</span>
+<span id="L3982" class="LineNr">3982 </span>  <span class="Comment"># screen has 1 line for menu + 3 lines for text</span>
+<span id="L3983" class="LineNr">3983 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L3984" class="LineNr">3984 </span>  <span class="Comment"># editor contains a very long line that occupies last two lines of screen</span>
+<span id="L3985" class="LineNr">3985 </span>  <span class="Comment"># and still has something left over</span>
+<span id="L3986" class="LineNr">3986 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a</span>
+<span id="L3987" class="LineNr">3987 </span><span class="Constant">bcdefgh]</span>
+<span id="L3988" class="LineNr">3988 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L3989" class="LineNr">3989 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L3990" class="LineNr">3990 </span>  <span class="Comment"># some part of last line is not displayed</span>
+<span id="L3991" class="LineNr">3991 </span>  screen-should-contain [
+<span id="L3992" class="LineNr">3992 </span>   <span class="Constant"> .          .</span>
+<span id="L3993" class="LineNr">3993 </span>   <span class="Constant"> .a         .</span>
 <span id="L3994" class="LineNr">3994 </span>   <span class="Constant"> .bcd↩      .</span>
 <span id="L3995" class="LineNr">3995 </span>   <span class="Constant"> .efg↩      .</span>
-<span id="L3996" class="LineNr">3996 </span>   <span class="Constant"> .h         .</span>
-<span id="L3997" class="LineNr">3997 </span>  ]
-<span id="L3998" class="LineNr">3998 </span>  <span class="Comment"># scroll back up</span>
-<span id="L3999" class="LineNr">3999 </span>  assume-console [
-<span id="L4000" class="LineNr">4000 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
-<span id="L4001" class="LineNr">4001 </span>  ]
-<span id="L4002" class="LineNr">4002 </span>  run [
-<span id="L4003" class="LineNr">4003 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4004" class="LineNr">4004 </span>  ]
-<span id="L4005" class="LineNr">4005 </span>  <span class="Comment"># screen resets</span>
-<span id="L4006" class="LineNr">4006 </span>  screen-should-contain [
-<span id="L4007" class="LineNr">4007 </span>   <span class="Constant"> .          .</span>
-<span id="L4008" class="LineNr">4008 </span>   <span class="Constant"> .a         .</span>
-<span id="L4009" class="LineNr">4009 </span>   <span class="Constant"> .bcd↩      .</span>
-<span id="L4010" class="LineNr">4010 </span>   <span class="Constant"> .efg↩      .</span>
-<span id="L4011" class="LineNr">4011 </span>  ]
-<span id="L4012" class="LineNr">4012 </span>]
-<span id="L4013" class="LineNr">4013 </span>
-<span id="L4014" class="LineNr">4014 </span><span class="muScenario">scenario</span> editor-can-scroll-up-past-nonempty-lines [
-<span id="L4015" class="LineNr">4015 </span>  <span class="Constant">local-scope</span>
-<span id="L4016" class="LineNr">4016 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L4017" class="LineNr">4017 </span>  <span class="Comment"># text with empty line in second screen</span>
-<span id="L4018" class="LineNr">4018 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[axx</span>
-<span id="L4019" class="LineNr">4019 </span><span class="Constant">bxx</span>
-<span id="L4020" class="LineNr">4020 </span><span class="Constant">cxx</span>
-<span id="L4021" class="LineNr">4021 </span><span class="Constant">dxx</span>
-<span id="L4022" class="LineNr">4022 </span><span class="Constant">exx</span>
-<span id="L4023" class="LineNr">4023 </span><span class="Constant">fxx</span>
-<span id="L4024" class="LineNr">4024 </span><span class="Constant">gxx</span>
-<span id="L4025" class="LineNr">4025 </span><span class="Constant">hxx</span>
-<span id="L4026" class="LineNr">4026 </span><span class="Constant">]</span>
-<span id="L4027" class="LineNr">4027 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L4028" class="LineNr">4028 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4029" class="LineNr">4029 </span>  screen-should-contain [
-<span id="L4030" class="LineNr">4030 </span>   <span class="Constant"> .          .</span>
-<span id="L4031" class="LineNr">4031 </span>   <span class="Constant"> .axx       .</span>
-<span id="L4032" class="LineNr">4032 </span>   <span class="Constant"> .bxx       .</span>
-<span id="L4033" class="LineNr">4033 </span>   <span class="Constant"> .cxx       .</span>
-<span id="L4034" class="LineNr">4034 </span>  ]
-<span id="L4035" class="LineNr">4035 </span>  assume-console [
-<span id="L4036" class="LineNr">4036 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L4037" class="LineNr">4037 </span>  ]
-<span id="L4038" class="LineNr">4038 </span>  run [
-<span id="L4039" class="LineNr">4039 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4040" class="LineNr">4040 </span>  ]
-<span id="L4041" class="LineNr">4041 </span>  screen-should-contain [
-<span id="L4042" class="LineNr">4042 </span>   <span class="Constant"> .          .</span>
-<span id="L4043" class="LineNr">4043 </span>   <span class="Constant"> .cxx       .</span>
-<span id="L4044" class="LineNr">4044 </span>   <span class="Constant"> .dxx       .</span>
-<span id="L4045" class="LineNr">4045 </span>   <span class="Constant"> .exx       .</span>
-<span id="L4046" class="LineNr">4046 </span>  ]
-<span id="L4047" class="LineNr">4047 </span>  assume-console [
-<span id="L4048" class="LineNr">4048 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L4049" class="LineNr">4049 </span>  ]
-<span id="L4050" class="LineNr">4050 </span>  run [
-<span id="L4051" class="LineNr">4051 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4052" class="LineNr">4052 </span>  ]
-<span id="L4053" class="LineNr">4053 </span>  screen-should-contain [
-<span id="L4054" class="LineNr">4054 </span>   <span class="Constant"> .          .</span>
-<span id="L4055" class="LineNr">4055 </span>   <span class="Constant"> .exx       .</span>
-<span id="L4056" class="LineNr">4056 </span>   <span class="Constant"> .fxx       .</span>
-<span id="L4057" class="LineNr">4057 </span>   <span class="Constant"> .gxx       .</span>
-<span id="L4058" class="LineNr">4058 </span>  ]
-<span id="L4059" class="LineNr">4059 </span>  <span class="Comment"># scroll back up past empty line</span>
+<span id="L3996" class="LineNr">3996 </span>  ]
+<span id="L3997" class="LineNr">3997 </span>  <span class="Comment"># scroll down</span>
+<span id="L3998" class="LineNr">3998 </span>  assume-console [
+<span id="L3999" class="LineNr">3999 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L4000" class="LineNr">4000 </span>  ]
+<span id="L4001" class="LineNr">4001 </span>  run [
+<span id="L4002" class="LineNr">4002 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4003" class="LineNr">4003 </span>  ]
+<span id="L4004" class="LineNr">4004 </span>  <span class="Comment"># screen shows entire wrapped line</span>
+<span id="L4005" class="LineNr">4005 </span>  screen-should-contain [
+<span id="L4006" class="LineNr">4006 </span>   <span class="Constant"> .          .</span>
+<span id="L4007" class="LineNr">4007 </span>   <span class="Constant"> .bcd↩      .</span>
+<span id="L4008" class="LineNr">4008 </span>   <span class="Constant"> .efg↩      .</span>
+<span id="L4009" class="LineNr">4009 </span>   <span class="Constant"> .h         .</span>
+<span id="L4010" class="LineNr">4010 </span>  ]
+<span id="L4011" class="LineNr">4011 </span>  <span class="Comment"># scroll back up</span>
+<span id="L4012" class="LineNr">4012 </span>  assume-console [
+<span id="L4013" class="LineNr">4013 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L4014" class="LineNr">4014 </span>  ]
+<span id="L4015" class="LineNr">4015 </span>  run [
+<span id="L4016" class="LineNr">4016 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4017" class="LineNr">4017 </span>  ]
+<span id="L4018" class="LineNr">4018 </span>  <span class="Comment"># screen resets</span>
+<span id="L4019" class="LineNr">4019 </span>  screen-should-contain [
+<span id="L4020" class="LineNr">4020 </span>   <span class="Constant"> .          .</span>
+<span id="L4021" class="LineNr">4021 </span>   <span class="Constant"> .a         .</span>
+<span id="L4022" class="LineNr">4022 </span>   <span class="Constant"> .bcd↩      .</span>
+<span id="L4023" class="LineNr">4023 </span>   <span class="Constant"> .efg↩      .</span>
+<span id="L4024" class="LineNr">4024 </span>  ]
+<span id="L4025" class="LineNr">4025 </span>]
+<span id="L4026" class="LineNr">4026 </span>
+<span id="L4027" class="LineNr">4027 </span><span class="muScenario">scenario</span> editor-can-scroll-up-past-nonempty-lines [
+<span id="L4028" class="LineNr">4028 </span>  <span class="Constant">local-scope</span>
+<span id="L4029" class="LineNr">4029 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L4030" class="LineNr">4030 </span>  <span class="Comment"># text with empty line in second screen</span>
+<span id="L4031" class="LineNr">4031 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[axx</span>
+<span id="L4032" class="LineNr">4032 </span><span class="Constant">bxx</span>
+<span id="L4033" class="LineNr">4033 </span><span class="Constant">cxx</span>
+<span id="L4034" class="LineNr">4034 </span><span class="Constant">dxx</span>
+<span id="L4035" class="LineNr">4035 </span><span class="Constant">exx</span>
+<span id="L4036" class="LineNr">4036 </span><span class="Constant">fxx</span>
+<span id="L4037" class="LineNr">4037 </span><span class="Constant">gxx</span>
+<span id="L4038" class="LineNr">4038 </span><span class="Constant">hxx</span>
+<span id="L4039" class="LineNr">4039 </span><span class="Constant">]</span>
+<span id="L4040" class="LineNr">4040 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L4041" class="LineNr">4041 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4042" class="LineNr">4042 </span>  screen-should-contain [
+<span id="L4043" class="LineNr">4043 </span>   <span class="Constant"> .          .</span>
+<span id="L4044" class="LineNr">4044 </span>   <span class="Constant"> .axx       .</span>
+<span id="L4045" class="LineNr">4045 </span>   <span class="Constant"> .bxx       .</span>
+<span id="L4046" class="LineNr">4046 </span>   <span class="Constant"> .cxx       .</span>
+<span id="L4047" class="LineNr">4047 </span>  ]
+<span id="L4048" class="LineNr">4048 </span>  assume-console [
+<span id="L4049" class="LineNr">4049 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L4050" class="LineNr">4050 </span>  ]
+<span id="L4051" class="LineNr">4051 </span>  run [
+<span id="L4052" class="LineNr">4052 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4053" class="LineNr">4053 </span>  ]
+<span id="L4054" class="LineNr">4054 </span>  screen-should-contain [
+<span id="L4055" class="LineNr">4055 </span>   <span class="Constant"> .          .</span>
+<span id="L4056" class="LineNr">4056 </span>   <span class="Constant"> .cxx       .</span>
+<span id="L4057" class="LineNr">4057 </span>   <span class="Constant"> .dxx       .</span>
+<span id="L4058" class="LineNr">4058 </span>   <span class="Constant"> .exx       .</span>
+<span id="L4059" class="LineNr">4059 </span>  ]
 <span id="L4060" class="LineNr">4060 </span>  assume-console [
-<span id="L4061" class="LineNr">4061 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L4061" class="LineNr">4061 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L4062" class="LineNr">4062 </span>  ]
 <span id="L4063" class="LineNr">4063 </span>  run [
 <span id="L4064" class="LineNr">4064 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L4065" class="LineNr">4065 </span>  ]
 <span id="L4066" class="LineNr">4066 </span>  screen-should-contain [
 <span id="L4067" class="LineNr">4067 </span>   <span class="Constant"> .          .</span>
-<span id="L4068" class="LineNr">4068 </span>   <span class="Constant"> .cxx       .</span>
-<span id="L4069" class="LineNr">4069 </span>   <span class="Constant"> .dxx       .</span>
-<span id="L4070" class="LineNr">4070 </span>   <span class="Constant"> .exx       .</span>
+<span id="L4068" class="LineNr">4068 </span>   <span class="Constant"> .exx       .</span>
+<span id="L4069" class="LineNr">4069 </span>   <span class="Constant"> .fxx       .</span>
+<span id="L4070" class="LineNr">4070 </span>   <span class="Constant"> .gxx       .</span>
 <span id="L4071" class="LineNr">4071 </span>  ]
-<span id="L4072" class="LineNr">4072 </span>]
-<span id="L4073" class="LineNr">4073 </span>
-<span id="L4074" class="LineNr">4074 </span><span class="muScenario">scenario</span> editor-can-scroll-up-past-empty-lines [
-<span id="L4075" class="LineNr">4075 </span>  <span class="Constant">local-scope</span>
-<span id="L4076" class="LineNr">4076 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
-<span id="L4077" class="LineNr">4077 </span>  <span class="Comment"># text with empty line in second screen</span>
-<span id="L4078" class="LineNr">4078 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[axy</span>
-<span id="L4079" class="LineNr">4079 </span><span class="Constant">bxy</span>
-<span id="L4080" class="LineNr">4080 </span><span class="Constant">cxy</span>
-<span id="L4081" class="LineNr">4081 </span>
-<span id="L4082" class="LineNr">4082 </span>dxy
-<span id="L4083" class="LineNr">4083 </span>exy
-<span id="L4084" class="LineNr">4084 </span>fxy
-<span id="L4085" class="LineNr">4085 </span>gxy
-<span id="L4086" class="LineNr">4086 </span>]
-<span id="L4087" class="LineNr">4087 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
-<span id="L4088" class="LineNr">4088 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4089" class="LineNr">4089 </span>  screen-should-contain [
-<span id="L4090" class="LineNr">4090 </span>   <span class="Constant"> .          .</span>
-<span id="L4091" class="LineNr">4091 </span>   <span class="Constant"> .axy       .</span>
-<span id="L4092" class="LineNr">4092 </span>   <span class="Constant"> .bxy       .</span>
-<span id="L4093" class="LineNr">4093 </span>   <span class="Constant"> .cxy       .</span>
-<span id="L4094" class="LineNr">4094 </span>  ]
-<span id="L4095" class="LineNr">4095 </span>  assume-console [
-<span id="L4096" class="LineNr">4096 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L4097" class="LineNr">4097 </span>  ]
-<span id="L4098" class="LineNr">4098 </span>  run [
-<span id="L4099" class="LineNr">4099 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4100" class="LineNr">4100 </span>  ]
-<span id="L4101" class="LineNr">4101 </span>  screen-should-contain [
-<span id="L4102" class="LineNr">4102 </span>   <span class="Constant"> .          .</span>
-<span id="L4103" class="LineNr">4103 </span>   <span class="Constant"> .cxy       .</span>
-<span id="L4104" class="LineNr">4104 </span>   <span class="Constant"> .          .</span>
-<span id="L4105" class="LineNr">4105 </span>   <span class="Constant"> .dxy       .</span>
-<span id="L4106" class="LineNr">4106 </span>  ]
-<span id="L4107" class="LineNr">4107 </span>  assume-console [
-<span id="L4108" class="LineNr">4108 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L4109" class="LineNr">4109 </span>  ]
-<span id="L4110" class="LineNr">4110 </span>  run [
-<span id="L4111" class="LineNr">4111 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4112" class="LineNr">4112 </span>  ]
-<span id="L4113" class="LineNr">4113 </span>  screen-should-contain [
-<span id="L4114" class="LineNr">4114 </span>   <span class="Constant"> .          .</span>
-<span id="L4115" class="LineNr">4115 </span>   <span class="Constant"> .dxy       .</span>
-<span id="L4116" class="LineNr">4116 </span>   <span class="Constant"> .exy       .</span>
-<span id="L4117" class="LineNr">4117 </span>   <span class="Constant"> .fxy       .</span>
-<span id="L4118" class="LineNr">4118 </span>  ]
-<span id="L4119" class="LineNr">4119 </span>  <span class="Comment"># scroll back up past empty line</span>
+<span id="L4072" class="LineNr">4072 </span>  <span class="Comment"># scroll back up past empty line</span>
+<span id="L4073" class="LineNr">4073 </span>  assume-console [
+<span id="L4074" class="LineNr">4074 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L4075" class="LineNr">4075 </span>  ]
+<span id="L4076" class="LineNr">4076 </span>  run [
+<span id="L4077" class="LineNr">4077 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4078" class="LineNr">4078 </span>  ]
+<span id="L4079" class="LineNr">4079 </span>  screen-should-contain [
+<span id="L4080" class="LineNr">4080 </span>   <span class="Constant"> .          .</span>
+<span id="L4081" class="LineNr">4081 </span>   <span class="Constant"> .cxx       .</span>
+<span id="L4082" class="LineNr">4082 </span>   <span class="Constant"> .dxx       .</span>
+<span id="L4083" class="LineNr">4083 </span>   <span class="Constant"> .exx       .</span>
+<span id="L4084" class="LineNr">4084 </span>  ]
+<span id="L4085" class="LineNr">4085 </span>]
+<span id="L4086" class="LineNr">4086 </span>
+<span id="L4087" class="LineNr">4087 </span><span class="muScenario">scenario</span> editor-can-scroll-up-past-empty-lines [
+<span id="L4088" class="LineNr">4088 </span>  <span class="Constant">local-scope</span>
+<span id="L4089" class="LineNr">4089 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">4/height</span>
+<span id="L4090" class="LineNr">4090 </span>  <span class="Comment"># text with empty line in second screen</span>
+<span id="L4091" class="LineNr">4091 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[axy</span>
+<span id="L4092" class="LineNr">4092 </span><span class="Constant">bxy</span>
+<span id="L4093" class="LineNr">4093 </span><span class="Constant">cxy</span>
+<span id="L4094" class="LineNr">4094 </span>
+<span id="L4095" class="LineNr">4095 </span>dxy
+<span id="L4096" class="LineNr">4096 </span>exy
+<span id="L4097" class="LineNr">4097 </span>fxy
+<span id="L4098" class="LineNr">4098 </span>gxy
+<span id="L4099" class="LineNr">4099 </span>]
+<span id="L4100" class="LineNr">4100 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> s, <span class="Constant">0/left</span>, <span class="Constant">4/right</span>
+<span id="L4101" class="LineNr">4101 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4102" class="LineNr">4102 </span>  screen-should-contain [
+<span id="L4103" class="LineNr">4103 </span>   <span class="Constant"> .          .</span>
+<span id="L4104" class="LineNr">4104 </span>   <span class="Constant"> .axy       .</span>
+<span id="L4105" class="LineNr">4105 </span>   <span class="Constant"> .bxy       .</span>
+<span id="L4106" class="LineNr">4106 </span>   <span class="Constant"> .cxy       .</span>
+<span id="L4107" class="LineNr">4107 </span>  ]
+<span id="L4108" class="LineNr">4108 </span>  assume-console [
+<span id="L4109" class="LineNr">4109 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L4110" class="LineNr">4110 </span>  ]
+<span id="L4111" class="LineNr">4111 </span>  run [
+<span id="L4112" class="LineNr">4112 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4113" class="LineNr">4113 </span>  ]
+<span id="L4114" class="LineNr">4114 </span>  screen-should-contain [
+<span id="L4115" class="LineNr">4115 </span>   <span class="Constant"> .          .</span>
+<span id="L4116" class="LineNr">4116 </span>   <span class="Constant"> .cxy       .</span>
+<span id="L4117" class="LineNr">4117 </span>   <span class="Constant"> .          .</span>
+<span id="L4118" class="LineNr">4118 </span>   <span class="Constant"> .dxy       .</span>
+<span id="L4119" class="LineNr">4119 </span>  ]
 <span id="L4120" class="LineNr">4120 </span>  assume-console [
-<span id="L4121" class="LineNr">4121 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L4121" class="LineNr">4121 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L4122" class="LineNr">4122 </span>  ]
 <span id="L4123" class="LineNr">4123 </span>  run [
 <span id="L4124" class="LineNr">4124 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L4125" class="LineNr">4125 </span>  ]
 <span id="L4126" class="LineNr">4126 </span>  screen-should-contain [
 <span id="L4127" class="LineNr">4127 </span>   <span class="Constant"> .          .</span>
-<span id="L4128" class="LineNr">4128 </span>   <span class="Constant"> .cxy       .</span>
-<span id="L4129" class="LineNr">4129 </span>   <span class="Constant"> .          .</span>
-<span id="L4130" class="LineNr">4130 </span>   <span class="Constant"> .dxy       .</span>
+<span id="L4128" class="LineNr">4128 </span>   <span class="Constant"> .dxy       .</span>
+<span id="L4129" class="LineNr">4129 </span>   <span class="Constant"> .exy       .</span>
+<span id="L4130" class="LineNr">4130 </span>   <span class="Constant"> .fxy       .</span>
 <span id="L4131" class="LineNr">4131 </span>  ]
-<span id="L4132" class="LineNr">4132 </span>]
-<span id="L4133" class="LineNr">4133 </span>
-<span id="L4134" class="LineNr">4134 </span><span class="Comment"># ctrl-s - scroll up by one line</span>
-<span id="L4135" class="LineNr">4135 </span><span class="Comment"># todo: scenarios</span>
-<span id="L4136" class="LineNr">4136 </span>
-<span id="L4137" class="LineNr">4137 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L4138" class="LineNr">4138 </span>  <span class="Delimiter">{</span>
-<span id="L4139" class="LineNr">4139 </span>    scroll-up?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">19/ctrl-s</span>
-<span id="L4140" class="LineNr">4140 </span>    <span class="muControl">break-unless</span> scroll-up?
-<span id="L4141" class="LineNr">4141 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L4142" class="LineNr">4142 </span>    go-render?:bool, editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4149'>line-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L4143" class="LineNr">4143 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">5/line-up</span>
-<span id="L4144" class="LineNr">4144 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L4145" class="LineNr">4145 </span>   <span class="muControl"> return</span> go-render?
-<span id="L4146" class="LineNr">4146 </span>  <span class="Delimiter">}</span>
-<span id="L4147" class="LineNr">4147 </span>]
-<span id="L4148" class="LineNr">4148 </span>
-<span id="L4149" class="LineNr">4149 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4149'>line-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
-<span id="L4150" class="LineNr">4150 </span>  <span class="Constant">local-scope</span>
-<span id="L4151" class="LineNr">4151 </span>  <span class="Constant">load-inputs</span>
-<span id="L4152" class="LineNr">4152 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
-<span id="L4153" class="LineNr">4153 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
-<span id="L4154" class="LineNr">4154 </span>  max:num <span class="Special">&lt;-</span> subtract right, left
-<span id="L4155" class="LineNr">4155 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L4156" class="LineNr">4156 </span>  new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L2849'>before-start-of-next-line</a> old-top, max
-<span id="L4157" class="LineNr">4157 </span>  movement?:bool <span class="Special">&lt;-</span> not-equal old-top, new-top
-<span id="L4158" class="LineNr">4158 </span>  <span class="Delimiter">{</span>
-<span id="L4159" class="LineNr">4159 </span>    <span class="muControl">break-unless</span> movement?
-<span id="L4160" class="LineNr">4160 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
-<span id="L4161" class="LineNr">4161 </span>  <span class="Delimiter">}</span>
-<span id="L4162" class="LineNr">4162 </span> <span class="muControl"> return</span> movement?
-<span id="L4163" class="LineNr">4163 </span>]
-<span id="L4164" class="LineNr">4164 </span>
-<span id="L4165" class="LineNr">4165 </span><span class="Comment"># ctrl-x - scroll down by one line</span>
-<span id="L4166" class="LineNr">4166 </span><span class="Comment"># todo: scenarios</span>
-<span id="L4167" class="LineNr">4167 </span>
-<span id="L4168" class="LineNr">4168 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L4169" class="LineNr">4169 </span>  <span class="Delimiter">{</span>
-<span id="L4170" class="LineNr">4170 </span>    scroll-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">24/ctrl-x</span>
-<span id="L4171" class="LineNr">4171 </span>    <span class="muControl">break-unless</span> scroll-down?
-<span id="L4172" class="LineNr">4172 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L4173" class="LineNr">4173 </span>    go-render?:bool, editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4180'>line-down</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
-<span id="L4174" class="LineNr">4174 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">6/line-down</span>
-<span id="L4175" class="LineNr">4175 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L4176" class="LineNr">4176 </span>   <span class="muControl"> return</span> go-render?
-<span id="L4177" class="LineNr">4177 </span>  <span class="Delimiter">}</span>
-<span id="L4178" class="LineNr">4178 </span>]
-<span id="L4179" class="LineNr">4179 </span>
-<span id="L4180" class="LineNr">4180 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4180'>line-down</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
-<span id="L4181" class="LineNr">4181 </span>  <span class="Constant">local-scope</span>
-<span id="L4182" class="LineNr">4182 </span>  <span class="Constant">load-inputs</span>
-<span id="L4183" class="LineNr">4183 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L4184" class="LineNr">4184 </span>  new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> old-top, editor
-<span id="L4185" class="LineNr">4185 </span>  movement?:bool <span class="Special">&lt;-</span> not-equal old-top, new-top
-<span id="L4186" class="LineNr">4186 </span>  <span class="Delimiter">{</span>
-<span id="L4187" class="LineNr">4187 </span>    <span class="muControl">break-unless</span> movement?
-<span id="L4188" class="LineNr">4188 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
-<span id="L4189" class="LineNr">4189 </span>  <span class="Delimiter">}</span>
-<span id="L4190" class="LineNr">4190 </span> <span class="muControl"> return</span> movement?
+<span id="L4132" class="LineNr">4132 </span>  <span class="Comment"># scroll back up past empty line</span>
+<span id="L4133" class="LineNr">4133 </span>  assume-console [
+<span id="L4134" class="LineNr">4134 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
+<span id="L4135" class="LineNr">4135 </span>  ]
+<span id="L4136" class="LineNr">4136 </span>  run [
+<span id="L4137" class="LineNr">4137 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4138" class="LineNr">4138 </span>  ]
+<span id="L4139" class="LineNr">4139 </span>  screen-should-contain [
+<span id="L4140" class="LineNr">4140 </span>   <span class="Constant"> .          .</span>
+<span id="L4141" class="LineNr">4141 </span>   <span class="Constant"> .cxy       .</span>
+<span id="L4142" class="LineNr">4142 </span>   <span class="Constant"> .          .</span>
+<span id="L4143" class="LineNr">4143 </span>   <span class="Constant"> .dxy       .</span>
+<span id="L4144" class="LineNr">4144 </span>  ]
+<span id="L4145" class="LineNr">4145 </span>]
+<span id="L4146" class="LineNr">4146 </span>
+<span id="L4147" class="LineNr">4147 </span><span class="Comment"># ctrl-s - scroll up by one line</span>
+<span id="L4148" class="LineNr">4148 </span><span class="Comment"># todo: scenarios</span>
+<span id="L4149" class="LineNr">4149 </span>
+<span id="L4150" class="LineNr">4150 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L4151" class="LineNr">4151 </span>  <span class="Delimiter">{</span>
+<span id="L4152" class="LineNr">4152 </span>    scroll-up?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">19/ctrl-s</span>
+<span id="L4153" class="LineNr">4153 </span>    <span class="muControl">break-unless</span> scroll-up?
+<span id="L4154" class="LineNr">4154 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L4155" class="LineNr">4155 </span>    go-render?:bool, editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4162'>line-up</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L4156" class="LineNr">4156 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">5/line-up</span>
+<span id="L4157" class="LineNr">4157 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L4158" class="LineNr">4158 </span>   <span class="muControl"> return</span> go-render?
+<span id="L4159" class="LineNr">4159 </span>  <span class="Delimiter">}</span>
+<span id="L4160" class="LineNr">4160 </span>]
+<span id="L4161" class="LineNr">4161 </span>
+<span id="L4162" class="LineNr">4162 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4162'>line-up</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
+<span id="L4163" class="LineNr">4163 </span>  <span class="Constant">local-scope</span>
+<span id="L4164" class="LineNr">4164 </span>  <span class="Constant">load-inputs</span>
+<span id="L4165" class="LineNr">4165 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
+<span id="L4166" class="LineNr">4166 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
+<span id="L4167" class="LineNr">4167 </span>  max:num <span class="Special">&lt;-</span> subtract right, left
+<span id="L4168" class="LineNr">4168 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L4169" class="LineNr">4169 </span>  new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L2862'>before-start-of-next-line</a> old-top, max
+<span id="L4170" class="LineNr">4170 </span>  movement?:bool <span class="Special">&lt;-</span> not-equal old-top, new-top
+<span id="L4171" class="LineNr">4171 </span>  <span class="Delimiter">{</span>
+<span id="L4172" class="LineNr">4172 </span>    <span class="muControl">break-unless</span> movement?
+<span id="L4173" class="LineNr">4173 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
+<span id="L4174" class="LineNr">4174 </span>  <span class="Delimiter">}</span>
+<span id="L4175" class="LineNr">4175 </span> <span class="muControl"> return</span> movement?
+<span id="L4176" class="LineNr">4176 </span>]
+<span id="L4177" class="LineNr">4177 </span>
+<span id="L4178" class="LineNr">4178 </span><span class="Comment"># ctrl-x - scroll down by one line</span>
+<span id="L4179" class="LineNr">4179 </span><span class="Comment"># todo: scenarios</span>
+<span id="L4180" class="LineNr">4180 </span>
+<span id="L4181" class="LineNr">4181 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L4182" class="LineNr">4182 </span>  <span class="Delimiter">{</span>
+<span id="L4183" class="LineNr">4183 </span>    scroll-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">24/ctrl-x</span>
+<span id="L4184" class="LineNr">4184 </span>    <span class="muControl">break-unless</span> scroll-down?
+<span id="L4185" class="LineNr">4185 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L4186" class="LineNr">4186 </span>    go-render?:bool, editor <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4193'>line-down</a> editor, <a href='../081print.mu.html#L782'>screen-height</a>
+<span id="L4187" class="LineNr">4187 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">6/line-down</span>
+<span id="L4188" class="LineNr">4188 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L4189" class="LineNr">4189 </span>   <span class="muControl"> return</span> go-render?
+<span id="L4190" class="LineNr">4190 </span>  <span class="Delimiter">}</span>
 <span id="L4191" class="LineNr">4191 </span>]
 <span id="L4192" class="LineNr">4192 </span>
-<span id="L4193" class="LineNr">4193 </span><span class="Comment"># ctrl-t - move current line to top of screen</span>
-<span id="L4194" class="LineNr">4194 </span><span class="Comment"># todo: scenarios</span>
-<span id="L4195" class="LineNr">4195 </span>
-<span id="L4196" class="LineNr">4196 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L4197" class="LineNr">4197 </span>  <span class="Delimiter">{</span>
-<span id="L4198" class="LineNr">4198 </span>    scroll-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">20/ctrl-t</span>
-<span id="L4199" class="LineNr">4199 </span>    <span class="muControl">break-unless</span> scroll-down?
-<span id="L4200" class="LineNr">4200 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
-<span id="L4201" class="LineNr">4201 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L4202" class="LineNr">4202 </span>    cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L4203" class="LineNr">4203 </span>    cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> cursor
-<span id="L4204" class="LineNr">4204 </span>    new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> cursor, editor
-<span id="L4205" class="LineNr">4205 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
-<span id="L4206" class="LineNr">4206 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>,<span class="Constant"> 1</span>
-<span id="L4207" class="LineNr">4207 </span>    go-render?:bool <span class="Special">&lt;-</span> not-equal new-top, old-top
-<span id="L4208" class="LineNr">4208 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
-<span id="L4209" class="LineNr">4209 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
-<span id="L4210" class="LineNr">4210 </span>   <span class="muControl"> return</span> go-render?
-<span id="L4211" class="LineNr">4211 </span>  <span class="Delimiter">}</span>
-<span id="L4212" class="LineNr">4212 </span>]
-<span id="L4213" class="LineNr">4213 </span>
-<span id="L4214" class="LineNr">4214 </span><span class="Comment"># ctrl-/ - comment/uncomment current line</span>
-<span id="L4215" class="LineNr">4215 </span>
-<span id="L4216" class="LineNr">4216 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
-<span id="L4217" class="LineNr">4217 </span>  <span class="Delimiter">{</span>
-<span id="L4218" class="LineNr">4218 </span>    comment-toggle?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">31/ctrl-slash</span>
-<span id="L4219" class="LineNr">4219 </span>    <span class="muControl">break-unless</span> comment-toggle?
-<span id="L4220" class="LineNr">4220 </span>    cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
-<span id="L4221" class="LineNr">4221 </span>    data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L4222" class="LineNr">4222 </span><span class="Constant">    &lt;begin-insert-character&gt;</span>
-<span id="L4223" class="LineNr">4223 </span>    before-line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4280'>before-start-of-screen-line</a> editor
-<span id="L4224" class="LineNr">4224 </span>    line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-line-start
-<span id="L4225" class="LineNr">4225 </span>    commented-out?:bool <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L585'>match</a> line-start, <span class="Constant">[#? ]</span>  <span class="Comment"># comment prefix</span>
-<span id="L4226" class="LineNr">4226 </span>    <span class="Delimiter">{</span>
-<span id="L4227" class="LineNr">4227 </span>      <span class="muControl">break-unless</span> commented-out?
-<span id="L4228" class="LineNr">4228 </span>      <span class="Comment"># uncomment</span>
-<span id="L4229" class="LineNr">4229 </span>      data <span class="Special">&lt;-</span> remove line-start, <span class="Constant">3/length-comment-prefix</span>, data
-<span id="L4230" class="LineNr">4230 </span>      cursor-column <span class="Special">&lt;-</span> subtract cursor-column, <span class="Constant">3/length-comment-prefix</span>
-<span id="L4231" class="LineNr">4231 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L4232" class="LineNr">4232 </span>      go-render? <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4250'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>, editor, <span class="Constant">3/size-of-comment-leader</span>
-<span id="L4233" class="LineNr">4233 </span>    <span class="Delimiter">}</span>
-<span id="L4234" class="LineNr">4234 </span>    <span class="Delimiter">{</span>
-<span id="L4235" class="LineNr">4235 </span>      <span class="muControl">break-if</span> commented-out?
-<span id="L4236" class="LineNr">4236 </span>      <span class="Comment"># comment</span>
-<span id="L4237" class="LineNr">4237 </span>      insert before-line-start, <span class="Constant">[#? ]</span>
-<span id="L4238" class="LineNr">4238 </span>      cursor-column <span class="Special">&lt;-</span> add cursor-column, <span class="Constant">3/length-comment-prefix</span>
-<span id="L4239" class="LineNr">4239 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
-<span id="L4240" class="LineNr">4240 </span>      go-render? <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4250'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>, editor,<span class="Constant"> 0</span>
-<span id="L4241" class="LineNr">4241 </span>    <span class="Delimiter">}</span>
-<span id="L4242" class="LineNr">4242 </span><span class="Constant">    &lt;end-insert-character&gt;</span>
-<span id="L4243" class="LineNr">4243 </span>   <span class="muControl"> return</span>
-<span id="L4244" class="LineNr">4244 </span>  <span class="Delimiter">}</span>
-<span id="L4245" class="LineNr">4245 </span>]
-<span id="L4246" class="LineNr">4246 </span>
-<span id="L4247" class="LineNr">4247 </span><span class="Comment"># Render just from the start of the current line, and only if it wasn't</span>
-<span id="L4248" class="LineNr">4248 </span><span class="Comment"># wrapping before (include margin) and isn't wrapping now. Otherwise just tell</span>
-<span id="L4249" class="LineNr">4249 </span><span class="Comment"># the caller to go-render? the entire screen.</span>
-<span id="L4250" class="LineNr">4250 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4250'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, right-margin:num<span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
-<span id="L4251" class="LineNr">4251 </span>  <span class="Constant">local-scope</span>
-<span id="L4252" class="LineNr">4252 </span>  <span class="Constant">load-inputs</span>
-<span id="L4253" class="LineNr">4253 </span>  before-line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4280'>before-start-of-screen-line</a> editor
-<span id="L4254" class="LineNr">4254 </span>  line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-line-start
-<span id="L4255" class="LineNr">4255 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
-<span id="L4256" class="LineNr">4256 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
-<span id="L4257" class="LineNr">4257 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
-<span id="L4258" class="LineNr">4258 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, cursor-row, left
-<span id="L4259" class="LineNr">4259 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
-<span id="L4260" class="LineNr">4260 </span>  end:num <span class="Special">&lt;-</span> subtract right, right-margin
-<span id="L4261" class="LineNr">4261 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L4262" class="LineNr">4262 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy line-start
-<span id="L4263" class="LineNr">4263 </span>  <span class="Delimiter">{</span>
-<span id="L4264" class="LineNr">4264 </span>    render-all?:bool <span class="Special">&lt;-</span> greater-or-equal i, end
-<span id="L4265" class="LineNr">4265 </span>    <span class="muControl">return-if</span> render-all?, <span class="Constant">1/go-render</span>
-<span id="L4266" class="LineNr">4266 </span>    <span class="muControl">break-unless</span> curr
-<span id="L4267" class="LineNr">4267 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
-<span id="L4268" class="LineNr">4268 </span>    newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
-<span id="L4269" class="LineNr">4269 </span>    <span class="muControl">break-if</span> newline?
-<span id="L4270" class="LineNr">4270 </span>    color <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L398'>get-color</a> color, c
-<span id="L4271" class="LineNr">4271 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c, color
-<span id="L4272" class="LineNr">4272 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L4273" class="LineNr">4273 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
-<span id="L4274" class="LineNr">4274 </span>   <span class="muControl"> loop</span>
-<span id="L4275" class="LineNr">4275 </span>  <span class="Delimiter">}</span>
-<span id="L4276" class="LineNr">4276 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
-<span id="L4277" class="LineNr">4277 </span> <span class="muControl"> return</span> <span class="Constant">0/dont-render</span>
-<span id="L4278" class="LineNr">4278 </span>]
-<span id="L4279" class="LineNr">4279 </span>
-<span id="L4280" class="LineNr">4280 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4280'>before-start-of-screen-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
-<span id="L4281" class="LineNr">4281 </span>  <span class="Constant">local-scope</span>
-<span id="L4282" class="LineNr">4282 </span>  <span class="Constant">load-inputs</span>
-<span id="L4283" class="LineNr">4283 </span>  cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L4284" class="LineNr">4284 </span>  <span class="Delimiter">{</span>
-<span id="L4285" class="LineNr">4285 </span>    <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> cursor
-<span id="L4286" class="LineNr">4286 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>
-<span id="L4287" class="LineNr">4287 </span>    cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L25'>next</a>
+<span id="L4193" class="LineNr">4193 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4193'>line-down</a> editor:&amp;:editor, <a href='../081print.mu.html#L782'>screen-height</a>:num<span class="muRecipe"> -&gt; </span>go-render?:bool, editor:&amp;:editor [
+<span id="L4194" class="LineNr">4194 </span>  <span class="Constant">local-scope</span>
+<span id="L4195" class="LineNr">4195 </span>  <span class="Constant">load-inputs</span>
+<span id="L4196" class="LineNr">4196 </span>  old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L4197" class="LineNr">4197 </span>  new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> old-top, editor
+<span id="L4198" class="LineNr">4198 </span>  movement?:bool <span class="Special">&lt;-</span> not-equal old-top, new-top
+<span id="L4199" class="LineNr">4199 </span>  <span class="Delimiter">{</span>
+<span id="L4200" class="LineNr">4200 </span>    <span class="muControl">break-unless</span> movement?
+<span id="L4201" class="LineNr">4201 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
+<span id="L4202" class="LineNr">4202 </span>  <span class="Delimiter">}</span>
+<span id="L4203" class="LineNr">4203 </span> <span class="muControl"> return</span> movement?
+<span id="L4204" class="LineNr">4204 </span>]
+<span id="L4205" class="LineNr">4205 </span>
+<span id="L4206" class="LineNr">4206 </span><span class="Comment"># ctrl-t - move current line to top of screen</span>
+<span id="L4207" class="LineNr">4207 </span><span class="Comment"># todo: scenarios</span>
+<span id="L4208" class="LineNr">4208 </span>
+<span id="L4209" class="LineNr">4209 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L4210" class="LineNr">4210 </span>  <span class="Delimiter">{</span>
+<span id="L4211" class="LineNr">4211 </span>    scroll-down?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">20/ctrl-t</span>
+<span id="L4212" class="LineNr">4212 </span>    <span class="muControl">break-unless</span> scroll-down?
+<span id="L4213" class="LineNr">4213 </span><span class="Constant">    &lt;begin-move-cursor&gt;</span>
+<span id="L4214" class="LineNr">4214 </span>    old-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
+<span id="L4215" class="LineNr">4215 </span>    cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L4216" class="LineNr">4216 </span>    cursor <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> cursor
+<span id="L4217" class="LineNr">4217 </span>    new-top:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> cursor, editor
+<span id="L4218" class="LineNr">4218 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">top-of-screen:offset</span>, new-top
+<span id="L4219" class="LineNr">4219 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>,<span class="Constant"> 1</span>
+<span id="L4220" class="LineNr">4220 </span>    go-render?:bool <span class="Special">&lt;-</span> not-equal new-top, old-top
+<span id="L4221" class="LineNr">4221 </span>    undo-coalesce-tag:num <span class="Special">&lt;-</span> copy <span class="Constant">0/never</span>
+<span id="L4222" class="LineNr">4222 </span><span class="Constant">    &lt;end-move-cursor&gt;</span>
+<span id="L4223" class="LineNr">4223 </span>   <span class="muControl"> return</span> go-render?
+<span id="L4224" class="LineNr">4224 </span>  <span class="Delimiter">}</span>
+<span id="L4225" class="LineNr">4225 </span>]
+<span id="L4226" class="LineNr">4226 </span>
+<span id="L4227" class="LineNr">4227 </span><span class="Comment"># ctrl-/ - comment/uncomment current line</span>
+<span id="L4228" class="LineNr">4228 </span>
+<span id="L4229" class="LineNr">4229 </span><span class="muRecipe">after</span> <span class="Constant"><a href='002-typing.mu.html#L185'>&lt;handle-special-character&gt;</a></span> [
+<span id="L4230" class="LineNr">4230 </span>  <span class="Delimiter">{</span>
+<span id="L4231" class="LineNr">4231 </span>    comment-toggle?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">31/ctrl-slash</span>
+<span id="L4232" class="LineNr">4232 </span>    <span class="muControl">break-unless</span> comment-toggle?
+<span id="L4233" class="LineNr">4233 </span>    cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
+<span id="L4234" class="LineNr">4234 </span>    data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
+<span id="L4235" class="LineNr">4235 </span><span class="Constant">    &lt;begin-insert-character&gt;</span>
+<span id="L4236" class="LineNr">4236 </span>    before-line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4293'>before-start-of-screen-line</a> editor
+<span id="L4237" class="LineNr">4237 </span>    line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-line-start
+<span id="L4238" class="LineNr">4238 </span>    commented-out?:bool <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L642'>match</a> line-start, <span class="Constant">[#? ]</span>  <span class="Comment"># comment prefix</span>
+<span id="L4239" class="LineNr">4239 </span>    <span class="Delimiter">{</span>
+<span id="L4240" class="LineNr">4240 </span>      <span class="muControl">break-unless</span> commented-out?
+<span id="L4241" class="LineNr">4241 </span>      <span class="Comment"># uncomment</span>
+<span id="L4242" class="LineNr">4242 </span>      data <span class="Special">&lt;-</span> remove line-start, <span class="Constant">3/length-comment-prefix</span>, data
+<span id="L4243" class="LineNr">4243 </span>      cursor-column <span class="Special">&lt;-</span> subtract cursor-column, <span class="Constant">3/length-comment-prefix</span>
+<span id="L4244" class="LineNr">4244 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
+<span id="L4245" class="LineNr">4245 </span>      go-render? <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4263'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>, editor, <span class="Constant">3/size-of-comment-leader</span>
+<span id="L4246" class="LineNr">4246 </span>    <span class="Delimiter">}</span>
+<span id="L4247" class="LineNr">4247 </span>    <span class="Delimiter">{</span>
+<span id="L4248" class="LineNr">4248 </span>      <span class="muControl">break-if</span> commented-out?
+<span id="L4249" class="LineNr">4249 </span>      <span class="Comment"># comment</span>
+<span id="L4250" class="LineNr">4250 </span>      insert before-line-start, <span class="Constant">[#? ]</span>
+<span id="L4251" class="LineNr">4251 </span>      cursor-column <span class="Special">&lt;-</span> add cursor-column, <span class="Constant">3/length-comment-prefix</span>
+<span id="L4252" class="LineNr">4252 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, cursor-column
+<span id="L4253" class="LineNr">4253 </span>      go-render? <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4263'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>, editor,<span class="Constant"> 0</span>
+<span id="L4254" class="LineNr">4254 </span>    <span class="Delimiter">}</span>
+<span id="L4255" class="LineNr">4255 </span><span class="Constant">    &lt;end-insert-character&gt;</span>
+<span id="L4256" class="LineNr">4256 </span>   <span class="muControl"> return</span>
+<span id="L4257" class="LineNr">4257 </span>  <span class="Delimiter">}</span>
+<span id="L4258" class="LineNr">4258 </span>]
+<span id="L4259" class="LineNr">4259 </span>
+<span id="L4260" class="LineNr">4260 </span><span class="Comment"># Render just from the start of the current line, and only if it wasn't</span>
+<span id="L4261" class="LineNr">4261 </span><span class="Comment"># wrapping before (include margin) and isn't wrapping now. Otherwise just tell</span>
+<span id="L4262" class="LineNr">4262 </span><span class="Comment"># the caller to go-render? the entire screen.</span>
+<span id="L4263" class="LineNr">4263 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4263'>render-line-from-start</a> <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a>, editor:&amp;:editor, right-margin:num<span class="muRecipe"> -&gt; </span>go-render?:bool, <a href='../081print.mu.html#L16'>screen</a>:&amp;:<a href='../081print.mu.html#L16'>screen</a> [
+<span id="L4264" class="LineNr">4264 </span>  <span class="Constant">local-scope</span>
+<span id="L4265" class="LineNr">4265 </span>  <span class="Constant">load-inputs</span>
+<span id="L4266" class="LineNr">4266 </span>  before-line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L4293'>before-start-of-screen-line</a> editor
+<span id="L4267" class="LineNr">4267 </span>  line-start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-line-start
+<span id="L4268" class="LineNr">4268 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
+<span id="L4269" class="LineNr">4269 </span>  left:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">left:offset</span>
+<span id="L4270" class="LineNr">4270 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
+<span id="L4271" class="LineNr">4271 </span>  <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, cursor-row, left
+<span id="L4272" class="LineNr">4272 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
+<span id="L4273" class="LineNr">4273 </span>  end:num <span class="Special">&lt;-</span> subtract right, right-margin
+<span id="L4274" class="LineNr">4274 </span>  i:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L4275" class="LineNr">4275 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy line-start
+<span id="L4276" class="LineNr">4276 </span>  <span class="Delimiter">{</span>
+<span id="L4277" class="LineNr">4277 </span>    render-all?:bool <span class="Special">&lt;-</span> greater-or-equal i, end
+<span id="L4278" class="LineNr">4278 </span>    <span class="muControl">return-if</span> render-all?,<span class="Constant"> true/go-render</span>
+<span id="L4279" class="LineNr">4279 </span>    <span class="muControl">break-unless</span> curr
+<span id="L4280" class="LineNr">4280 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
+<span id="L4281" class="LineNr">4281 </span>    newline?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">10/newline</span>
+<span id="L4282" class="LineNr">4282 </span>    <span class="muControl">break-if</span> newline?
+<span id="L4283" class="LineNr">4283 </span>    color <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L400'>get-color</a> color, c
+<span id="L4284" class="LineNr">4284 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c, color
+<span id="L4285" class="LineNr">4285 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L4286" class="LineNr">4286 </span>    i <span class="Special">&lt;-</span> add i,<span class="Constant"> 1</span>
+<span id="L4287" class="LineNr">4287 </span>   <span class="muControl"> loop</span>
 <span id="L4288" class="LineNr">4288 </span>  <span class="Delimiter">}</span>
-<span id="L4289" class="LineNr">4289 </span>  result <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> cursor, editor
-<span id="L4290" class="LineNr">4290 </span>]
-<span id="L4291" class="LineNr">4291 </span>
-<span id="L4292" class="LineNr">4292 </span><span class="muScenario">scenario</span> editor-comments-empty-line [
-<span id="L4293" class="LineNr">4293 </span>  <span class="Constant">local-scope</span>
-<span id="L4294" class="LineNr">4294 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L4295" class="LineNr">4295 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L4296" class="LineNr">4296 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4297" class="LineNr">4297 </span>  $clear-trace
-<span id="L4298" class="LineNr">4298 </span>  assume-console [
-<span id="L4299" class="LineNr">4299 </span>    press ctrl-slash
-<span id="L4300" class="LineNr">4300 </span>  ]
-<span id="L4301" class="LineNr">4301 </span>  run [
-<span id="L4302" class="LineNr">4302 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4303" class="LineNr">4303 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L4304" class="LineNr">4304 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L4305" class="LineNr">4305 </span>  ]
-<span id="L4306" class="LineNr">4306 </span>  screen-should-contain [
-<span id="L4307" class="LineNr">4307 </span>   <span class="Constant"> .          .</span>
-<span id="L4308" class="LineNr">4308 </span>   <span class="Constant"> .#?        .</span>
-<span id="L4309" class="LineNr">4309 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L4310" class="LineNr">4310 </span>   <span class="Constant"> .          .</span>
-<span id="L4311" class="LineNr">4311 </span>  ]
-<span id="L4312" class="LineNr">4312 </span>  memory-should-contain [
-<span id="L4313" class="LineNr">4313 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L4314" class="LineNr">4314 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L4315" class="LineNr">4315 </span>  ]
-<span id="L4316" class="LineNr">4316 </span>  check-trace-count-for-label<span class="Constant"> 5</span>, <span class="Constant">[print-character]</span>
-<span id="L4317" class="LineNr">4317 </span>]
-<span id="L4318" class="LineNr">4318 </span>
-<span id="L4319" class="LineNr">4319 </span><span class="muScenario">scenario</span> editor-comments-at-start-of-contents [
-<span id="L4320" class="LineNr">4320 </span>  <span class="Constant">local-scope</span>
-<span id="L4321" class="LineNr">4321 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L4322" class="LineNr">4322 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L4323" class="LineNr">4323 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4324" class="LineNr">4324 </span>  $clear-trace
-<span id="L4325" class="LineNr">4325 </span>  assume-console [
-<span id="L4326" class="LineNr">4326 </span>    press ctrl-slash
-<span id="L4327" class="LineNr">4327 </span>  ]
-<span id="L4328" class="LineNr">4328 </span>  run [
-<span id="L4329" class="LineNr">4329 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4330" class="LineNr">4330 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L4331" class="LineNr">4331 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L4332" class="LineNr">4332 </span>  ]
-<span id="L4333" class="LineNr">4333 </span>  screen-should-contain [
-<span id="L4334" class="LineNr">4334 </span>   <span class="Constant"> .          .</span>
-<span id="L4335" class="LineNr">4335 </span>   <span class="Constant"> .#? ab     .</span>
-<span id="L4336" class="LineNr">4336 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L4337" class="LineNr">4337 </span>   <span class="Constant"> .          .</span>
-<span id="L4338" class="LineNr">4338 </span>  ]
-<span id="L4339" class="LineNr">4339 </span>  memory-should-contain [
-<span id="L4340" class="LineNr">4340 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L4341" class="LineNr">4341 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
-<span id="L4342" class="LineNr">4342 </span>  ]
-<span id="L4343" class="LineNr">4343 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
-<span id="L4344" class="LineNr">4344 </span>]
-<span id="L4345" class="LineNr">4345 </span>
-<span id="L4346" class="LineNr">4346 </span><span class="muScenario">scenario</span> editor-comments-at-end-of-contents [
-<span id="L4347" class="LineNr">4347 </span>  <span class="Constant">local-scope</span>
-<span id="L4348" class="LineNr">4348 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L4349" class="LineNr">4349 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
-<span id="L4350" class="LineNr">4350 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4351" class="LineNr">4351 </span>  $clear-trace
-<span id="L4352" class="LineNr">4352 </span>  assume-console [
-<span id="L4353" class="LineNr">4353 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
-<span id="L4354" class="LineNr">4354 </span>    press ctrl-slash
+<span id="L4289" class="LineNr">4289 </span>  <a href='../081print.mu.html#L553'>clear-line-until</a> <a href='../081print.mu.html#L16'>screen</a>, right
+<span id="L4290" class="LineNr">4290 </span> <span class="muControl"> return</span><span class="Constant"> false/dont-render</span>
+<span id="L4291" class="LineNr">4291 </span>]
+<span id="L4292" class="LineNr">4292 </span>
+<span id="L4293" class="LineNr">4293 </span><span class="muRecipe">def</span> <a href='003-shortcuts.mu.html#L4293'>before-start-of-screen-line</a> editor:&amp;:editor<span class="muRecipe"> -&gt; </span>result:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char [
+<span id="L4294" class="LineNr">4294 </span>  <span class="Constant">local-scope</span>
+<span id="L4295" class="LineNr">4295 </span>  <span class="Constant">load-inputs</span>
+<span id="L4296" class="LineNr">4296 </span>  cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
+<span id="L4297" class="LineNr">4297 </span>  <span class="Delimiter">{</span>
+<span id="L4298" class="LineNr">4298 </span>    <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> cursor
+<span id="L4299" class="LineNr">4299 </span>    <span class="muControl">break-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>
+<span id="L4300" class="LineNr">4300 </span>    cursor <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L31'>next</a>
+<span id="L4301" class="LineNr">4301 </span>  <span class="Delimiter">}</span>
+<span id="L4302" class="LineNr">4302 </span>  result <span class="Special">&lt;-</span> <a href='003-shortcuts.mu.html#L1067'>before-previous-screen-line</a> cursor, editor
+<span id="L4303" class="LineNr">4303 </span>]
+<span id="L4304" class="LineNr">4304 </span>
+<span id="L4305" class="LineNr">4305 </span><span class="muScenario">scenario</span> editor-comments-empty-line [
+<span id="L4306" class="LineNr">4306 </span>  <span class="Constant">local-scope</span>
+<span id="L4307" class="LineNr">4307 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L4308" class="LineNr">4308 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L4309" class="LineNr">4309 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4310" class="LineNr">4310 </span>  $clear-trace
+<span id="L4311" class="LineNr">4311 </span>  assume-console [
+<span id="L4312" class="LineNr">4312 </span>    press ctrl-slash
+<span id="L4313" class="LineNr">4313 </span>  ]
+<span id="L4314" class="LineNr">4314 </span>  run [
+<span id="L4315" class="LineNr">4315 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4316" class="LineNr">4316 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L4317" class="LineNr">4317 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L4318" class="LineNr">4318 </span>  ]
+<span id="L4319" class="LineNr">4319 </span>  screen-should-contain [
+<span id="L4320" class="LineNr">4320 </span>   <span class="Constant"> .          .</span>
+<span id="L4321" class="LineNr">4321 </span>   <span class="Constant"> .#?        .</span>
+<span id="L4322" class="LineNr">4322 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L4323" class="LineNr">4323 </span>   <span class="Constant"> .          .</span>
+<span id="L4324" class="LineNr">4324 </span>  ]
+<span id="L4325" class="LineNr">4325 </span>  memory-should-contain [
+<span id="L4326" class="LineNr">4326 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L4327" class="LineNr">4327 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
+<span id="L4328" class="LineNr">4328 </span>  ]
+<span id="L4329" class="LineNr">4329 </span>  check-trace-count-for-label<span class="Constant"> 5</span>, <span class="Constant">[print-character]</span>
+<span id="L4330" class="LineNr">4330 </span>]
+<span id="L4331" class="LineNr">4331 </span>
+<span id="L4332" class="LineNr">4332 </span><span class="muScenario">scenario</span> editor-comments-at-start-of-contents [
+<span id="L4333" class="LineNr">4333 </span>  <span class="Constant">local-scope</span>
+<span id="L4334" class="LineNr">4334 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L4335" class="LineNr">4335 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L4336" class="LineNr">4336 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4337" class="LineNr">4337 </span>  $clear-trace
+<span id="L4338" class="LineNr">4338 </span>  assume-console [
+<span id="L4339" class="LineNr">4339 </span>    press ctrl-slash
+<span id="L4340" class="LineNr">4340 </span>  ]
+<span id="L4341" class="LineNr">4341 </span>  run [
+<span id="L4342" class="LineNr">4342 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4343" class="LineNr">4343 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L4344" class="LineNr">4344 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L4345" class="LineNr">4345 </span>  ]
+<span id="L4346" class="LineNr">4346 </span>  screen-should-contain [
+<span id="L4347" class="LineNr">4347 </span>   <span class="Constant"> .          .</span>
+<span id="L4348" class="LineNr">4348 </span>   <span class="Constant"> .#? ab     .</span>
+<span id="L4349" class="LineNr">4349 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L4350" class="LineNr">4350 </span>   <span class="Constant"> .          .</span>
+<span id="L4351" class="LineNr">4351 </span>  ]
+<span id="L4352" class="LineNr">4352 </span>  memory-should-contain [
+<span id="L4353" class="LineNr">4353 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L4354" class="LineNr">4354 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 3</span>
 <span id="L4355" class="LineNr">4355 </span>  ]
-<span id="L4356" class="LineNr">4356 </span>  run [
-<span id="L4357" class="LineNr">4357 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4358" class="LineNr">4358 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L4359" class="LineNr">4359 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L4360" class="LineNr">4360 </span>  ]
-<span id="L4361" class="LineNr">4361 </span>  screen-should-contain [
-<span id="L4362" class="LineNr">4362 </span>   <span class="Constant"> .          .</span>
-<span id="L4363" class="LineNr">4363 </span>   <span class="Constant"> .#? ab     .</span>
-<span id="L4364" class="LineNr">4364 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L4365" class="LineNr">4365 </span>   <span class="Constant"> .          .</span>
-<span id="L4366" class="LineNr">4366 </span>  ]
-<span id="L4367" class="LineNr">4367 </span>  memory-should-contain [
-<span id="L4368" class="LineNr">4368 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
-<span id="L4369" class="LineNr">4369 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
-<span id="L4370" class="LineNr">4370 </span>  ]
-<span id="L4371" class="LineNr">4371 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
-<span id="L4372" class="LineNr">4372 </span>  <span class="Comment"># toggle to uncomment</span>
-<span id="L4373" class="LineNr">4373 </span>  $clear-trace
-<span id="L4374" class="LineNr">4374 </span>  assume-console [
-<span id="L4375" class="LineNr">4375 </span>    press ctrl-slash
-<span id="L4376" class="LineNr">4376 </span>  ]
-<span id="L4377" class="LineNr">4377 </span>  run [
-<span id="L4378" class="LineNr">4378 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4379" class="LineNr">4379 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
-<span id="L4380" class="LineNr">4380 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
-<span id="L4381" class="LineNr">4381 </span>  ]
-<span id="L4382" class="LineNr">4382 </span>  screen-should-contain [
-<span id="L4383" class="LineNr">4383 </span>   <span class="Constant"> .          .</span>
-<span id="L4384" class="LineNr">4384 </span>   <span class="Constant"> .ab        .</span>
-<span id="L4385" class="LineNr">4385 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
-<span id="L4386" class="LineNr">4386 </span>   <span class="Constant"> .          .</span>
-<span id="L4387" class="LineNr">4387 </span>  ]
-<span id="L4388" class="LineNr">4388 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
-<span id="L4389" class="LineNr">4389 </span>]
-<span id="L4390" class="LineNr">4390 </span>
-<span id="L4391" class="LineNr">4391 </span><span class="muScenario">scenario</span> editor-comments-almost-wrapping-line [
-<span id="L4392" class="LineNr">4392 </span>  <span class="Constant">local-scope</span>
-<span id="L4393" class="LineNr">4393 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L4394" class="LineNr">4394 </span>  <span class="Comment"># editor starts out with a non-wrapping line</span>
-<span id="L4395" class="LineNr">4395 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abcd]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L4396" class="LineNr">4396 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4397" class="LineNr">4397 </span>  screen-should-contain [
-<span id="L4398" class="LineNr">4398 </span>   <span class="Constant"> .          .</span>
-<span id="L4399" class="LineNr">4399 </span>   <span class="Constant"> .abcd      .</span>
-<span id="L4400" class="LineNr">4400 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L4401" class="LineNr">4401 </span>   <span class="Constant"> .          .</span>
-<span id="L4402" class="LineNr">4402 </span>  ]
-<span id="L4403" class="LineNr">4403 </span>  $clear-trace
-<span id="L4404" class="LineNr">4404 </span>  <span class="Comment"># on commenting the line is now wrapped</span>
-<span id="L4405" class="LineNr">4405 </span>  assume-console [
-<span id="L4406" class="LineNr">4406 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
-<span id="L4407" class="LineNr">4407 </span>    press ctrl-slash
-<span id="L4408" class="LineNr">4408 </span>  ]
-<span id="L4409" class="LineNr">4409 </span>  run [
-<span id="L4410" class="LineNr">4410 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4411" class="LineNr">4411 </span>  ]
-<span id="L4412" class="LineNr">4412 </span>  screen-should-contain [
-<span id="L4413" class="LineNr">4413 </span>   <span class="Constant"> .          .</span>
-<span id="L4414" class="LineNr">4414 </span>   <span class="Constant"> .#? a↩     .</span>
-<span id="L4415" class="LineNr">4415 </span>   <span class="Constant"> .bcd       .</span>
-<span id="L4416" class="LineNr">4416 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L4417" class="LineNr">4417 </span>   <span class="Constant"> .          .</span>
-<span id="L4418" class="LineNr">4418 </span>  ]
-<span id="L4419" class="LineNr">4419 </span>]
-<span id="L4420" class="LineNr">4420 </span>
-<span id="L4421" class="LineNr">4421 </span><span class="muScenario">scenario</span> editor-uncomments-just-wrapping-line [
-<span id="L4422" class="LineNr">4422 </span>  <span class="Constant">local-scope</span>
-<span id="L4423" class="LineNr">4423 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
-<span id="L4424" class="LineNr">4424 </span>  <span class="Comment"># editor starts out with a comment that wraps the line</span>
-<span id="L4425" class="LineNr">4425 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[#? ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
-<span id="L4426" class="LineNr">4426 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
-<span id="L4427" class="LineNr">4427 </span>  screen-should-contain [
-<span id="L4428" class="LineNr">4428 </span>   <span class="Constant"> .          .</span>
-<span id="L4429" class="LineNr">4429 </span>   <span class="Constant"> .#? a↩     .</span>
-<span id="L4430" class="LineNr">4430 </span>   <span class="Constant"> .b         .</span>
-<span id="L4431" class="LineNr">4431 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L4432" class="LineNr">4432 </span>   <span class="Constant"> .          .</span>
-<span id="L4433" class="LineNr">4433 </span>  ]
-<span id="L4434" class="LineNr">4434 </span>  $clear-trace
-<span id="L4435" class="LineNr">4435 </span>  <span class="Comment"># on uncommenting the line is no longer wrapped</span>
-<span id="L4436" class="LineNr">4436 </span>  assume-console [
-<span id="L4437" class="LineNr">4437 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
-<span id="L4438" class="LineNr">4438 </span>    press ctrl-slash
-<span id="L4439" class="LineNr">4439 </span>  ]
-<span id="L4440" class="LineNr">4440 </span>  run [
-<span id="L4441" class="LineNr">4441 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
-<span id="L4442" class="LineNr">4442 </span>  ]
-<span id="L4443" class="LineNr">4443 </span>  screen-should-contain [
-<span id="L4444" class="LineNr">4444 </span>   <span class="Constant"> .          .</span>
-<span id="L4445" class="LineNr">4445 </span>   <span class="Constant"> .ab        .</span>
-<span id="L4446" class="LineNr">4446 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
-<span id="L4447" class="LineNr">4447 </span>   <span class="Constant"> .          .</span>
-<span id="L4448" class="LineNr">4448 </span>  ]
-<span id="L4449" class="LineNr">4449 </span>]
+<span id="L4356" class="LineNr">4356 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
+<span id="L4357" class="LineNr">4357 </span>]
+<span id="L4358" class="LineNr">4358 </span>
+<span id="L4359" class="LineNr">4359 </span><span class="muScenario">scenario</span> editor-comments-at-end-of-contents [
+<span id="L4360" class="LineNr">4360 </span>  <span class="Constant">local-scope</span>
+<span id="L4361" class="LineNr">4361 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L4362" class="LineNr">4362 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">10/right</span>
+<span id="L4363" class="LineNr">4363 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4364" class="LineNr">4364 </span>  $clear-trace
+<span id="L4365" class="LineNr">4365 </span>  assume-console [
+<span id="L4366" class="LineNr">4366 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
+<span id="L4367" class="LineNr">4367 </span>    press ctrl-slash
+<span id="L4368" class="LineNr">4368 </span>  ]
+<span id="L4369" class="LineNr">4369 </span>  run [
+<span id="L4370" class="LineNr">4370 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4371" class="LineNr">4371 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L4372" class="LineNr">4372 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L4373" class="LineNr">4373 </span>  ]
+<span id="L4374" class="LineNr">4374 </span>  screen-should-contain [
+<span id="L4375" class="LineNr">4375 </span>   <span class="Constant"> .          .</span>
+<span id="L4376" class="LineNr">4376 </span>   <span class="Constant"> .#? ab     .</span>
+<span id="L4377" class="LineNr">4377 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L4378" class="LineNr">4378 </span>   <span class="Constant"> .          .</span>
+<span id="L4379" class="LineNr">4379 </span>  ]
+<span id="L4380" class="LineNr">4380 </span>  memory-should-contain [
+<span id="L4381" class="LineNr">4381 </span>   <span class="Constant"> 4</span> <span class="Special">&lt;-</span><span class="Constant"> 1</span>
+<span id="L4382" class="LineNr">4382 </span>   <span class="Constant"> 5</span> <span class="Special">&lt;-</span><span class="Constant"> 5</span>
+<span id="L4383" class="LineNr">4383 </span>  ]
+<span id="L4384" class="LineNr">4384 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
+<span id="L4385" class="LineNr">4385 </span>  <span class="Comment"># toggle to uncomment</span>
+<span id="L4386" class="LineNr">4386 </span>  $clear-trace
+<span id="L4387" class="LineNr">4387 </span>  assume-console [
+<span id="L4388" class="LineNr">4388 </span>    press ctrl-slash
+<span id="L4389" class="LineNr">4389 </span>  ]
+<span id="L4390" class="LineNr">4390 </span>  run [
+<span id="L4391" class="LineNr">4391 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4392" class="LineNr">4392 </span>    4:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-row:offset</span>
+<span id="L4393" class="LineNr">4393 </span>    5:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> get *e, <span class="Constant">cursor-column:offset</span>
+<span id="L4394" class="LineNr">4394 </span>  ]
+<span id="L4395" class="LineNr">4395 </span>  screen-should-contain [
+<span id="L4396" class="LineNr">4396 </span>   <span class="Constant"> .          .</span>
+<span id="L4397" class="LineNr">4397 </span>   <span class="Constant"> .ab        .</span>
+<span id="L4398" class="LineNr">4398 </span><span class="Constant">    .╌╌╌╌╌╌╌╌╌╌.</span>
+<span id="L4399" class="LineNr">4399 </span>   <span class="Constant"> .          .</span>
+<span id="L4400" class="LineNr">4400 </span>  ]
+<span id="L4401" class="LineNr">4401 </span>  check-trace-count-for-label<span class="Constant"> 10</span>, <span class="Constant">[print-character]</span>
+<span id="L4402" class="LineNr">4402 </span>]
+<span id="L4403" class="LineNr">4403 </span>
+<span id="L4404" class="LineNr">4404 </span><span class="muScenario">scenario</span> editor-comments-almost-wrapping-line [
+<span id="L4405" class="LineNr">4405 </span>  <span class="Constant">local-scope</span>
+<span id="L4406" class="LineNr">4406 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L4407" class="LineNr">4407 </span>  <span class="Comment"># editor starts out with a non-wrapping line</span>
+<span id="L4408" class="LineNr">4408 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[abcd]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L4409" class="LineNr">4409 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4410" class="LineNr">4410 </span>  screen-should-contain [
+<span id="L4411" class="LineNr">4411 </span>   <span class="Constant"> .          .</span>
+<span id="L4412" class="LineNr">4412 </span>   <span class="Constant"> .abcd      .</span>
+<span id="L4413" class="LineNr">4413 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L4414" class="LineNr">4414 </span>   <span class="Constant"> .          .</span>
+<span id="L4415" class="LineNr">4415 </span>  ]
+<span id="L4416" class="LineNr">4416 </span>  $clear-trace
+<span id="L4417" class="LineNr">4417 </span>  <span class="Comment"># on commenting the line is now wrapped</span>
+<span id="L4418" class="LineNr">4418 </span>  assume-console [
+<span id="L4419" class="LineNr">4419 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
+<span id="L4420" class="LineNr">4420 </span>    press ctrl-slash
+<span id="L4421" class="LineNr">4421 </span>  ]
+<span id="L4422" class="LineNr">4422 </span>  run [
+<span id="L4423" class="LineNr">4423 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4424" class="LineNr">4424 </span>  ]
+<span id="L4425" class="LineNr">4425 </span>  screen-should-contain [
+<span id="L4426" class="LineNr">4426 </span>   <span class="Constant"> .          .</span>
+<span id="L4427" class="LineNr">4427 </span>   <span class="Constant"> .#? a↩     .</span>
+<span id="L4428" class="LineNr">4428 </span>   <span class="Constant"> .bcd       .</span>
+<span id="L4429" class="LineNr">4429 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L4430" class="LineNr">4430 </span>   <span class="Constant"> .          .</span>
+<span id="L4431" class="LineNr">4431 </span>  ]
+<span id="L4432" class="LineNr">4432 </span>]
+<span id="L4433" class="LineNr">4433 </span>
+<span id="L4434" class="LineNr">4434 </span><span class="muScenario">scenario</span> editor-uncomments-just-wrapping-line [
+<span id="L4435" class="LineNr">4435 </span>  <span class="Constant">local-scope</span>
+<span id="L4436" class="LineNr">4436 </span>  assume-screen <span class="Constant">10/width</span>, <span class="Constant">5/height</span>
+<span id="L4437" class="LineNr">4437 </span>  <span class="Comment"># editor starts out with a comment that wraps the line</span>
+<span id="L4438" class="LineNr">4438 </span>  e:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> <span class="Constant">[#? ab]</span>, <span class="Constant">0/left</span>, <span class="Constant">5/right</span>
+<span id="L4439" class="LineNr">4439 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
+<span id="L4440" class="LineNr">4440 </span>  screen-should-contain [
+<span id="L4441" class="LineNr">4441 </span>   <span class="Constant"> .          .</span>
+<span id="L4442" class="LineNr">4442 </span>   <span class="Constant"> .#? a↩     .</span>
+<span id="L4443" class="LineNr">4443 </span>   <span class="Constant"> .b         .</span>
+<span id="L4444" class="LineNr">4444 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L4445" class="LineNr">4445 </span>   <span class="Constant"> .          .</span>
+<span id="L4446" class="LineNr">4446 </span>  ]
+<span id="L4447" class="LineNr">4447 </span>  $clear-trace
+<span id="L4448" class="LineNr">4448 </span>  <span class="Comment"># on uncommenting the line is no longer wrapped</span>
+<span id="L4449" class="LineNr">4449 </span>  assume-console [
+<span id="L4450" class="LineNr">4450 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 7</span>
+<span id="L4451" class="LineNr">4451 </span>    press ctrl-slash
+<span id="L4452" class="LineNr">4452 </span>  ]
+<span id="L4453" class="LineNr">4453 </span>  run [
+<span id="L4454" class="LineNr">4454 </span>    <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
+<span id="L4455" class="LineNr">4455 </span>  ]
+<span id="L4456" class="LineNr">4456 </span>  screen-should-contain [
+<span id="L4457" class="LineNr">4457 </span>   <span class="Constant"> .          .</span>
+<span id="L4458" class="LineNr">4458 </span>   <span class="Constant"> .ab        .</span>
+<span id="L4459" class="LineNr">4459 </span>   <span class="Constant"> .╌╌╌╌╌     .</span>
+<span id="L4460" class="LineNr">4460 </span>   <span class="Constant"> .          .</span>
+<span id="L4461" class="LineNr">4461 </span>  ]
+<span id="L4462" class="LineNr">4462 </span>]
 </pre>
 </body>
 </html>
diff --git a/html/edit/004-programming-environment.mu.html b/html/edit/004-programming-environment.mu.html
index 34437128..dc0aa10e 100644
--- a/html/edit/004-programming-environment.mu.html
+++ b/html/edit/004-programming-environment.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -68,10 +68,10 @@ if ('onhashchange' in window) {
 <span id="L6" class="LineNr">  6 </span><span class="muRecipe">def!</span> main [
 <span id="L7" class="LineNr">  7 </span>  <span class="Constant">local-scope</span>
 <span id="L8" class="LineNr">  8 </span>  open-console
-<span id="L9" class="LineNr">  9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
-<span id="L10" class="LineNr"> 10 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <span class="Constant">0/filesystem</span>, <span class="Constant">0/screen</span>
-<span id="L11" class="LineNr"> 11 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <span class="Constant">0/screen</span>, env, <a href='001-editor.mu.html#L107'>render</a>
-<span id="L12" class="LineNr"> 12 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <span class="Constant">0/screen</span>, <span class="Constant">0/console</span>, env, <span class="Constant">0/filesystem</span>
+<span id="L9" class="LineNr">  9 </span>  <a href='../081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L10" class="LineNr"> 10 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a><span class="Constant"> null/filesystem, null/screen</span>
+<span id="L11" class="LineNr"> 11 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a><span class="Constant"> null/screen,</span> env, <a href='001-editor.mu.html#L109'>render</a>
+<span id="L12" class="LineNr"> 12 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a><span class="Constant"> null/screen, null/console,</span> env,<span class="Constant"> null/filesystem</span>
 <span id="L13" class="LineNr"> 13 </span>]
 <span id="L14" class="LineNr"> 14 </span>
 <span id="L15" class="LineNr"> 15 </span><span class="muData">container</span> environment [
@@ -94,7 +94,7 @@ if ('onhashchange' in window) {
 <span id="L32" class="LineNr"> 32 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L51'>new-editor</a> test-sandbox-editor-contents, sandbox-left, width/right
 <span id="L33" class="LineNr"> 33 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">recipes:offset</span>, recipes
 <span id="L34" class="LineNr"> 34 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">current-sandbox:offset</span>, current-sandbox
-<span id="L35" class="LineNr"> 35 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">sandbox-in-focus?:offset</span>, <span class="Constant">0/false</span>
+<span id="L35" class="LineNr"> 35 </span>  *result <span class="Special">&lt;-</span> put *result, <span class="Constant">sandbox-in-focus?:offset</span>,<span class="Constant"> false</span>
 <span id="L36" class="LineNr"> 36 </span><span class="Constant">  <a href='004-programming-environment.mu.html#L36'>&lt;programming-environment-initialization&gt;</a></span>
 <span id="L37" class="LineNr"> 37 </span>]
 <span id="L38" class="LineNr"> 38 </span>
@@ -107,8 +107,8 @@ if ('onhashchange' in window) {
 <span id="L45" class="LineNr"> 45 </span>  <span class="Comment"># if we fall behind we'll stop updating the screen, but then we have to</span>
 <span id="L46" class="LineNr"> 46 </span>  <span class="Comment"># render the entire screen when we catch up.</span>
 <span id="L47" class="LineNr"> 47 </span>  <span class="Comment"># todo: test this</span>
-<span id="L48" class="LineNr"> 48 </span>  render-recipes-on-no-more-events?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
-<span id="L49" class="LineNr"> 49 </span>  render-sandboxes-on-no-more-events?:bool <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L48" class="LineNr"> 48 </span>  render-recipes-on-no-more-events?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
+<span id="L49" class="LineNr"> 49 </span>  render-sandboxes-on-no-more-events?:bool <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L50" class="LineNr"> 50 </span>  <span class="Delimiter">{</span>
 <span id="L51" class="LineNr"> 51 </span>    <span class="Comment"># looping over each (keyboard or touch) event as it occurs</span>
 <span id="L52" class="LineNr"> 52 </span><span class="Constant">    +next-event</span>
@@ -175,13 +175,13 @@ if ('onhashchange' in window) {
 <span id="L113" class="LineNr">113 </span>        <span class="muControl">break-if</span> more-events?
 <span id="L114" class="LineNr">114 </span>        <span class="Delimiter">{</span>
 <span id="L115" class="LineNr">115 </span>          <span class="muControl">break-unless</span> render-recipes-on-no-more-events?
-<span id="L116" class="LineNr">116 </span>          render-recipes-on-no-more-events? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
-<span id="L117" class="LineNr">117 </span>          <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L116" class="LineNr">116 </span>          render-recipes-on-no-more-events? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
+<span id="L117" class="LineNr">117 </span>          <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L118" class="LineNr">118 </span>        <span class="Delimiter">}</span>
 <span id="L119" class="LineNr">119 </span>        <span class="Delimiter">{</span>
 <span id="L120" class="LineNr">120 </span>          <span class="muControl">break-unless</span> render-sandboxes-on-no-more-events?
-<span id="L121" class="LineNr">121 </span>          render-sandboxes-on-no-more-events? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
-<span id="L122" class="LineNr">122 </span>          <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L121" class="LineNr">121 </span>          render-sandboxes-on-no-more-events? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
+<span id="L122" class="LineNr">122 </span>          <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L123" class="LineNr">123 </span>        <span class="Delimiter">}</span>
 <span id="L124" class="LineNr">124 </span>      <span class="Delimiter">}</span>
 <span id="L125" class="LineNr">125 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
@@ -225,8 +225,8 @@ if ('onhashchange' in window) {
 <span id="L163" class="LineNr">163 </span>  <a href='../081print.mu.html#L782'>screen-height</a>:num <span class="Special">&lt;-</span> <a href='../081print.mu.html#L782'>screen-height</a> <a href='../081print.mu.html#L16'>screen</a>
 <span id="L164" class="LineNr">164 </span>  right:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">right:offset</span>
 <span id="L165" class="LineNr">165 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
-<span id="L166" class="LineNr">166 </span>  <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
-<span id="L167" class="LineNr">167 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L166" class="LineNr">166 </span>  <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> copy curr  <span class="Comment"># just in case curr becomes null and we can't compute prev</span>
+<span id="L167" class="LineNr">167 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L168" class="LineNr">168 </span>  color:num <span class="Special">&lt;-</span> copy <span class="Constant">7/white</span>
 <span id="L169" class="LineNr">169 </span>  row:num <span class="Special">&lt;-</span> copy <span class="Constant">1/top</span>
 <span id="L170" class="LineNr">170 </span>  column:num <span class="Special">&lt;-</span> copy left
@@ -248,7 +248,7 @@ if ('onhashchange' in window) {
 <span id="L186" class="LineNr">186 </span>    <span class="Comment"># editor.cursor-row and editor.cursor-column based on</span>
 <span id="L187" class="LineNr">187 </span>    <span class="Comment"># old-before-cursor</span>
 <span id="L188" class="LineNr">188 </span>    <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>      at-cursor?:bool <span class="Special">&lt;-</span> equal old-before-cursor, <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L189" class="LineNr">189 </span>      at-cursor?:bool <span class="Special">&lt;-</span> equal old-before-cursor, <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L190" class="LineNr">190 </span>      <span class="muControl">break-unless</span> at-cursor?
 <span id="L191" class="LineNr">191 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, row
 <span id="L192" class="LineNr">192 </span>      *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-column:offset</span>, column
@@ -266,8 +266,8 @@ if ('onhashchange' in window) {
 <span id="L204" class="LineNr">204 </span>      row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
 <span id="L205" class="LineNr">205 </span>      column <span class="Special">&lt;-</span> copy left
 <span id="L206" class="LineNr">206 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> move-cursor <a href='../081print.mu.html#L16'>screen</a>, row, column
-<span id="L207" class="LineNr">207 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L208" class="LineNr">208 </span>      <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L207" class="LineNr">207 </span>      curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L208" class="LineNr">208 </span>      <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L209" class="LineNr">209 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
 <span id="L210" class="LineNr">210 </span>    <span class="Delimiter">}</span>
 <span id="L211" class="LineNr">211 </span>    <span class="Delimiter">{</span>
@@ -285,8 +285,8 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span>     <span class="muControl"> loop</span> <span class="Constant">+next-character</span>
 <span id="L224" class="LineNr">224 </span>    <span class="Delimiter">}</span>
 <span id="L225" class="LineNr">225 </span>    print <a href='../081print.mu.html#L16'>screen</a>, c, color
-<span id="L226" class="LineNr">226 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L227" class="LineNr">227 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> <a href='../065duplex_list.mu.html#L32'>prev</a>
+<span id="L226" class="LineNr">226 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L227" class="LineNr">227 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> <a href='../065duplex_list.mu.html#L38'>prev</a>
 <span id="L228" class="LineNr">228 </span>    column <span class="Special">&lt;-</span> add column,<span class="Constant"> 1</span>
 <span id="L229" class="LineNr">229 </span>   <span class="muControl"> loop</span>
 <span id="L230" class="LineNr">230 </span>  <span class="Delimiter">}</span>
@@ -337,7 +337,7 @@ if ('onhashchange' in window) {
 <span id="L275" class="LineNr">275 </span>    ]
 <span id="L276" class="LineNr">276 </span>  ]
 <span id="L277" class="LineNr">277 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[def]</span>  <span class="Comment"># contents of sandbox</span>
-<span id="L278" class="LineNr">278 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L278" class="LineNr">278 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L279" class="LineNr">279 </span>  <span class="Comment"># type one letter in each of them</span>
 <span id="L280" class="LineNr">280 </span>  assume-console [
 <span id="L281" class="LineNr">281 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 1</span>
@@ -387,7 +387,7 @@ if ('onhashchange' in window) {
 <span id="L325" class="LineNr">325 </span>    ]
 <span id="L326" class="LineNr">326 </span>  ]
 <span id="L327" class="LineNr">327 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[def]</span>
-<span id="L328" class="LineNr">328 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L328" class="LineNr">328 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L329" class="LineNr">329 </span>  <span class="Comment"># initialize programming environment and highlight cursor</span>
 <span id="L330" class="LineNr">330 </span>  assume-console <span class="Constant">[]</span>
 <span id="L331" class="LineNr">331 </span>  run [
@@ -432,7 +432,7 @@ if ('onhashchange' in window) {
 <span id="L370" class="LineNr">370 </span>  test-sandbox-editor-contents:text <span class="Special">&lt;-</span> new <span class="Constant">[abc</span>
 <span id="L371" class="LineNr">371 </span><span class="Constant">def]</span>
 <span id="L372" class="LineNr">372 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, test-sandbox-editor-contents
-<span id="L373" class="LineNr">373 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L373" class="LineNr">373 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L374" class="LineNr">374 </span>  screen-should-contain [
 <span id="L375" class="LineNr">375 </span>   <span class="Constant"> .           run (F4)           .</span>
 <span id="L376" class="LineNr">376 </span>   <span class="Constant"> .               ╎abc           .</span>
@@ -504,7 +504,7 @@ if ('onhashchange' in window) {
 <span id="L442" class="LineNr">442 </span>  <span class="Comment"># draw dotted line after recipes</span>
 <span id="L443" class="LineNr">443 </span>  <a href='002-typing.mu.html#L1114'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right, <span class="Constant">9480/horizontal-dotted</span>
 <span id="L444" class="LineNr">444 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L445" class="LineNr">445 </span>  <a href='001-editor.mu.html#L209'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
+<span id="L445" class="LineNr">445 </span>  <a href='001-editor.mu.html#L211'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
 <span id="L446" class="LineNr">446 </span>  <span class="Comment">#</span>
 <span id="L447" class="LineNr">447 </span>  <a href='../081print.mu.html#L515'>assert-no-scroll</a> <a href='../081print.mu.html#L16'>screen</a>, old-top-idx
 <span id="L448" class="LineNr">448 </span>]
@@ -522,7 +522,7 @@ if ('onhashchange' in window) {
 <span id="L460" class="LineNr">460 </span>  <span class="Comment"># draw solid line after code (you'll see why in later layers)</span>
 <span id="L461" class="LineNr">461 </span>  <a href='002-typing.mu.html#L1114'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
 <span id="L462" class="LineNr">462 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L463" class="LineNr">463 </span>  <a href='001-editor.mu.html#L209'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
+<span id="L463" class="LineNr">463 </span>  <a href='001-editor.mu.html#L211'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
 <span id="L464" class="LineNr">464 </span>  <span class="Comment">#</span>
 <span id="L465" class="LineNr">465 </span>  <a href='../081print.mu.html#L515'>assert-no-scroll</a> <a href='../081print.mu.html#L16'>screen</a>, old-top-idx
 <span id="L466" class="LineNr">466 </span>]
diff --git a/html/edit/005-sandbox.mu.html b/html/edit/005-sandbox.mu.html
index 93fec922..ab45522e 100644
--- a/html/edit/005-sandbox.mu.html
+++ b/html/edit/005-sandbox.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -72,11 +72,11 @@ if ('onhashchange' in window) {
 <span id="L10" class="LineNr">  10 </span><span class="muRecipe">def!</span> main [
 <span id="L11" class="LineNr">  11 </span>  <span class="Constant">local-scope</span>
 <span id="L12" class="LineNr">  12 </span>  open-console
-<span id="L13" class="LineNr">  13 </span>  <a href='../081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
-<span id="L14" class="LineNr">  14 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <span class="Constant">0/filesystem</span>, <span class="Constant">0/screen</span>
-<span id="L15" class="LineNr">  15 </span>  env <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L473'>restore-sandboxes</a> env, <span class="Constant">0/filesystem</span>
-<span id="L16" class="LineNr">  16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <span class="Constant">0/screen</span>, env, <a href='001-editor.mu.html#L107'>render</a>
-<span id="L17" class="LineNr">  17 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <span class="Constant">0/screen</span>, <span class="Constant">0/console</span>, env, <span class="Constant">0/filesystem</span>
+<span id="L13" class="LineNr">  13 </span>  <a href='../081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L14" class="LineNr">  14 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a><span class="Constant"> null/filesystem, null/screen</span>
+<span id="L15" class="LineNr">  15 </span>  env <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L473'>restore-sandboxes</a> env,<span class="Constant"> null/filesystem</span>
+<span id="L16" class="LineNr">  16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a><span class="Constant"> null/screen,</span> env, <a href='001-editor.mu.html#L109'>render</a>
+<span id="L17" class="LineNr">  17 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a><span class="Constant"> null/screen, null/console,</span> env,<span class="Constant"> null/filesystem</span>
 <span id="L18" class="LineNr">  18 </span>]
 <span id="L19" class="LineNr">  19 </span>
 <span id="L20" class="LineNr">  20 </span><span class="muData">container</span> environment [
@@ -109,7 +109,7 @@ if ('onhashchange' in window) {
 <span id="L47" class="LineNr">  47 </span>  ]
 <span id="L48" class="LineNr">  48 </span>  <span class="Comment"># sandbox editor contains an instruction without storing outputs</span>
 <span id="L49" class="LineNr">  49 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[divide-with-remainder 11, 3]</span>
-<span id="L50" class="LineNr">  50 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L50" class="LineNr">  50 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L51" class="LineNr">  51 </span>  <span class="Comment"># run the code in the editors</span>
 <span id="L52" class="LineNr">  52 </span>  assume-console [
 <span id="L53" class="LineNr">  53 </span>    press F4
@@ -195,7 +195,7 @@ if ('onhashchange' in window) {
 <span id="L133" class="LineNr"> 133 </span>    error?:bool <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L146'>run-sandboxes</a> env, <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>
 <span id="L134" class="LineNr"> 134 </span>    <span class="Comment"># we could just render-all, but we do some work to minimize the number of prints to screen</span>
 <span id="L135" class="LineNr"> 135 </span><span class="Constant">    <a href='005-sandbox.mu.html#L135'>&lt;end-run-sandboxes-on-F4&gt;</a></span>
-<span id="L136" class="LineNr"> 136 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L136" class="LineNr"> 136 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L137" class="LineNr"> 137 </span>    <span class="Delimiter">{</span>
 <span id="L138" class="LineNr"> 138 </span>      <span class="muControl">break-if</span> error?
 <span id="L139" class="LineNr"> 139 </span>      <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L217'>update-status</a> <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[                 ]</span>, <span class="Constant">245/grey</span>
@@ -232,7 +232,7 @@ if ('onhashchange' in window) {
 <span id="L170" class="LineNr"> 170 </span>    <span class="Comment"># needs to be before running them, in case we die when running</span>
 <span id="L171" class="LineNr"> 171 </span>    <a href='005-sandbox.mu.html#L224'>save-sandboxes</a> env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L172" class="LineNr"> 172 </span>    <span class="Comment"># clear sandbox editor</span>
-<span id="L173" class="LineNr"> 173 </span>    init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">167/§</span>, <span class="Constant">0/tail</span>
+<span id="L173" class="LineNr"> 173 </span>    init:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> push <span class="Constant">167/§</span>,<span class="Constant"> null</span>
 <span id="L174" class="LineNr"> 174 </span>    *current-sandbox <span class="Special">&lt;-</span> put *current-sandbox, <span class="Constant">data:offset</span>, init
 <span id="L175" class="LineNr"> 175 </span>    *current-sandbox <span class="Special">&lt;-</span> put *current-sandbox, <span class="Constant">top-of-screen:offset</span>, init
 <span id="L176" class="LineNr"> 176 </span>  <span class="Delimiter">}</span>
@@ -263,7 +263,7 @@ if ('onhashchange' in window) {
 <span id="L201" class="LineNr"> 201 </span>  in:text <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L681'>editor-contents</a> recipes
 <span id="L202" class="LineNr"> 202 </span>  <a href='../088file.mu.html#L11'>resources</a> <span class="Special">&lt;-</span> <a href='../088file.mu.html#L127'>dump</a> <a href='../088file.mu.html#L11'>resources</a>, <span class="Constant">[lesson/recipes.mu]</span>, in
 <span id="L203" class="LineNr"> 203 </span>  reload in
-<span id="L204" class="LineNr"> 204 </span>  errors-found? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L204" class="LineNr"> 204 </span>  errors-found? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L205" class="LineNr"> 205 </span>]
 <span id="L206" class="LineNr"> 206 </span>
 <span id="L207" class="LineNr"> 207 </span><span class="Comment"># replaced in a later layer</span>
@@ -330,7 +330,7 @@ if ('onhashchange' in window) {
 <span id="L268" class="LineNr"> 268 </span>  <a href='002-typing.mu.html#L1114'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
 <span id="L269" class="LineNr"> 269 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
 <span id="L270" class="LineNr"> 270 </span>  row, <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L276'>render-sandboxes</a> <a href='../081print.mu.html#L16'>screen</a>, sandbox, left, right, row, render-from
-<span id="L271" class="LineNr"> 271 </span>  <a href='001-editor.mu.html#L224'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
+<span id="L271" class="LineNr"> 271 </span>  <a href='001-editor.mu.html#L226'>clear-rest-of-screen</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right
 <span id="L272" class="LineNr"> 272 </span>  <span class="Comment">#</span>
 <span id="L273" class="LineNr"> 273 </span>  <a href='../081print.mu.html#L515'>assert-no-scroll</a> <a href='../081print.mu.html#L16'>screen</a>, old-top-idx
 <span id="L274" class="LineNr"> 274 </span>]
@@ -420,7 +420,7 @@ if ('onhashchange' in window) {
 <span id="L358" class="LineNr"> 358 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
 <span id="L359" class="LineNr"> 359 </span>  env <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L473'>restore-sandboxes</a> env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L360" class="LineNr"> 360 </span>  run [
-<span id="L361" class="LineNr"> 361 </span>    <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L361" class="LineNr"> 361 </span>    <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L362" class="LineNr"> 362 </span>  ]
 <span id="L363" class="LineNr"> 363 </span>  screen-should-contain [
 <span id="L364" class="LineNr"> 364 </span>   <span class="Constant"> .                                                                                 run (F4)           .</span>
@@ -537,8 +537,8 @@ if ('onhashchange' in window) {
 <span id="L475" class="LineNr"> 475 </span>  <span class="Constant">load-inputs</span>
 <span id="L476" class="LineNr"> 476 </span>  <span class="Comment"># read all scenarios, pushing them to end of a list of scenarios</span>
 <span id="L477" class="LineNr"> 477 </span>  idx:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L478" class="LineNr"> 478 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
-<span id="L479" class="LineNr"> 479 </span>  <a href='../065duplex_list.mu.html#L32'>prev</a>:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L478" class="LineNr"> 478 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
+<span id="L479" class="LineNr"> 479 </span>  <a href='../065duplex_list.mu.html#L38'>prev</a>:&amp;:sandbox <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L480" class="LineNr"> 480 </span>  <span class="Delimiter">{</span>
 <span id="L481" class="LineNr"> 481 </span>    filename:text <span class="Special">&lt;-</span> append <span class="Constant">[lesson/]</span>, idx
 <span id="L482" class="LineNr"> 482 </span>    contents:text <span class="Special">&lt;-</span> <a href='../088file.mu.html#L38'>slurp</a> <a href='../088file.mu.html#L11'>resources</a>, filename
@@ -557,7 +557,7 @@ if ('onhashchange' in window) {
 <span id="L495" class="LineNr"> 495 </span>      *prev <span class="Special">&lt;-</span> put *prev, <span class="Constant">next-sandbox:offset</span>, curr
 <span id="L496" class="LineNr"> 496 </span>    <span class="Delimiter">}</span>
 <span id="L497" class="LineNr"> 497 </span>    idx <span class="Special">&lt;-</span> add idx,<span class="Constant"> 1</span>
-<span id="L498" class="LineNr"> 498 </span>    <a href='../065duplex_list.mu.html#L32'>prev</a> <span class="Special">&lt;-</span> copy curr
+<span id="L498" class="LineNr"> 498 </span>    <a href='../065duplex_list.mu.html#L38'>prev</a> <span class="Special">&lt;-</span> copy curr
 <span id="L499" class="LineNr"> 499 </span>   <span class="muControl"> loop</span>
 <span id="L500" class="LineNr"> 500 </span>  <span class="Delimiter">}</span>
 <span id="L501" class="LineNr"> 501 </span>  <span class="Comment"># update sandbox count</span>
@@ -648,7 +648,7 @@ if ('onhashchange' in window) {
 <span id="L586" class="LineNr"> 586 </span>  ]
 <span id="L587" class="LineNr"> 587 </span>  <span class="Comment"># sandbox editor contains an instruction without storing outputs</span>
 <span id="L588" class="LineNr"> 588 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L589" class="LineNr"> 589 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L589" class="LineNr"> 589 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L590" class="LineNr"> 590 </span>  $clear-trace
 <span id="L591" class="LineNr"> 591 </span>  <span class="Comment"># run the code in the editors</span>
 <span id="L592" class="LineNr"> 592 </span>  assume-console [
@@ -673,7 +673,7 @@ if ('onhashchange' in window) {
 <span id="L611" class="LineNr"> 611 </span>  ]
 <span id="L612" class="LineNr"> 612 </span>  <span class="Comment"># no need to update editor</span>
 <span id="L613" class="LineNr"> 613 </span>  trace-should-not-contain [
-<span id="L614" class="LineNr"> 614 </span>    app: <a href='001-editor.mu.html#L107'>render</a> recipes
+<span id="L614" class="LineNr"> 614 </span>    app: <a href='001-editor.mu.html#L109'>render</a> recipes
 <span id="L615" class="LineNr"> 615 </span>  ]
 <span id="L616" class="LineNr"> 616 </span>  <span class="Comment"># make a change (incrementing one of the args to 'add'), then rerun</span>
 <span id="L617" class="LineNr"> 617 </span>  $clear-trace
@@ -714,7 +714,7 @@ if ('onhashchange' in window) {
 <span id="L652" class="LineNr"> 652 </span>  ]
 <span id="L653" class="LineNr"> 653 </span>  <span class="Comment"># sandbox editor contains an instruction</span>
 <span id="L654" class="LineNr"> 654 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[print <a href='../081print.mu.html#L16'>screen</a>, 4]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L655" class="LineNr"> 655 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L655" class="LineNr"> 655 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L656" class="LineNr"> 656 </span>  <span class="Comment"># run the code in the editor</span>
 <span id="L657" class="LineNr"> 657 </span>  assume-console [
 <span id="L658" class="LineNr"> 658 </span>    press F4
@@ -747,13 +747,13 @@ if ('onhashchange' in window) {
 <span id="L685" class="LineNr"> 685 </span>  curr:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
 <span id="L686" class="LineNr"> 686 </span>  <span class="Comment"># skip § sentinel</span>
 <span id="L687" class="LineNr"> 687 </span>  assert curr, <span class="Constant">[editor without data is illegal; must have at least a sentinel]</span>
-<span id="L688" class="LineNr"> 688 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
-<span id="L689" class="LineNr"> 689 </span>  <span class="muControl">return-unless</span> curr,<span class="Constant"> 0</span>
+<span id="L688" class="LineNr"> 688 </span>  curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
+<span id="L689" class="LineNr"> 689 </span>  <span class="muControl">return-unless</span> curr,<span class="Constant"> null</span>
 <span id="L690" class="LineNr"> 690 </span>  <span class="Delimiter">{</span>
 <span id="L691" class="LineNr"> 691 </span>    <span class="muControl">break-unless</span> curr
 <span id="L692" class="LineNr"> 692 </span>    c:char <span class="Special">&lt;-</span> get *curr, <span class="Constant">value:offset</span>
 <span id="L693" class="LineNr"> 693 </span>    buf <span class="Special">&lt;-</span> append buf, c
-<span id="L694" class="LineNr"> 694 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> curr
+<span id="L694" class="LineNr"> 694 </span>    curr <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> curr
 <span id="L695" class="LineNr"> 695 </span>   <span class="muControl"> loop</span>
 <span id="L696" class="LineNr"> 696 </span>  <span class="Delimiter">}</span>
 <span id="L697" class="LineNr"> 697 </span>  result <span class="Special">&lt;-</span> <a href='../061text.mu.html#L338'>buffer-to-array</a> buf
@@ -786,7 +786,7 @@ if ('onhashchange' in window) {
 <span id="L724" class="LineNr"> 724 </span>  assume-resources [
 <span id="L725" class="LineNr"> 725 </span>  ]
 <span id="L726" class="LineNr"> 726 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L727" class="LineNr"> 727 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L727" class="LineNr"> 727 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L728" class="LineNr"> 728 </span>  assume-console [
 <span id="L729" class="LineNr"> 729 </span>    press enter
 <span id="L730" class="LineNr"> 730 </span>    press down-arrow
@@ -809,7 +809,7 @@ if ('onhashchange' in window) {
 <span id="L747" class="LineNr"> 747 </span>  assume-resources [
 <span id="L748" class="LineNr"> 748 </span>  ]
 <span id="L749" class="LineNr"> 749 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L750" class="LineNr"> 750 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L750" class="LineNr"> 750 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L751" class="LineNr"> 751 </span>  assume-console [
 <span id="L752" class="LineNr"> 752 </span>    press enter
 <span id="L753" class="LineNr"> 753 </span>    press up-arrow
@@ -835,14 +835,14 @@ if ('onhashchange' in window) {
 <span id="L773" class="LineNr"> 773 </span>  assume-resources [
 <span id="L774" class="LineNr"> 774 </span>  ]
 <span id="L775" class="LineNr"> 775 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L776" class="LineNr"> 776 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L776" class="LineNr"> 776 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L777" class="LineNr"> 777 </span>  assume-console [
 <span id="L778" class="LineNr"> 778 </span>    <span class="Comment"># add a line</span>
 <span id="L779" class="LineNr"> 779 </span>    press enter
 <span id="L780" class="LineNr"> 780 </span>    <span class="Comment"># cursor back to top line</span>
 <span id="L781" class="LineNr"> 781 </span>    press up-arrow
 <span id="L782" class="LineNr"> 782 </span>    <span class="Comment"># try to scroll</span>
-<span id="L783" class="LineNr"> 783 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>  <span class="Comment"># or ctrl-f</span>
+<span id="L783" class="LineNr"> 783 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>  <span class="Comment"># or ctrl-f</span>
 <span id="L784" class="LineNr"> 784 </span>  ]
 <span id="L785" class="LineNr"> 785 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L786" class="LineNr"> 786 </span>  <span class="Comment"># no scroll, and cursor remains at top line</span>
@@ -863,7 +863,7 @@ if ('onhashchange' in window) {
 <span id="L801" class="LineNr"> 801 </span>  ]
 <span id="L802" class="LineNr"> 802 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[ab</span>
 <span id="L803" class="LineNr"> 803 </span><span class="Constant">cd]</span>
-<span id="L804" class="LineNr"> 804 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L804" class="LineNr"> 804 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L805" class="LineNr"> 805 </span>  assume-console [
 <span id="L806" class="LineNr"> 806 </span>    <span class="Comment"># add a line</span>
 <span id="L807" class="LineNr"> 807 </span>    press enter
@@ -895,7 +895,7 @@ if ('onhashchange' in window) {
 <span id="L833" class="LineNr"> 833 </span>  assume-resources [
 <span id="L834" class="LineNr"> 834 </span>  ]
 <span id="L835" class="LineNr"> 835 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 2, 2]</span>
-<span id="L836" class="LineNr"> 836 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L836" class="LineNr"> 836 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L837" class="LineNr"> 837 </span>  assume-console [
 <span id="L838" class="LineNr"> 838 </span>    <span class="Comment"># create a sandbox</span>
 <span id="L839" class="LineNr"> 839 </span>    press F4
@@ -911,7 +911,7 @@ if ('onhashchange' in window) {
 <span id="L849" class="LineNr"> 849 </span>  <span class="Comment"># switch to sandbox window and hit 'page-down'</span>
 <span id="L850" class="LineNr"> 850 </span>  assume-console [
 <span id="L851" class="LineNr"> 851 </span>    press ctrl-n
-<span id="L852" class="LineNr"> 852 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L852" class="LineNr"> 852 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L853" class="LineNr"> 853 </span>  ]
 <span id="L854" class="LineNr"> 854 </span>  run [
 <span id="L855" class="LineNr"> 855 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -929,7 +929,7 @@ if ('onhashchange' in window) {
 <span id="L867" class="LineNr"> 867 </span>  ]
 <span id="L868" class="LineNr"> 868 </span>  <span class="Comment"># hit 'page-up'</span>
 <span id="L869" class="LineNr"> 869 </span>  assume-console [
-<span id="L870" class="LineNr"> 870 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L870" class="LineNr"> 870 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L871" class="LineNr"> 871 </span>  ]
 <span id="L872" class="LineNr"> 872 </span>  run [
 <span id="L873" class="LineNr"> 873 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -964,7 +964,7 @@ if ('onhashchange' in window) {
 <span id="L902" class="LineNr"> 902 </span>      render-from <span class="Special">&lt;-</span> add render-from,<span class="Constant"> 1</span>
 <span id="L903" class="LineNr"> 903 </span>      *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
 <span id="L904" class="LineNr"> 904 </span>    <span class="Delimiter">}</span>
-<span id="L905" class="LineNr"> 905 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L905" class="LineNr"> 905 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L906" class="LineNr"> 906 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L907" class="LineNr"> 907 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L908" class="LineNr"> 908 </span>  <span class="Delimiter">}</span>
@@ -994,26 +994,26 @@ if ('onhashchange' in window) {
 <span id="L932" class="LineNr"> 932 </span>    <span class="muControl">break-if</span> at-beginning?
 <span id="L933" class="LineNr"> 933 </span>    render-from <span class="Special">&lt;-</span> subtract render-from,<span class="Constant"> 1</span>
 <span id="L934" class="LineNr"> 934 </span>    *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>, render-from
-<span id="L935" class="LineNr"> 935 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L935" class="LineNr"> 935 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L936" class="LineNr"> 936 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L937" class="LineNr"> 937 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L938" class="LineNr"> 938 </span>  <span class="Delimiter">}</span>
 <span id="L939" class="LineNr"> 939 </span>]
 <span id="L940" class="LineNr"> 940 </span>
 <span id="L941" class="LineNr"> 941 </span><span class="Comment"># sandbox belonging to 'env' whose next-sandbox is 'in'</span>
-<span id="L942" class="LineNr"> 942 </span><span class="Comment"># return 0 if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox</span>
+<span id="L942" class="LineNr"> 942 </span><span class="Comment"># return null if there's no such sandbox, either because 'in' doesn't exist in 'env', or because it's the first sandbox</span>
 <span id="L943" class="LineNr"> 943 </span><span class="muRecipe">def</span> <a href='005-sandbox.mu.html#L943'>previous-sandbox</a> env:&amp;:environment, in:&amp;:sandbox<span class="muRecipe"> -&gt; </span>out:&amp;:sandbox [
 <span id="L944" class="LineNr"> 944 </span>  <span class="Constant">local-scope</span>
 <span id="L945" class="LineNr"> 945 </span>  <span class="Constant">load-inputs</span>
 <span id="L946" class="LineNr"> 946 </span>  curr:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
-<span id="L947" class="LineNr"> 947 </span>  <span class="muControl">return-unless</span> curr, <span class="Constant">0/nil</span>
-<span id="L948" class="LineNr"> 948 </span>  <a href='../065duplex_list.mu.html#L25'>next</a>:&amp;:sandbox <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
+<span id="L947" class="LineNr"> 947 </span>  <span class="muControl">return-unless</span> curr,<span class="Constant"> null</span>
+<span id="L948" class="LineNr"> 948 </span>  <a href='../065duplex_list.mu.html#L31'>next</a>:&amp;:sandbox <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
 <span id="L949" class="LineNr"> 949 </span>  <span class="Delimiter">{</span>
-<span id="L950" class="LineNr"> 950 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L25'>next</a>, <span class="Constant">0/nil</span>
-<span id="L951" class="LineNr"> 951 </span>    found?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L25'>next</a>, in
+<span id="L950" class="LineNr"> 950 </span>    <span class="muControl">return-unless</span> <a href='../065duplex_list.mu.html#L31'>next</a>,<span class="Constant"> null</span>
+<span id="L951" class="LineNr"> 951 </span>    found?:bool <span class="Special">&lt;-</span> equal <a href='../065duplex_list.mu.html#L31'>next</a>, in
 <span id="L952" class="LineNr"> 952 </span>    <span class="muControl">break-if</span> found?
-<span id="L953" class="LineNr"> 953 </span>    curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L25'>next</a>
-<span id="L954" class="LineNr"> 954 </span>    <a href='../065duplex_list.mu.html#L25'>next</a> <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
+<span id="L953" class="LineNr"> 953 </span>    curr <span class="Special">&lt;-</span> copy <a href='../065duplex_list.mu.html#L31'>next</a>
+<span id="L954" class="LineNr"> 954 </span>    <a href='../065duplex_list.mu.html#L31'>next</a> <span class="Special">&lt;-</span> get *curr, <span class="Constant">next-sandbox:offset</span>
 <span id="L955" class="LineNr"> 955 </span>   <span class="muControl"> loop</span>
 <span id="L956" class="LineNr"> 956 </span>  <span class="Delimiter">}</span>
 <span id="L957" class="LineNr"> 957 </span> <span class="muControl"> return</span> curr
@@ -1027,7 +1027,7 @@ if ('onhashchange' in window) {
 <span id="L965" class="LineNr"> 965 </span>  assume-resources [
 <span id="L966" class="LineNr"> 966 </span>  ]
 <span id="L967" class="LineNr"> 967 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L968" class="LineNr"> 968 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L968" class="LineNr"> 968 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L969" class="LineNr"> 969 </span>  <span class="Comment"># create 2 sandboxes</span>
 <span id="L970" class="LineNr"> 970 </span>  assume-console [
 <span id="L971" class="LineNr"> 971 </span>    press ctrl-n
@@ -1053,7 +1053,7 @@ if ('onhashchange' in window) {
 <span id="L991" class="LineNr"> 991 </span>  ]
 <span id="L992" class="LineNr"> 992 </span>  <span class="Comment"># hit 'page-down'</span>
 <span id="L993" class="LineNr"> 993 </span>  assume-console [
-<span id="L994" class="LineNr"> 994 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L994" class="LineNr"> 994 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L995" class="LineNr"> 995 </span>  ]
 <span id="L996" class="LineNr"> 996 </span>  run [
 <span id="L997" class="LineNr"> 997 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1075,7 +1075,7 @@ if ('onhashchange' in window) {
 <span id="L1013" class="LineNr">1013 </span>  ]
 <span id="L1014" class="LineNr">1014 </span>  <span class="Comment"># hit 'page-down' again</span>
 <span id="L1015" class="LineNr">1015 </span>  assume-console [
-<span id="L1016" class="LineNr">1016 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1016" class="LineNr">1016 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1017" class="LineNr">1017 </span>  ]
 <span id="L1018" class="LineNr">1018 </span>  run [
 <span id="L1019" class="LineNr">1019 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1092,7 +1092,7 @@ if ('onhashchange' in window) {
 <span id="L1030" class="LineNr">1030 </span>  ]
 <span id="L1031" class="LineNr">1031 </span>  <span class="Comment"># hit 'page-down' again</span>
 <span id="L1032" class="LineNr">1032 </span>  assume-console [
-<span id="L1033" class="LineNr">1033 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1033" class="LineNr">1033 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1034" class="LineNr">1034 </span>  ]
 <span id="L1035" class="LineNr">1035 </span>  run [
 <span id="L1036" class="LineNr">1036 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1109,7 +1109,7 @@ if ('onhashchange' in window) {
 <span id="L1047" class="LineNr">1047 </span>  ]
 <span id="L1048" class="LineNr">1048 </span>  <span class="Comment"># hit 'page-up'</span>
 <span id="L1049" class="LineNr">1049 </span>  assume-console [
-<span id="L1050" class="LineNr">1050 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L1050" class="LineNr">1050 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L1051" class="LineNr">1051 </span>  ]
 <span id="L1052" class="LineNr">1052 </span>  run [
 <span id="L1053" class="LineNr">1053 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1128,7 +1128,7 @@ if ('onhashchange' in window) {
 <span id="L1066" class="LineNr">1066 </span>  ]
 <span id="L1067" class="LineNr">1067 </span>  <span class="Comment"># hit 'page-up' again</span>
 <span id="L1068" class="LineNr">1068 </span>  assume-console [
-<span id="L1069" class="LineNr">1069 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L1069" class="LineNr">1069 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L1070" class="LineNr">1070 </span>  ]
 <span id="L1071" class="LineNr">1071 </span>  run [
 <span id="L1072" class="LineNr">1072 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1150,7 +1150,7 @@ if ('onhashchange' in window) {
 <span id="L1088" class="LineNr">1088 </span>  ]
 <span id="L1089" class="LineNr">1089 </span>  <span class="Comment"># hit 'page-up' again</span>
 <span id="L1090" class="LineNr">1090 </span>  assume-console [
-<span id="L1091" class="LineNr">1091 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L1091" class="LineNr">1091 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L1092" class="LineNr">1092 </span>  ]
 <span id="L1093" class="LineNr">1093 </span>  run [
 <span id="L1094" class="LineNr">1094 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1180,7 +1180,7 @@ if ('onhashchange' in window) {
 <span id="L1118" class="LineNr">1118 </span>  assume-resources [
 <span id="L1119" class="LineNr">1119 </span>  ]
 <span id="L1120" class="LineNr">1120 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L1121" class="LineNr">1121 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L1121" class="LineNr">1121 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L1122" class="LineNr">1122 </span>  <span class="Comment"># create a sandbox</span>
 <span id="L1123" class="LineNr">1123 </span>  assume-console [
 <span id="L1124" class="LineNr">1124 </span>    press ctrl-n
@@ -1200,7 +1200,7 @@ if ('onhashchange' in window) {
 <span id="L1138" class="LineNr">1138 </span>  ]
 <span id="L1139" class="LineNr">1139 </span>  <span class="Comment"># hit 'page-down' and 'page-up' a couple of times. sandbox index should be stable</span>
 <span id="L1140" class="LineNr">1140 </span>  assume-console [
-<span id="L1141" class="LineNr">1141 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1141" class="LineNr">1141 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1142" class="LineNr">1142 </span>  ]
 <span id="L1143" class="LineNr">1143 </span>  run [
 <span id="L1144" class="LineNr">1144 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1218,7 +1218,7 @@ if ('onhashchange' in window) {
 <span id="L1156" class="LineNr">1156 </span>  ]
 <span id="L1157" class="LineNr">1157 </span>  <span class="Comment"># hit 'page-up' again</span>
 <span id="L1158" class="LineNr">1158 </span>  assume-console [
-<span id="L1159" class="LineNr">1159 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L1159" class="LineNr">1159 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L1160" class="LineNr">1160 </span>  ]
 <span id="L1161" class="LineNr">1161 </span>  run [
 <span id="L1162" class="LineNr">1162 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -1236,7 +1236,7 @@ if ('onhashchange' in window) {
 <span id="L1174" class="LineNr">1174 </span>  ]
 <span id="L1175" class="LineNr">1175 </span>  <span class="Comment"># hit 'page-down'</span>
 <span id="L1176" class="LineNr">1176 </span>  assume-console [
-<span id="L1177" class="LineNr">1177 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1177" class="LineNr">1177 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1178" class="LineNr">1178 </span>  ]
 <span id="L1179" class="LineNr">1179 </span>  run [
 <span id="L1180" class="LineNr">1180 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
diff --git a/html/edit/006-sandbox-copy.mu.html b/html/edit/006-sandbox-copy.mu.html
index 57c581a7..fe119f1e 100644
--- a/html/edit/006-sandbox-copy.mu.html
+++ b/html/edit/006-sandbox-copy.mu.html
@@ -15,16 +15,16 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -70,7 +70,7 @@ if ('onhashchange' in window) {
 <span id="L9" class="LineNr">  9 </span>  assume-resources [
 <span id="L10" class="LineNr"> 10 </span>  ]
 <span id="L11" class="LineNr"> 11 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 1, 1]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L12" class="LineNr"> 12 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L12" class="LineNr"> 12 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L13" class="LineNr"> 13 </span>  <span class="Comment"># run it</span>
 <span id="L14" class="LineNr"> 14 </span>  assume-console [
 <span id="L15" class="LineNr"> 15 </span>    press F4
@@ -131,7 +131,7 @@ if ('onhashchange' in window) {
 <span id="L70" class="LineNr"> 70 </span>  assume-resources [
 <span id="L71" class="LineNr"> 71 </span>  ]
 <span id="L72" class="LineNr"> 72 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 1, 1]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L73" class="LineNr"> 73 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L73" class="LineNr"> 73 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L74" class="LineNr"> 74 </span>  <span class="Comment"># run it</span>
 <span id="L75" class="LineNr"> 75 </span>  assume-console [
 <span id="L76" class="LineNr"> 76 </span>    press F4
@@ -191,7 +191,7 @@ if ('onhashchange' in window) {
 <span id="L130" class="LineNr">130 </span>    <span class="muControl">break-unless</span> copy?
 <span id="L131" class="LineNr">131 </span>    copy?, env <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L159'>try-copy-sandbox</a> click-row, env
 <span id="L132" class="LineNr">132 </span>    <span class="muControl">break-unless</span> copy?
-<span id="L133" class="LineNr">133 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L133" class="LineNr">133 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L134" class="LineNr">134 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L135" class="LineNr">135 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L136" class="LineNr">136 </span>  <span class="Delimiter">}</span>
@@ -203,7 +203,7 @@ if ('onhashchange' in window) {
 <span id="L142" class="LineNr">142 </span>  <span class="Constant">load-inputs</span>
 <span id="L143" class="LineNr">143 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L144" class="LineNr">144 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
-<span id="L145" class="LineNr">145 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
+<span id="L145" class="LineNr">145 </span>  <span class="muControl">return-unless</span> click-sandbox-area?,<span class="Constant"> false</span>
 <span id="L146" class="LineNr">146 </span>  <span class="Comment"># narrower, is the click in the columns spanning the 'copy' button?</span>
 <span id="L147" class="LineNr">147 </span>  first-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L148" class="LineNr">148 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
@@ -211,7 +211,7 @@ if ('onhashchange' in window) {
 <span id="L150" class="LineNr">150 </span>  sandbox-right-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">right:offset</span>
 <span id="L151" class="LineNr">151 </span>  _, _, copy-button-left:num, copy-button-right:num <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L376'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
 <span id="L152" class="LineNr">152 </span>  copy-button-vertical-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L211'>within-range?</a> click-column, copy-button-left, copy-button-right
-<span id="L153" class="LineNr">153 </span>  <span class="muControl">return-unless</span> copy-button-vertical-area?, <span class="Constant">0/false</span>
+<span id="L153" class="LineNr">153 </span>  <span class="muControl">return-unless</span> copy-button-vertical-area?,<span class="Constant"> false</span>
 <span id="L154" class="LineNr">154 </span>  <span class="Comment"># finally, is sandbox editor empty?</span>
 <span id="L155" class="LineNr">155 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L156" class="LineNr">156 </span>  result <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L203'>empty-editor?</a> current-sandbox
@@ -222,15 +222,15 @@ if ('onhashchange' in window) {
 <span id="L161" class="LineNr">161 </span>  <span class="Constant">load-inputs</span>
 <span id="L162" class="LineNr">162 </span>  <span class="Comment"># identify the sandbox to copy, if the click was actually on the 'copy' button</span>
 <span id="L163" class="LineNr">163 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
-<span id="L164" class="LineNr">164 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
-<span id="L165" class="LineNr">165 </span>  clicked-on-copy-button? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L164" class="LineNr">164 </span>  <span class="muControl">return-unless</span> sandbox,<span class="Constant"> false</span>
+<span id="L165" class="LineNr">165 </span>  clicked-on-copy-button? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L166" class="LineNr">166 </span>  text:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L167" class="LineNr">167 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L168" class="LineNr">168 </span>  current-sandbox <span class="Special">&lt;-</span> <a href='001-editor.mu.html#L72'>insert-text</a> current-sandbox, text
 <span id="L169" class="LineNr">169 </span>  <span class="Comment"># reset scroll</span>
 <span id="L170" class="LineNr">170 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>,<span class="Constant"> -1</span>
 <span id="L171" class="LineNr">171 </span>  <span class="Comment"># position cursor in sandbox editor</span>
-<span id="L172" class="LineNr">172 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>, <span class="Constant">1/true</span>
+<span id="L172" class="LineNr">172 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>,<span class="Constant"> true</span>
 <span id="L173" class="LineNr">173 </span>]
 <span id="L174" class="LineNr">174 </span>
 <span id="L175" class="LineNr">175 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env:&amp;:environment, click-row:num<span class="muRecipe"> -&gt; </span>result:&amp;:sandbox [
@@ -245,7 +245,7 @@ if ('onhashchange' in window) {
 <span id="L184" class="LineNr">184 </span>    curr-sandbox <span class="Special">&lt;-</span> get *curr-sandbox, <span class="Constant">next-sandbox:offset</span>
 <span id="L185" class="LineNr">185 </span>   <span class="muControl"> loop</span>
 <span id="L186" class="LineNr">186 </span>  <span class="Delimiter">}</span>
-<span id="L187" class="LineNr">187 </span> <span class="muControl"> return</span> <span class="Constant">0/not-found</span>
+<span id="L187" class="LineNr">187 </span> <span class="muControl"> return</span><span class="Constant"> null/not-found</span>
 <span id="L188" class="LineNr">188 </span>]
 <span id="L189" class="LineNr">189 </span>
 <span id="L190" class="LineNr">190 </span><span class="muRecipe">def</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row:num, click-column:num, env:&amp;:environment<span class="muRecipe"> -&gt; </span>result:bool [
@@ -254,9 +254,9 @@ if ('onhashchange' in window) {
 <span id="L193" class="LineNr">193 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L194" class="LineNr">194 </span>  sandbox-left-margin:num <span class="Special">&lt;-</span> get *current-sandbox, <span class="Constant">left:offset</span>
 <span id="L195" class="LineNr">195 </span>  on-sandbox-side?:bool <span class="Special">&lt;-</span> greater-or-equal click-column, sandbox-left-margin
-<span id="L196" class="LineNr">196 </span>  <span class="muControl">return-unless</span> on-sandbox-side?, <span class="Constant">0/false</span>
+<span id="L196" class="LineNr">196 </span>  <span class="muControl">return-unless</span> on-sandbox-side?,<span class="Constant"> false</span>
 <span id="L197" class="LineNr">197 </span>  first-sandbox:&amp;:sandbox <span class="Special">&lt;-</span> get *env, <span class="Constant">sandbox:offset</span>
-<span id="L198" class="LineNr">198 </span>  <span class="muControl">return-unless</span> first-sandbox, <span class="Constant">0/false</span>
+<span id="L198" class="LineNr">198 </span>  <span class="muControl">return-unless</span> first-sandbox,<span class="Constant"> false</span>
 <span id="L199" class="LineNr">199 </span>  first-sandbox-begins:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">starting-row-on-screen:offset</span>
 <span id="L200" class="LineNr">200 </span>  result <span class="Special">&lt;-</span> greater-or-equal click-row, first-sandbox-begins
 <span id="L201" class="LineNr">201 </span>]
@@ -265,7 +265,7 @@ if ('onhashchange' in window) {
 <span id="L204" class="LineNr">204 </span>  <span class="Constant">local-scope</span>
 <span id="L205" class="LineNr">205 </span>  <span class="Constant">load-inputs</span>
 <span id="L206" class="LineNr">206 </span>  head:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L207" class="LineNr">207 </span>  first:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> head
+<span id="L207" class="LineNr">207 </span>  first:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> head
 <span id="L208" class="LineNr">208 </span>  result <span class="Special">&lt;-</span> not first
 <span id="L209" class="LineNr">209 </span>]
 <span id="L210" class="LineNr">210 </span>
@@ -285,7 +285,7 @@ if ('onhashchange' in window) {
 <span id="L224" class="LineNr">224 </span>  assume-resources [
 <span id="L225" class="LineNr">225 </span>  ]
 <span id="L226" class="LineNr">226 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 1, 1]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L227" class="LineNr">227 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L227" class="LineNr">227 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L228" class="LineNr">228 </span>  <span class="Comment"># run it</span>
 <span id="L229" class="LineNr">229 </span>  assume-console [
 <span id="L230" class="LineNr">230 </span>    press F4
@@ -350,7 +350,7 @@ if ('onhashchange' in window) {
 <span id="L289" class="LineNr">289 </span>  assume-resources [
 <span id="L290" class="LineNr">290 </span>  ]
 <span id="L291" class="LineNr">291 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 1, 1]</span>  <span class="Comment"># contents of sandbox editor</span>
-<span id="L292" class="LineNr">292 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L292" class="LineNr">292 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L293" class="LineNr">293 </span>  <span class="Comment"># run it</span>
 <span id="L294" class="LineNr">294 </span>  assume-console [
 <span id="L295" class="LineNr">295 </span>    press F4
@@ -410,8 +410,8 @@ if ('onhashchange' in window) {
 <span id="L349" class="LineNr">349 </span>    <span class="muControl">break-unless</span> copy?
 <span id="L350" class="LineNr">350 </span>    modified?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L375'>prepend-sandbox-into-recipe-side</a> click-row, env
 <span id="L351" class="LineNr">351 </span>    <span class="muControl">break-unless</span> modified?
-<span id="L352" class="LineNr">352 </span>    *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>, <span class="Constant">0/false</span>
-<span id="L353" class="LineNr">353 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L352" class="LineNr">352 </span>    *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>,<span class="Constant"> false</span>
+<span id="L353" class="LineNr">353 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L354" class="LineNr">354 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L355" class="LineNr">355 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L356" class="LineNr">356 </span>  <span class="Delimiter">}</span>
@@ -423,7 +423,7 @@ if ('onhashchange' in window) {
 <span id="L362" class="LineNr">362 </span>  <span class="Constant">load-inputs</span>
 <span id="L363" class="LineNr">363 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L364" class="LineNr">364 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
-<span id="L365" class="LineNr">365 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
+<span id="L365" class="LineNr">365 </span>  <span class="muControl">return-unless</span> click-sandbox-area?,<span class="Constant"> false</span>
 <span id="L366" class="LineNr">366 </span>  <span class="Comment"># narrower, is the click in the columns spanning the 'copy' button?</span>
 <span id="L367" class="LineNr">367 </span>  first-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L368" class="LineNr">368 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
@@ -437,7 +437,7 @@ if ('onhashchange' in window) {
 <span id="L376" class="LineNr">376 </span>  <span class="Constant">local-scope</span>
 <span id="L377" class="LineNr">377 </span>  <span class="Constant">load-inputs</span>
 <span id="L378" class="LineNr">378 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
-<span id="L379" class="LineNr">379 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
+<span id="L379" class="LineNr">379 </span>  <span class="muControl">return-unless</span> sandbox,<span class="Constant"> false</span>
 <span id="L380" class="LineNr">380 </span>  recipe-editor:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">recipes:offset</span>
 <span id="L381" class="LineNr">381 </span>  recipe-data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *recipe-editor, <span class="Constant">data:offset</span>
 <span id="L382" class="LineNr">382 </span>  <span class="Comment"># make the newly inserted code easy to delineate</span>
@@ -452,7 +452,7 @@ if ('onhashchange' in window) {
 <span id="L391" class="LineNr">391 </span>  *recipe-editor <span class="Special">&lt;-</span> put *recipe-editor, <span class="Constant">before-cursor:offset</span>, recipe-data
 <span id="L392" class="LineNr">392 </span>  *recipe-editor <span class="Special">&lt;-</span> put *recipe-editor, <span class="Constant">cursor-row:offset</span>,<span class="Constant"> 1</span>
 <span id="L393" class="LineNr">393 </span>  *recipe-editor <span class="Special">&lt;-</span> put *recipe-editor, <span class="Constant">cursor-column:offset</span>,<span class="Constant"> 0</span>
-<span id="L394" class="LineNr">394 </span> <span class="muControl"> return</span> <span class="Constant">1/true</span>
+<span id="L394" class="LineNr">394 </span> <span class="muControl"> return</span><span class="Constant"> true</span>
 <span id="L395" class="LineNr">395 </span>]
 </pre>
 </body>
diff --git a/html/edit/007-sandbox-delete.mu.html b/html/edit/007-sandbox-delete.mu.html
index d51294bc..74ad4eb6 100644
--- a/html/edit/007-sandbox-delete.mu.html
+++ b/html/edit/007-sandbox-delete.mu.html
@@ -15,16 +15,16 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -68,7 +68,7 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr">  7 </span>  assume-resources [
 <span id="L8" class="LineNr">  8 </span>  ]
 <span id="L9" class="LineNr">  9 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L10" class="LineNr"> 10 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L10" class="LineNr"> 10 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L11" class="LineNr"> 11 </span>  <span class="Comment"># run a few commands</span>
 <span id="L12" class="LineNr"> 12 </span>  assume-console [
 <span id="L13" class="LineNr"> 13 </span>    left-click<span class="Constant"> 1</span>,<span class="Constant"> 75</span>
@@ -134,7 +134,7 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span>    <span class="muControl">break-unless</span> delete?
 <span id="L74" class="LineNr"> 74 </span>    delete?, env <span class="Special">&lt;-</span> <a href='007-sandbox-delete.mu.html#L98'>try-delete-sandbox</a> click-row, env
 <span id="L75" class="LineNr"> 75 </span>    <span class="muControl">break-unless</span> delete?
-<span id="L76" class="LineNr"> 76 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L76" class="LineNr"> 76 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L77" class="LineNr"> 77 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L78" class="LineNr"> 78 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L79" class="LineNr"> 79 </span>  <span class="Delimiter">}</span>
@@ -146,7 +146,7 @@ if ('onhashchange' in window) {
 <span id="L85" class="LineNr"> 85 </span>  <span class="Constant">load-inputs</span>
 <span id="L86" class="LineNr"> 86 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L87" class="LineNr"> 87 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
-<span id="L88" class="LineNr"> 88 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="muControl">return-unless</span> click-sandbox-area?,<span class="Constant"> false</span>
 <span id="L89" class="LineNr"> 89 </span>  <span class="Comment"># narrower, is the click in the columns spanning the 'copy' button?</span>
 <span id="L90" class="LineNr"> 90 </span>  first-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L91" class="LineNr"> 91 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
@@ -161,8 +161,8 @@ if ('onhashchange' in window) {
 <span id="L100" class="LineNr">100 </span>  <span class="Constant">load-inputs</span>
 <span id="L101" class="LineNr">101 </span>  <span class="Comment"># identify the sandbox to delete, if the click was actually on the 'delete' button</span>
 <span id="L102" class="LineNr">102 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
-<span id="L103" class="LineNr">103 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
-<span id="L104" class="LineNr">104 </span>  clicked-on-delete-button? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L103" class="LineNr">103 </span>  <span class="muControl">return-unless</span> sandbox,<span class="Constant"> false</span>
+<span id="L104" class="LineNr">104 </span>  clicked-on-delete-button? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L105" class="LineNr">105 </span>  env <span class="Special">&lt;-</span> <a href='007-sandbox-delete.mu.html#L108'>delete-sandbox</a> env, sandbox
 <span id="L106" class="LineNr">106 </span>]
 <span id="L107" class="LineNr">107 </span>
@@ -216,7 +216,7 @@ if ('onhashchange' in window) {
 <span id="L155" class="LineNr">155 </span>  assume-resources [
 <span id="L156" class="LineNr">156 </span>  ]
 <span id="L157" class="LineNr">157 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L158" class="LineNr">158 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L158" class="LineNr">158 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L159" class="LineNr">159 </span>  <span class="Comment"># create 2 sandboxes and scroll to second</span>
 <span id="L160" class="LineNr">160 </span>  assume-console [
 <span id="L161" class="LineNr">161 </span>    press ctrl-n
@@ -224,7 +224,7 @@ if ('onhashchange' in window) {
 <span id="L163" class="LineNr">163 </span>    press F4
 <span id="L164" class="LineNr">164 </span>    type <span class="Constant">[add 1, 1]</span>
 <span id="L165" class="LineNr">165 </span>    press F4
-<span id="L166" class="LineNr">166 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L166" class="LineNr">166 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L167" class="LineNr">167 </span>  ]
 <span id="L168" class="LineNr">168 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L169" class="LineNr">169 </span>  screen-should-contain [
@@ -263,7 +263,7 @@ if ('onhashchange' in window) {
 <span id="L202" class="LineNr">202 </span>  assume-resources [
 <span id="L203" class="LineNr">203 </span>  ]
 <span id="L204" class="LineNr">204 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L205" class="LineNr">205 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L205" class="LineNr">205 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L206" class="LineNr">206 </span>  <span class="Comment"># create 2 sandboxes and scroll to second</span>
 <span id="L207" class="LineNr">207 </span>  assume-console [
 <span id="L208" class="LineNr">208 </span>    press ctrl-n
@@ -271,7 +271,7 @@ if ('onhashchange' in window) {
 <span id="L210" class="LineNr">210 </span>    press F4
 <span id="L211" class="LineNr">211 </span>    type <span class="Constant">[add 1, 1]</span>
 <span id="L212" class="LineNr">212 </span>    press F4
-<span id="L213" class="LineNr">213 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L213" class="LineNr">213 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L214" class="LineNr">214 </span>  ]
 <span id="L215" class="LineNr">215 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L216" class="LineNr">216 </span>  screen-should-contain [
@@ -310,7 +310,7 @@ if ('onhashchange' in window) {
 <span id="L249" class="LineNr">249 </span>  assume-resources [
 <span id="L250" class="LineNr">250 </span>  ]
 <span id="L251" class="LineNr">251 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L252" class="LineNr">252 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L252" class="LineNr">252 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L253" class="LineNr">253 </span>  <span class="Comment"># create 2 sandboxes and scroll to second</span>
 <span id="L254" class="LineNr">254 </span>  assume-console [
 <span id="L255" class="LineNr">255 </span>    press ctrl-n
@@ -318,8 +318,8 @@ if ('onhashchange' in window) {
 <span id="L257" class="LineNr">257 </span>    press F4
 <span id="L258" class="LineNr">258 </span>    type <span class="Constant">[add 1, 1]</span>
 <span id="L259" class="LineNr">259 </span>    press F4
-<span id="L260" class="LineNr">260 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L261" class="LineNr">261 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L260" class="LineNr">260 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L261" class="LineNr">261 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L262" class="LineNr">262 </span>  ]
 <span id="L263" class="LineNr">263 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L264" class="LineNr">264 </span>  screen-should-contain [
@@ -359,7 +359,7 @@ if ('onhashchange' in window) {
 <span id="L298" class="LineNr">298 </span>  assume-resources [
 <span id="L299" class="LineNr">299 </span>  ]
 <span id="L300" class="LineNr">300 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L301" class="LineNr">301 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L301" class="LineNr">301 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L302" class="LineNr">302 </span>  <span class="Comment"># create 2 sandboxes</span>
 <span id="L303" class="LineNr">303 </span>  assume-console [
 <span id="L304" class="LineNr">304 </span>    press ctrl-n
@@ -384,8 +384,8 @@ if ('onhashchange' in window) {
 <span id="L323" class="LineNr">323 </span>  <span class="Comment"># delete the second sandbox, then try to scroll down twice</span>
 <span id="L324" class="LineNr">324 </span>  assume-console [
 <span id="L325" class="LineNr">325 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 99</span>
-<span id="L326" class="LineNr">326 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L327" class="LineNr">327 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L326" class="LineNr">326 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L327" class="LineNr">327 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L328" class="LineNr">328 </span>  ]
 <span id="L329" class="LineNr">329 </span>  run [
 <span id="L330" class="LineNr">330 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
diff --git a/html/edit/008-sandbox-edit.mu.html b/html/edit/008-sandbox-edit.mu.html
index a38ea948..62de3b4d 100644
--- a/html/edit/008-sandbox-edit.mu.html
+++ b/html/edit/008-sandbox-edit.mu.html
@@ -15,16 +15,16 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -69,7 +69,7 @@ if ('onhashchange' in window) {
 <span id="L8" class="LineNr">  8 </span>  assume-resources [
 <span id="L9" class="LineNr">  9 </span>  ]
 <span id="L10" class="LineNr"> 10 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 2, 2]</span>
-<span id="L11" class="LineNr"> 11 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L11" class="LineNr"> 11 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L12" class="LineNr"> 12 </span>  <span class="Comment"># run it</span>
 <span id="L13" class="LineNr"> 13 </span>  assume-console [
 <span id="L14" class="LineNr"> 14 </span>    press F4
@@ -122,7 +122,7 @@ if ('onhashchange' in window) {
 <span id="L61" class="LineNr"> 61 </span>  assume-resources [
 <span id="L62" class="LineNr"> 62 </span>  ]
 <span id="L63" class="LineNr"> 63 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[add 2, 2]</span>
-<span id="L64" class="LineNr"> 64 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L64" class="LineNr"> 64 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Comment"># run it</span>
 <span id="L66" class="LineNr"> 66 </span>  assume-console [
 <span id="L67" class="LineNr"> 67 </span>    press F4
@@ -174,7 +174,7 @@ if ('onhashchange' in window) {
 <span id="L113" class="LineNr">113 </span>    <span class="muControl">break-unless</span> edit?
 <span id="L114" class="LineNr">114 </span>    edit?, env <span class="Special">&lt;-</span> <a href='008-sandbox-edit.mu.html#L142'>try-edit-sandbox</a> click-row, env
 <span id="L115" class="LineNr">115 </span>    <span class="muControl">break-unless</span> edit?
-<span id="L116" class="LineNr">116 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L116" class="LineNr">116 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L117" class="LineNr">117 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L118" class="LineNr">118 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L119" class="LineNr">119 </span>  <span class="Delimiter">}</span>
@@ -186,7 +186,7 @@ if ('onhashchange' in window) {
 <span id="L125" class="LineNr">125 </span>  <span class="Constant">load-inputs</span>
 <span id="L126" class="LineNr">126 </span>  <span class="Comment"># are we below the sandbox editor?</span>
 <span id="L127" class="LineNr">127 </span>  click-sandbox-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L190'>click-on-sandbox-area?</a> click-row, click-column, env
-<span id="L128" class="LineNr">128 </span>  <span class="muControl">return-unless</span> click-sandbox-area?, <span class="Constant">0/false</span>
+<span id="L128" class="LineNr">128 </span>  <span class="muControl">return-unless</span> click-sandbox-area?,<span class="Constant"> false</span>
 <span id="L129" class="LineNr">129 </span>  <span class="Comment"># narrower, is the click in the columns spanning the 'edit' button?</span>
 <span id="L130" class="LineNr">130 </span>  first-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L131" class="LineNr">131 </span>  assert first-sandbox, <span class="Constant">[!!]</span>
@@ -194,7 +194,7 @@ if ('onhashchange' in window) {
 <span id="L133" class="LineNr">133 </span>  sandbox-right-margin:num <span class="Special">&lt;-</span> get *first-sandbox, <span class="Constant">right:offset</span>
 <span id="L134" class="LineNr">134 </span>  edit-button-left:num, edit-button-right:num, _ <span class="Special">&lt;-</span> <a href='005-sandbox.mu.html#L376'>sandbox-menu-columns</a> sandbox-left-margin, sandbox-right-margin
 <span id="L135" class="LineNr">135 </span>  edit-button-vertical-area?:bool <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L211'>within-range?</a> click-column, edit-button-left, edit-button-right
-<span id="L136" class="LineNr">136 </span>  <span class="muControl">return-unless</span> edit-button-vertical-area?, <span class="Constant">0/false</span>
+<span id="L136" class="LineNr">136 </span>  <span class="muControl">return-unless</span> edit-button-vertical-area?,<span class="Constant"> false</span>
 <span id="L137" class="LineNr">137 </span>  <span class="Comment"># finally, is sandbox editor empty?</span>
 <span id="L138" class="LineNr">138 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
 <span id="L139" class="LineNr">139 </span>  result <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L203'>empty-editor?</a> current-sandbox
@@ -205,8 +205,8 @@ if ('onhashchange' in window) {
 <span id="L144" class="LineNr">144 </span>  <span class="Constant">load-inputs</span>
 <span id="L145" class="LineNr">145 </span>  <span class="Comment"># identify the sandbox to edit, if the click was actually on the 'edit' button</span>
 <span id="L146" class="LineNr">146 </span>  sandbox:&amp;:sandbox <span class="Special">&lt;-</span> <a href='006-sandbox-copy.mu.html#L175'>find-sandbox</a> env, click-row
-<span id="L147" class="LineNr">147 </span>  <span class="muControl">return-unless</span> sandbox, <span class="Constant">0/false</span>
-<span id="L148" class="LineNr">148 </span>  clicked-on-edit-button? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L147" class="LineNr">147 </span>  <span class="muControl">return-unless</span> sandbox,<span class="Constant"> false</span>
+<span id="L148" class="LineNr">148 </span>  clicked-on-edit-button? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L149" class="LineNr">149 </span>  <span class="Comment"># 'edit' button = 'copy' button + 'delete' button</span>
 <span id="L150" class="LineNr">150 </span>  text:text <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">data:offset</span>
 <span id="L151" class="LineNr">151 </span>  current-sandbox:&amp;:editor <span class="Special">&lt;-</span> get *env, <span class="Constant">current-sandbox:offset</span>
@@ -215,7 +215,7 @@ if ('onhashchange' in window) {
 <span id="L154" class="LineNr">154 </span>  <span class="Comment"># reset scroll</span>
 <span id="L155" class="LineNr">155 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">render-from:offset</span>,<span class="Constant"> -1</span>
 <span id="L156" class="LineNr">156 </span>  <span class="Comment"># position cursor in sandbox editor</span>
-<span id="L157" class="LineNr">157 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>, <span class="Constant">1/true</span>
+<span id="L157" class="LineNr">157 </span>  *env <span class="Special">&lt;-</span> put *env, <span class="Constant">sandbox-in-focus?:offset</span>,<span class="Constant"> true</span>
 <span id="L158" class="LineNr">158 </span>]
 <span id="L159" class="LineNr">159 </span>
 <span id="L160" class="LineNr">160 </span><span class="muScenario">scenario</span> sandbox-with-print-can-be-edited [
@@ -227,7 +227,7 @@ if ('onhashchange' in window) {
 <span id="L166" class="LineNr">166 </span>  ]
 <span id="L167" class="LineNr">167 </span>  <span class="Comment"># right editor contains a print instruction</span>
 <span id="L168" class="LineNr">168 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[print <a href='../081print.mu.html#L16'>screen</a>, 4]</span>
-<span id="L169" class="LineNr">169 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L169" class="LineNr">169 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L170" class="LineNr">170 </span>  <span class="Comment"># run the sandbox</span>
 <span id="L171" class="LineNr">171 </span>  assume-console [
 <span id="L172" class="LineNr">172 </span>    press F4
@@ -272,7 +272,7 @@ if ('onhashchange' in window) {
 <span id="L211" class="LineNr">211 </span>  assume-resources [
 <span id="L212" class="LineNr">212 </span>  ]
 <span id="L213" class="LineNr">213 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L214" class="LineNr">214 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L214" class="LineNr">214 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L215" class="LineNr">215 </span>  <span class="Comment"># create 2 sandboxes and scroll to second</span>
 <span id="L216" class="LineNr">216 </span>  assume-console [
 <span id="L217" class="LineNr">217 </span>    press ctrl-n
@@ -280,8 +280,8 @@ if ('onhashchange' in window) {
 <span id="L219" class="LineNr">219 </span>    press F4
 <span id="L220" class="LineNr">220 </span>    type <span class="Constant">[add 1, 1]</span>
 <span id="L221" class="LineNr">221 </span>    press F4
-<span id="L222" class="LineNr">222 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L223" class="LineNr">223 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L222" class="LineNr">222 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L223" class="LineNr">223 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L224" class="LineNr">224 </span>  ]
 <span id="L225" class="LineNr">225 </span>  <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
 <span id="L226" class="LineNr">226 </span>  screen-should-contain [
@@ -321,7 +321,7 @@ if ('onhashchange' in window) {
 <span id="L260" class="LineNr">260 </span>  assume-resources [
 <span id="L261" class="LineNr">261 </span>  ]
 <span id="L262" class="LineNr">262 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L263" class="LineNr">263 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L263" class="LineNr">263 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L264" class="LineNr">264 </span>  <span class="Comment"># create 2 sandboxes</span>
 <span id="L265" class="LineNr">265 </span>  assume-console [
 <span id="L266" class="LineNr">266 </span>    press ctrl-n
@@ -366,9 +366,9 @@ if ('onhashchange' in window) {
 <span id="L305" class="LineNr">305 </span>  ]
 <span id="L306" class="LineNr">306 </span>  <span class="Comment"># now try to scroll past end</span>
 <span id="L307" class="LineNr">307 </span>  assume-console [
-<span id="L308" class="LineNr">308 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L309" class="LineNr">309 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L310" class="LineNr">310 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L308" class="LineNr">308 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L309" class="LineNr">309 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L310" class="LineNr">310 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L311" class="LineNr">311 </span>  ]
 <span id="L312" class="LineNr">312 </span>  run [
 <span id="L313" class="LineNr">313 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
diff --git a/html/edit/009-sandbox-test.mu.html b/html/edit/009-sandbox-test.mu.html
index 88dca874..5b70530e 100644
--- a/html/edit/009-sandbox-test.mu.html
+++ b/html/edit/009-sandbox-test.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr"> 13 </span>    ]
 <span id="L14" class="LineNr"> 14 </span>  ]
 <span id="L15" class="LineNr"> 15 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L16" class="LineNr"> 16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L16" class="LineNr"> 16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L17" class="LineNr"> 17 </span>  <span class="Comment"># run it</span>
 <span id="L18" class="LineNr"> 18 </span>  assume-console [
 <span id="L19" class="LineNr"> 19 </span>    press F4
@@ -233,9 +233,9 @@ if ('onhashchange' in window) {
 <span id="L171" class="LineNr">171 </span>  <span class="Delimiter">}</span>
 <span id="L172" class="LineNr">172 </span>  <span class="Comment"># return sandbox if click is in its output region</span>
 <span id="L173" class="LineNr">173 </span>  response-starting-row:num <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">response-starting-row-on-screen:offset</span>
-<span id="L174" class="LineNr">174 </span>  <span class="muControl">return-unless</span> response-starting-row, <span class="Constant">0/no-click-in-sandbox-output</span>, <span class="Constant">0/sandbox-index</span>
+<span id="L174" class="LineNr">174 </span>  <span class="muControl">return-unless</span> response-starting-row,<span class="Constant"> null/no-click-in-sandbox-output,</span> <span class="Constant">0/sandbox-index</span>
 <span id="L175" class="LineNr">175 </span>  click-in-response?:bool <span class="Special">&lt;-</span> greater-or-equal click-row, response-starting-row
-<span id="L176" class="LineNr">176 </span>  <span class="muControl">return-unless</span> click-in-response?, <span class="Constant">0/no-click-in-sandbox-output</span>, <span class="Constant">0/sandbox-index</span>
+<span id="L176" class="LineNr">176 </span>  <span class="muControl">return-unless</span> click-in-response?,<span class="Constant"> null/no-click-in-sandbox-output,</span> <span class="Constant">0/sandbox-index</span>
 <span id="L177" class="LineNr">177 </span> <span class="muControl"> return</span> sandbox, sandbox-index
 <span id="L178" class="LineNr">178 </span>]
 <span id="L179" class="LineNr">179 </span>
@@ -246,7 +246,7 @@ if ('onhashchange' in window) {
 <span id="L184" class="LineNr">184 </span>  <span class="Delimiter">{</span>
 <span id="L185" class="LineNr">185 </span>    <span class="Comment"># if expected-response is set, reset</span>
 <span id="L186" class="LineNr">186 </span>    <span class="muControl">break-unless</span> expected-response
-<span id="L187" class="LineNr">187 </span>    *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">expected-response:offset</span>,<span class="Constant"> 0</span>
+<span id="L187" class="LineNr">187 </span>    *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">expected-response:offset</span>,<span class="Constant"> null</span>
 <span id="L188" class="LineNr">188 </span>  <span class="Delimiter">}</span>
 <span id="L189" class="LineNr">189 </span>  <span class="Delimiter">{</span>
 <span id="L190" class="LineNr">190 </span>    <span class="Comment"># if not, set expected response to the current response</span>
diff --git a/html/edit/010-sandbox-trace.mu.html b/html/edit/010-sandbox-trace.mu.html
index d0834aa1..5d4404c1 100644
--- a/html/edit/010-sandbox-trace.mu.html
+++ b/html/edit/010-sandbox-trace.mu.html
@@ -16,16 +16,16 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .muControl { color: #c0a020; }
-.muScenario { color: #00af00; }
+.muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
+.muData { color: #ffff00; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muRecipe { color: #ff8700; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -75,7 +75,7 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr"> 13 </span>    ]
 <span id="L14" class="LineNr"> 14 </span>  ]
 <span id="L15" class="LineNr"> 15 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L16" class="LineNr"> 16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L16" class="LineNr"> 16 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L17" class="LineNr"> 17 </span>  <span class="Comment"># run it</span>
 <span id="L18" class="LineNr"> 18 </span>  assume-console [
 <span id="L19" class="LineNr"> 19 </span>    press F4
@@ -150,7 +150,7 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>    ]
 <span id="L89" class="LineNr"> 89 </span>  ]
 <span id="L90" class="LineNr"> 90 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L91" class="LineNr"> 91 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L91" class="LineNr"> 91 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L92" class="LineNr"> 92 </span>  <span class="Comment"># run it</span>
 <span id="L93" class="LineNr"> 93 </span>  assume-console [
 <span id="L94" class="LineNr"> 94 </span>    press F4
@@ -195,7 +195,7 @@ if ('onhashchange' in window) {
 <span id="L133" class="LineNr">133 </span>  assume-resources [
 <span id="L134" class="LineNr">134 </span>  ]
 <span id="L135" class="LineNr">135 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[stash 123456789]</span>
-<span id="L136" class="LineNr">136 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L136" class="LineNr">136 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L137" class="LineNr">137 </span>  <span class="Comment"># create and expand the trace</span>
 <span id="L138" class="LineNr">138 </span>  assume-console [
 <span id="L139" class="LineNr">139 </span>    press F4
@@ -265,7 +265,7 @@ if ('onhashchange' in window) {
 <span id="L203" class="LineNr">203 </span>    x:bool <span class="Special">&lt;-</span> get *sandbox, <span class="Constant">display-trace?:offset</span>
 <span id="L204" class="LineNr">204 </span>    x <span class="Special">&lt;-</span> not x
 <span id="L205" class="LineNr">205 </span>    *sandbox <span class="Special">&lt;-</span> put *sandbox, <span class="Constant">display-trace?:offset</span>, x
-<span id="L206" class="LineNr">206 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L206" class="LineNr">206 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> render-sandbox-side <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L207" class="LineNr">207 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L468'>update-cursor</a> <a href='../081print.mu.html#L16'>screen</a>, recipes, current-sandbox, sandbox-in-focus?, env
 <span id="L208" class="LineNr">208 </span>   <span class="muControl"> loop</span> <span class="Constant">+next-event</span>
 <span id="L209" class="LineNr">209 </span>  <span class="Delimiter">}</span>
@@ -297,7 +297,7 @@ if ('onhashchange' in window) {
 <span id="L235" class="LineNr">235 </span>  click-on-sandbox-code?:bool <span class="Special">&lt;-</span> and click-above-response?, click-below-menu?
 <span id="L236" class="LineNr">236 </span>  <span class="Delimiter">{</span>
 <span id="L237" class="LineNr">237 </span>    <span class="muControl">break-if</span> click-on-sandbox-code?
-<span id="L238" class="LineNr">238 </span>   <span class="muControl"> return</span> <span class="Constant">0/no-click-in-sandbox-output</span>
+<span id="L238" class="LineNr">238 </span>   <span class="muControl"> return</span><span class="Constant"> null/no-click-in-sandbox-output</span>
 <span id="L239" class="LineNr">239 </span>  <span class="Delimiter">}</span>
 <span id="L240" class="LineNr">240 </span> <span class="muControl"> return</span> sandbox
 <span id="L241" class="LineNr">241 </span>]
diff --git a/html/edit/011-errors.mu.html b/html/edit/011-errors.mu.html
index 2a5511ac..96677150 100644
--- a/html/edit/011-errors.mu.html
+++ b/html/edit/011-errors.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -79,10 +79,10 @@ if ('onhashchange' in window) {
 <span id="L17" class="LineNr"> 17 </span>  <span class="Delimiter">{</span>
 <span id="L18" class="LineNr"> 18 </span>    <span class="muControl">break-unless</span> recipe-errors
 <span id="L19" class="LineNr"> 19 </span>    <a href='005-sandbox.mu.html#L217'>update-status</a> <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[errors found     ]</span>, <span class="Constant">1/red</span>
-<span id="L20" class="LineNr"> 20 </span>    errors-found? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L20" class="LineNr"> 20 </span>    errors-found? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L21" class="LineNr"> 21 </span>   <span class="muControl"> return</span>
 <span id="L22" class="LineNr"> 22 </span>  <span class="Delimiter">}</span>
-<span id="L23" class="LineNr"> 23 </span>  errors-found? <span class="Special">&lt;-</span> copy <span class="Constant">0/false</span>
+<span id="L23" class="LineNr"> 23 </span>  errors-found? <span class="Special">&lt;-</span> copy<span class="Constant"> false</span>
 <span id="L24" class="LineNr"> 24 </span>]
 <span id="L25" class="LineNr"> 25 </span>
 <span id="L26" class="LineNr"> 26 </span><span class="muRecipe">after</span> <span class="Constant"><a href='005-sandbox.mu.html#L132'>&lt;begin-run-sandboxes-on-F4&gt;</a></span> [
@@ -92,7 +92,7 @@ if ('onhashchange' in window) {
 <span id="L30" class="LineNr"> 30 </span>  <span class="Comment"># if there were recipe errors before, check if we can clear them</span>
 <span id="L31" class="LineNr"> 31 </span>  <span class="Delimiter">{</span>
 <span id="L32" class="LineNr"> 32 </span>    <span class="muControl">break-unless</span> old-recipe-errors
-<span id="L33" class="LineNr"> 33 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L33" class="LineNr"> 33 </span>    <a href='../081print.mu.html#L16'>screen</a> <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L431'>render-recipes</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L34" class="LineNr"> 34 </span>  <span class="Delimiter">}</span>
 <span id="L35" class="LineNr"> 35 </span>  <a href='011-errors.mu.html#L42'>render-recipe-errors</a> env, <a href='../081print.mu.html#L16'>screen</a>
 <span id="L36" class="LineNr"> 36 </span>]
@@ -115,7 +115,7 @@ if ('onhashchange' in window) {
 <span id="L53" class="LineNr"> 53 </span>  <span class="Comment"># draw dotted line after recipes</span>
 <span id="L54" class="LineNr"> 54 </span>  <a href='002-typing.mu.html#L1114'>draw-horizontal</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, right, <span class="Constant">9480/horizontal-dotted</span>
 <span id="L55" class="LineNr"> 55 </span>  row <span class="Special">&lt;-</span> add row,<span class="Constant"> 1</span>
-<span id="L56" class="LineNr"> 56 </span>  <a href='001-editor.mu.html#L209'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
+<span id="L56" class="LineNr"> 56 </span>  <a href='001-editor.mu.html#L211'>clear-screen-from</a> <a href='../081print.mu.html#L16'>screen</a>, row, left, left, right
 <span id="L57" class="LineNr"> 57 </span>]
 <span id="L58" class="LineNr"> 58 </span>
 <span id="L59" class="LineNr"> 59 </span><span class="muData">container</span> environment [
@@ -135,7 +135,7 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span>    error-index:num <span class="Special">&lt;-</span> get *env, <span class="Constant">error-index:offset</span>
 <span id="L74" class="LineNr"> 74 </span>    sandboxes-completed-successfully?:bool <span class="Special">&lt;-</span> equal error-index,<span class="Constant"> -1</span>
 <span id="L75" class="LineNr"> 75 </span>    <span class="muControl">break-if</span> sandboxes-completed-successfully?
-<span id="L76" class="LineNr"> 76 </span>    errors-found? <span class="Special">&lt;-</span> copy <span class="Constant">1/true</span>
+<span id="L76" class="LineNr"> 76 </span>    errors-found? <span class="Special">&lt;-</span> copy<span class="Constant"> true</span>
 <span id="L77" class="LineNr"> 77 </span>  <span class="Delimiter">}</span>
 <span id="L78" class="LineNr"> 78 </span>]
 <span id="L79" class="LineNr"> 79 </span>
@@ -206,7 +206,7 @@ if ('onhashchange' in window) {
 <span id="L144" class="LineNr">144 </span>    ]
 <span id="L145" class="LineNr">145 </span>  ]
 <span id="L146" class="LineNr">146 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L147" class="LineNr">147 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L147" class="LineNr">147 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L148" class="LineNr">148 </span>  screen-should-contain [
 <span id="L149" class="LineNr">149 </span>   <span class="Constant"> .                                                                                 run (F4)           .</span>
 <span id="L150" class="LineNr">150 </span>   <span class="Constant"> .recipe foo [                                      ╎foo                                              .</span>
@@ -254,7 +254,7 @@ if ('onhashchange' in window) {
 <span id="L192" class="LineNr">192 </span>  assume-resources [
 <span id="L193" class="LineNr">193 </span>  ]
 <span id="L194" class="LineNr">194 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>
-<span id="L195" class="LineNr">195 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L195" class="LineNr">195 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L196" class="LineNr">196 </span>  assume-console [
 <span id="L197" class="LineNr">197 </span>    type <span class="Constant">[recipe foo x [</span>
 <span id="L198" class="LineNr">198 </span><span class="Constant">]</span>]
@@ -280,7 +280,7 @@ if ('onhashchange' in window) {
 <span id="L218" class="LineNr">218 </span>  assume-resources [
 <span id="L219" class="LineNr">219 </span>  ]
 <span id="L220" class="LineNr">220 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L221" class="LineNr">221 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L221" class="LineNr">221 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L222" class="LineNr">222 </span>  assume-console [
 <span id="L223" class="LineNr">223 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 80</span>
 <span id="L224" class="LineNr">224 </span>    <span class="Comment"># create invalid sandbox 1</span>
@@ -306,7 +306,7 @@ if ('onhashchange' in window) {
 <span id="L244" class="LineNr">244 </span>  assume-resources [
 <span id="L245" class="LineNr">245 </span>  ]
 <span id="L246" class="LineNr">246 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[]</span>
-<span id="L247" class="LineNr">247 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L247" class="LineNr">247 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L248" class="LineNr">248 </span>  assume-console [
 <span id="L249" class="LineNr">249 </span>    left-click<span class="Constant"> 3</span>,<span class="Constant"> 80</span>
 <span id="L250" class="LineNr">250 </span>    <span class="Comment"># create invalid sandbox 2</span>
@@ -335,7 +335,7 @@ if ('onhashchange' in window) {
 <span id="L273" class="LineNr">273 </span>  assume-resources [
 <span id="L274" class="LineNr">274 </span>  ]
 <span id="L275" class="LineNr">275 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[get foo, x:offset]</span>  <span class="Comment"># invalid</span>
-<span id="L276" class="LineNr">276 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L276" class="LineNr">276 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L277" class="LineNr">277 </span>  assume-console [
 <span id="L278" class="LineNr">278 </span>    press F4  <span class="Comment"># generate error</span>
 <span id="L279" class="LineNr">279 </span>  ]
@@ -372,13 +372,13 @@ if ('onhashchange' in window) {
 <span id="L310" class="LineNr">310 </span>      <span class="Constant">|recipe</span> foo x:_elem<span class="muRecipe"> -&gt; </span>z:_elem <span class="Constant">[|</span>
 <span id="L311" class="LineNr">311 </span><span class="Constant">      |  local-scope|</span>
 <span id="L312" class="LineNr">312 </span><span class="Constant">      |  load-ingredients|</span>
-<span id="L313" class="LineNr">313 </span><span class="Constant">      |  y:&amp;:num &lt;- copy 0|</span>
+<span id="L313" class="LineNr">313 </span><span class="Constant">      |  y:&amp;:num &lt;- copy null|</span>
 <span id="L314" class="LineNr">314 </span><span class="Constant">      |  z &lt;- add x, y|</span>
 <span id="L315" class="LineNr">315 </span><span class="Constant">      |]</span>|
 <span id="L316" class="LineNr">316 </span>    ]
 <span id="L317" class="LineNr">317 </span>  ]
 <span id="L318" class="LineNr">318 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo 2]</span>
-<span id="L319" class="LineNr">319 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L319" class="LineNr">319 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L320" class="LineNr">320 </span>  assume-console [
 <span id="L321" class="LineNr">321 </span>    press F4
 <span id="L322" class="LineNr">322 </span>  ]
@@ -388,7 +388,7 @@ if ('onhashchange' in window) {
 <span id="L326" class="LineNr">326 </span>   <span class="Constant"> .recipe foo x:_elem -&gt; z:_elem [                   ╎                                                 .</span>
 <span id="L327" class="LineNr">327 </span>   <span class="Constant"> .  local-scope                                     ╎─────────────────────────────────────────────────.</span>
 <span id="L328" class="LineNr">328 </span>   <span class="Constant"> .  load-ingredients                                ╎0   edit       copy       to recipe    delete    .</span>
-<span id="L329" class="LineNr">329 </span>   <span class="Constant"> .  y:&amp;:num &lt;- copy 0                               ╎foo 2                                            .</span>
+<span id="L329" class="LineNr">329 </span>   <span class="Constant"> .  y:&amp;:num &lt;- copy null                            ╎foo 2                                            .</span>
 <span id="L330" class="LineNr">330 </span>   <span class="Constant"> .  z &lt;- add x, y                                   ╎foo_2: 'add' requires number ingredients, but go↩.</span>
 <span id="L331" class="LineNr">331 </span>   <span class="Constant"> .]                                                 ╎t 'y'                                            .</span>
 <span id="L332" class="LineNr">332 </span>   <span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
@@ -408,7 +408,7 @@ if ('onhashchange' in window) {
 <span id="L346" class="LineNr">346 </span>   <span class="Constant"> .recipe foo x:_elem -&gt; z:_elem [                   ╎                                                 .</span>
 <span id="L347" class="LineNr">347 </span>   <span class="Constant"> .  local-scope                                     ╎─────────────────────────────────────────────────.</span>
 <span id="L348" class="LineNr">348 </span>   <span class="Constant"> .  load-ingredients                                ╎0   edit       copy       to recipe    delete    .</span>
-<span id="L349" class="LineNr">349 </span>   <span class="Constant"> .  y:&amp;:num &lt;- copy 0                               ╎foo 2                                            .</span>
+<span id="L349" class="LineNr">349 </span>   <span class="Constant"> .  y:&amp;:num &lt;- copy null                            ╎foo 2                                            .</span>
 <span id="L350" class="LineNr">350 </span>   <span class="Constant"> .  z &lt;- add x, y                                   ╎foo_3: 'add' requires number ingredients, but go↩.</span>
 <span id="L351" class="LineNr">351 </span>   <span class="Constant"> .]                                                 ╎t 'y'                                            .</span>
 <span id="L352" class="LineNr">352 </span>   <span class="Constant"> .                                                  ╎─────────────────────────────────────────────────.</span>
@@ -429,10 +429,10 @@ if ('onhashchange' in window) {
 <span id="L367" class="LineNr">367 </span>    ]
 <span id="L368" class="LineNr">368 </span>  ]
 <span id="L369" class="LineNr">369 </span>  <span class="Comment"># call code that uses other variants of it, but not it itself</span>
-<span id="L370" class="LineNr">370 </span>  test-sandbox:text <span class="Special">&lt;-</span> new <span class="Constant">[x:&amp;:<a href='../064list.mu.html#L6'>list</a>:num &lt;- copy 0</span>
+<span id="L370" class="LineNr">370 </span>  test-sandbox:text <span class="Special">&lt;-</span> new <span class="Constant">[x:&amp;:<a href='../064list.mu.html#L6'>list</a>:num &lt;- copy null</span>
 <span id="L371" class="LineNr">371 </span><span class="Constant">to-text x]</span>
 <span id="L372" class="LineNr">372 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, test-sandbox
-<span id="L373" class="LineNr">373 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L373" class="LineNr">373 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L374" class="LineNr">374 </span>  <span class="Comment"># run it once</span>
 <span id="L375" class="LineNr">375 </span>  assume-console [
 <span id="L376" class="LineNr">376 </span>    press F4
@@ -495,7 +495,7 @@ if ('onhashchange' in window) {
 <span id="L433" class="LineNr">433 </span>    ]
 <span id="L434" class="LineNr">434 </span>  ]
 <span id="L435" class="LineNr">435 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L436" class="LineNr">436 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L436" class="LineNr">436 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L437" class="LineNr">437 </span>  assume-console [
 <span id="L438" class="LineNr">438 </span>    press F4
 <span id="L439" class="LineNr">439 </span>  ]
@@ -509,7 +509,7 @@ if ('onhashchange' in window) {
 <span id="L447" class="LineNr">447 </span>   <span class="Constant"> .]                                                 ╎                                                 .</span>
 <span id="L448" class="LineNr">448 </span>   <span class="Constant"> .                                                  ╎                                                 .</span>
 <span id="L449" class="LineNr">449 </span>   <span class="Constant"> .foo: missing type for 'x' in 'x &lt;- copy 0'        ╎                                                 .</span>
-<span id="L450" class="LineNr">450 </span>   <span class="Constant"> .foo: can't copy '0' to 'x'; types don't <a href='../065duplex_list.mu.html#L585'>match</a>     ╎                                                 .</span>
+<span id="L450" class="LineNr">450 </span>   <span class="Constant"> .foo: can't copy '0' to 'x'; types don't <a href='../065duplex_list.mu.html#L642'>match</a>     ╎                                                 .</span>
 <span id="L451" class="LineNr">451 </span>   <span class="Constant"> .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎                                                 .</span>
 <span id="L452" class="LineNr">452 </span>   <span class="Constant"> .                                                  ╎                                                 .</span>
 <span id="L453" class="LineNr">453 </span>  ]
@@ -527,7 +527,7 @@ if ('onhashchange' in window) {
 <span id="L465" class="LineNr">465 </span><span class="Constant">    ]</span>
 <span id="L466" class="LineNr">466 </span>  ]
 <span id="L467" class="LineNr">467 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L468" class="LineNr">468 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L468" class="LineNr">468 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L469" class="LineNr">469 </span>  assume-console [
 <span id="L470" class="LineNr">470 </span>    press F4
 <span id="L471" class="LineNr">471 </span>  ]
@@ -559,7 +559,7 @@ if ('onhashchange' in window) {
 <span id="L497" class="LineNr">497 </span>    ]
 <span id="L498" class="LineNr">498 </span>  ]
 <span id="L499" class="LineNr">499 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L500" class="LineNr">500 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L500" class="LineNr">500 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L501" class="LineNr">501 </span>  assume-console [
 <span id="L502" class="LineNr">502 </span>    press F4
 <span id="L503" class="LineNr">503 </span>  ]
@@ -596,7 +596,7 @@ if ('onhashchange' in window) {
 <span id="L534" class="LineNr">534 </span>    ]
 <span id="L535" class="LineNr">535 </span>  ]
 <span id="L536" class="LineNr">536 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L537" class="LineNr">537 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L537" class="LineNr">537 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L538" class="LineNr">538 </span>  assume-console [
 <span id="L539" class="LineNr">539 </span>    press F4
 <span id="L540" class="LineNr">540 </span>  ]
@@ -633,7 +633,7 @@ if ('onhashchange' in window) {
 <span id="L571" class="LineNr">571 </span>    ]
 <span id="L572" class="LineNr">572 </span>  ]
 <span id="L573" class="LineNr">573 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L574" class="LineNr">574 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L574" class="LineNr">574 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L575" class="LineNr">575 </span>  assume-console [
 <span id="L576" class="LineNr">576 </span>    press F4
 <span id="L577" class="LineNr">577 </span>  ]
@@ -685,7 +685,7 @@ if ('onhashchange' in window) {
 <span id="L623" class="LineNr">623 </span>    ]
 <span id="L624" class="LineNr">624 </span>  ]
 <span id="L625" class="LineNr">625 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L626" class="LineNr">626 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L626" class="LineNr">626 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L627" class="LineNr">627 </span>  assume-console [
 <span id="L628" class="LineNr">628 </span>    press F4
 <span id="L629" class="LineNr">629 </span>  ]
@@ -738,11 +738,11 @@ if ('onhashchange' in window) {
 <span id="L676" class="LineNr">676 </span>    ]
 <span id="L677" class="LineNr">677 </span>  ]
 <span id="L678" class="LineNr">678 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L679" class="LineNr">679 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L679" class="LineNr">679 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L680" class="LineNr">680 </span>  <span class="Comment"># hit F4, generating errors, then scroll down</span>
 <span id="L681" class="LineNr">681 </span>  assume-console [
 <span id="L682" class="LineNr">682 </span>    press F4
-<span id="L683" class="LineNr">683 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L683" class="LineNr">683 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L684" class="LineNr">684 </span>  ]
 <span id="L685" class="LineNr">685 </span>  run [
 <span id="L686" class="LineNr">686 </span>    <a href='004-programming-environment.mu.html#L39'>event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, env, <a href='../088file.mu.html#L11'>resources</a>
@@ -765,7 +765,7 @@ if ('onhashchange' in window) {
 <span id="L703" class="LineNr">703 </span>  ]
 <span id="L704" class="LineNr">704 </span>  <span class="Comment"># sandbox editor contains an illegal instruction</span>
 <span id="L705" class="LineNr">705 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[get 1234:num, foo:offset]</span>
-<span id="L706" class="LineNr">706 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L706" class="LineNr">706 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L707" class="LineNr">707 </span>  assume-console [
 <span id="L708" class="LineNr">708 </span>    press F4
 <span id="L709" class="LineNr">709 </span>  ]
@@ -828,7 +828,7 @@ if ('onhashchange' in window) {
 <span id="L766" class="LineNr">766 </span>  ]
 <span id="L767" class="LineNr">767 </span>  <span class="Comment"># sandbox editor contains an illegal instruction</span>
 <span id="L768" class="LineNr">768 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[get 1234:num, foo:offset]</span>
-<span id="L769" class="LineNr">769 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L769" class="LineNr">769 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L770" class="LineNr">770 </span>  <span class="Comment"># run the code in the editors multiple times</span>
 <span id="L771" class="LineNr">771 </span>  assume-console [
 <span id="L772" class="LineNr">772 </span>    press F4
@@ -867,7 +867,7 @@ if ('onhashchange' in window) {
 <span id="L805" class="LineNr">805 </span>    ]
 <span id="L806" class="LineNr">806 </span>  ]
 <span id="L807" class="LineNr">807 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo]</span>
-<span id="L808" class="LineNr">808 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L808" class="LineNr">808 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L809" class="LineNr">809 </span>  <span class="Comment"># run the sandbox</span>
 <span id="L810" class="LineNr">810 </span>  assume-console [
 <span id="L811" class="LineNr">811 </span>    press F4
@@ -906,7 +906,7 @@ if ('onhashchange' in window) {
 <span id="L844" class="LineNr">844 </span>    ]
 <span id="L845" class="LineNr">845 </span>  ]
 <span id="L846" class="LineNr">846 </span>  env:&amp;:environment <span class="Special">&lt;-</span> <a href='004-programming-environment.mu.html#L21'>new-programming-environment</a> <a href='../088file.mu.html#L11'>resources</a>, <a href='../081print.mu.html#L16'>screen</a>, <span class="Constant">[foo 4, 0]</span>
-<span id="L847" class="LineNr">847 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L107'>render</a>
+<span id="L847" class="LineNr">847 </span>  <a href='004-programming-environment.mu.html#L402'>render-all</a> <a href='../081print.mu.html#L16'>screen</a>, env, <a href='001-editor.mu.html#L109'>render</a>
 <span id="L848" class="LineNr">848 </span>  <span class="Comment"># run</span>
 <span id="L849" class="LineNr">849 </span>  assume-console [
 <span id="L850" class="LineNr">850 </span>    press F4
diff --git a/html/edit/012-editor-undo.mu.html b/html/edit/012-editor-undo.mu.html
index ca822068..705a47e4 100644
--- a/html/edit/012-editor-undo.mu.html
+++ b/html/edit/012-editor-undo.mu.html
@@ -15,17 +15,17 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -138,7 +138,7 @@ if ('onhashchange' in window) {
 <span id="L76" class="LineNr">  76 </span>    redo <span class="Special">&lt;-</span> push op, redo
 <span id="L77" class="LineNr">  77 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">redo:offset</span>, redo
 <span id="L78" class="LineNr">  78 </span><span class="Constant">    <a href='012-editor-undo.mu.html#L78'>&lt;handle-undo&gt;</a></span>
-<span id="L79" class="LineNr">  79 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L79" class="LineNr">  79 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L80" class="LineNr">  80 </span>  <span class="Delimiter">}</span>
 <span id="L81" class="LineNr">  81 </span>]
 <span id="L82" class="LineNr">  82 </span>
@@ -156,7 +156,7 @@ if ('onhashchange' in window) {
 <span id="L94" class="LineNr">  94 </span>    undo <span class="Special">&lt;-</span> push op, undo
 <span id="L95" class="LineNr">  95 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">undo:offset</span>, undo
 <span id="L96" class="LineNr">  96 </span><span class="Constant">    <a href='012-editor-undo.mu.html#L96'>&lt;handle-redo&gt;</a></span>
-<span id="L97" class="LineNr">  97 </span>   <span class="muControl"> return</span> <span class="Constant">1/go-render</span>
+<span id="L97" class="LineNr">  97 </span>   <span class="muControl"> return</span><span class="Constant"> true/go-render</span>
 <span id="L98" class="LineNr">  98 </span>  <span class="Delimiter">}</span>
 <span id="L99" class="LineNr">  99 </span>]
 <span id="L100" class="LineNr"> 100 </span>
@@ -220,7 +220,7 @@ if ('onhashchange' in window) {
 <span id="L158" class="LineNr"> 158 </span>    previous-coalesce-tag:num <span class="Special">&lt;-</span> get typing, <span class="Constant">tag:offset</span>
 <span id="L159" class="LineNr"> 159 </span>    <span class="muControl">break-unless</span> previous-coalesce-tag
 <span id="L160" class="LineNr"> 160 </span>    before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L161" class="LineNr"> 161 </span>    insert-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L161" class="LineNr"> 161 </span>    insert-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L162" class="LineNr"> 162 </span>    typing <span class="Special">&lt;-</span> put typing, <span class="Constant">insert-until:offset</span>, insert-until
 <span id="L163" class="LineNr"> 163 </span>    typing <span class="Special">&lt;-</span> put typing, <span class="Constant">after-row:offset</span>, cursor-row
 <span id="L164" class="LineNr"> 164 </span>    typing <span class="Special">&lt;-</span> put typing, <span class="Constant">after-column:offset</span>, cursor-column
@@ -229,8 +229,8 @@ if ('onhashchange' in window) {
 <span id="L167" class="LineNr"> 167 </span>   <span class="muControl"> break</span> <span class="Constant">+done-adding-insert-operation</span>
 <span id="L168" class="LineNr"> 168 </span>  <span class="Delimiter">}</span>
 <span id="L169" class="LineNr"> 169 </span>  <span class="Comment"># if not, create a new operation</span>
-<span id="L170" class="LineNr"> 170 </span>  insert-from:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> cursor-before
-<span id="L171" class="LineNr"> 171 </span>  insert-to:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> insert-from
+<span id="L170" class="LineNr"> 170 </span>  insert-from:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> cursor-before
+<span id="L171" class="LineNr"> 171 </span>  insert-to:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> insert-from
 <span id="L172" class="LineNr"> 172 </span>  op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
 <span id="L173" class="LineNr"> 173 </span>  *op <span class="Special">&lt;-</span> merge <span class="Constant">0/insert-operation</span>, save-row/before, save-column/before, top-before, cursor-row/after, cursor-column/after, top-after, insert-from, insert-to, <span class="Constant">1/coalesce</span>
 <span id="L174" class="LineNr"> 174 </span>  editor <span class="Special">&lt;-</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor, op
@@ -249,9 +249,9 @@ if ('onhashchange' in window) {
 <span id="L187" class="LineNr"> 187 </span>  cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L188" class="LineNr"> 188 </span>  cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L189" class="LineNr"> 189 </span>  <span class="Comment"># never coalesce</span>
-<span id="L190" class="LineNr"> 190 </span>  insert-from:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> cursor-before
+<span id="L190" class="LineNr"> 190 </span>  insert-from:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> cursor-before
 <span id="L191" class="LineNr"> 191 </span>  before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L192" class="LineNr"> 192 </span>  insert-to:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L192" class="LineNr"> 192 </span>  insert-to:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L193" class="LineNr"> 193 </span>  op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
 <span id="L194" class="LineNr"> 194 </span>  *op <span class="Special">&lt;-</span> merge <span class="Constant">0/insert-operation</span>, cursor-row-before, cursor-column-before, top-before, cursor-row/after, cursor-column/after, top-after, insert-from, insert-to, <span class="Constant">0/never-coalesce</span>
 <span id="L195" class="LineNr"> 195 </span>  editor <span class="Special">&lt;-</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor, op
@@ -268,7 +268,7 @@ if ('onhashchange' in window) {
 <span id="L206" class="LineNr"> 206 </span>  undo <span class="Special">&lt;-</span> push op undo
 <span id="L207" class="LineNr"> 207 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">undo:offset</span>, undo
 <span id="L208" class="LineNr"> 208 </span>  redo:&amp;:<a href='../064list.mu.html#L6'>list</a>:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> get *editor, <span class="Constant">redo:offset</span>
-<span id="L209" class="LineNr"> 209 </span>  redo <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L209" class="LineNr"> 209 </span>  redo <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L210" class="LineNr"> 210 </span>  *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">redo:offset</span>, redo
 <span id="L211" class="LineNr"> 211 </span>]
 <span id="L212" class="LineNr"> 212 </span>
@@ -279,9 +279,9 @@ if ('onhashchange' in window) {
 <span id="L217" class="LineNr"> 217 </span>    start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get typing, <span class="Constant">insert-from:offset</span>
 <span id="L218" class="LineNr"> 218 </span>    end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get typing, <span class="Constant">insert-until:offset</span>
 <span id="L219" class="LineNr"> 219 </span>    <span class="Comment"># assert cursor-row/cursor-column/top-of-screen match after-row/after-column/after-top-of-screen</span>
-<span id="L220" class="LineNr"> 220 </span>    before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L32'>prev</a> start
+<span id="L220" class="LineNr"> 220 </span>    before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L38'>prev</a> start
 <span id="L221" class="LineNr"> 221 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">before-cursor:offset</span>, before-cursor
-<span id="L222" class="LineNr"> 222 </span>    <a href='../065duplex_list.mu.html#L385'>remove-between</a> before-cursor, end
+<span id="L222" class="LineNr"> 222 </span>    <a href='../065duplex_list.mu.html#L391'>remove-between</a> before-cursor, end
 <span id="L223" class="LineNr"> 223 </span>    cursor-row <span class="Special">&lt;-</span> get typing, <span class="Constant">before-row:offset</span>
 <span id="L224" class="LineNr"> 224 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
 <span id="L225" class="LineNr"> 225 </span>    cursor-column <span class="Special">&lt;-</span> get typing, <span class="Constant">before-column:offset</span>
@@ -479,7 +479,7 @@ if ('onhashchange' in window) {
 <span id="L417" class="LineNr"> 417 </span>    before-cursor <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
 <span id="L418" class="LineNr"> 418 </span>    insert-from:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get typing, <span class="Constant">insert-from:offset</span>  <span class="Comment"># ignore insert-to because it's already been spliced away</span>
 <span id="L419" class="LineNr"> 419 </span>    <span class="Comment"># assert insert-to matches next(before-cursor)</span>
-<span id="L420" class="LineNr"> 420 </span>    <a href='../065duplex_list.mu.html#L525'>splice</a> before-cursor, insert-from
+<span id="L420" class="LineNr"> 420 </span>    <a href='../065duplex_list.mu.html#L582'>splice</a> before-cursor, insert-from
 <span id="L421" class="LineNr"> 421 </span>    <span class="Comment"># assert cursor-row/cursor-column/top-of-screen match after-row/after-column/after-top-of-screen</span>
 <span id="L422" class="LineNr"> 422 </span>    cursor-row <span class="Special">&lt;-</span> get typing, <span class="Constant">after-row:offset</span>
 <span id="L423" class="LineNr"> 423 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
@@ -1080,7 +1080,7 @@ if ('onhashchange' in window) {
 <span id="L1018" class="LineNr">1018 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L1019" class="LineNr">1019 </span>  <span class="Comment"># scroll the page</span>
 <span id="L1020" class="LineNr">1020 </span>  assume-console [
-<span id="L1021" class="LineNr">1021 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1021" class="LineNr">1021 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1022" class="LineNr">1022 </span>  ]
 <span id="L1023" class="LineNr">1023 </span>  <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L1024" class="LineNr">1024 </span>  <span class="Comment"># undo</span>
@@ -1114,7 +1114,7 @@ if ('onhashchange' in window) {
 <span id="L1052" class="LineNr">1052 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L1053" class="LineNr">1053 </span>  <span class="Comment"># scroll the page down and up</span>
 <span id="L1054" class="LineNr">1054 </span>  assume-console [
-<span id="L1055" class="LineNr">1055 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
+<span id="L1055" class="LineNr">1055 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
 <span id="L1056" class="LineNr">1056 </span>    press ctrl-b
 <span id="L1057" class="LineNr">1057 </span>  ]
 <span id="L1058" class="LineNr">1058 </span>  <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
@@ -1149,8 +1149,8 @@ if ('onhashchange' in window) {
 <span id="L1087" class="LineNr">1087 </span>  <a href='002-typing.mu.html#L265'>editor-render</a> <a href='../081print.mu.html#L16'>screen</a>, e
 <span id="L1088" class="LineNr">1088 </span>  <span class="Comment"># scroll the page down and up</span>
 <span id="L1089" class="LineNr">1089 </span>  assume-console [
-<span id="L1090" class="LineNr">1090 </span>    press <a href='003-shortcuts.mu.html#L3597'>page-down</a>
-<span id="L1091" class="LineNr">1091 </span>    press <a href='003-shortcuts.mu.html#L3820'>page-up</a>
+<span id="L1090" class="LineNr">1090 </span>    press <a href='003-shortcuts.mu.html#L3610'>page-down</a>
+<span id="L1091" class="LineNr">1091 </span>    press <a href='003-shortcuts.mu.html#L3833'>page-up</a>
 <span id="L1092" class="LineNr">1092 </span>  ]
 <span id="L1093" class="LineNr">1093 </span>  <a href='002-typing.mu.html#L16'>editor-event-loop</a> <a href='../081print.mu.html#L16'>screen</a>, <a href='../084console.mu.html#L23'>console</a>, e
 <span id="L1094" class="LineNr">1094 </span>  <span class="Comment"># undo</span>
@@ -1700,7 +1700,7 @@ if ('onhashchange' in window) {
 <span id="L1638" class="LineNr">1638 </span>      <span class="muControl">break-unless</span> coalesce?
 <span id="L1639" class="LineNr">1639 </span>      deletion <span class="Special">&lt;-</span> put deletion, <span class="Constant">delete-from:offset</span>, before-cursor
 <span id="L1640" class="LineNr">1640 </span>      backspaced-so-far:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">deleted-text:offset</span>
-<span id="L1641" class="LineNr">1641 </span>      <a href='../065duplex_list.mu.html#L525'>splice</a> backspaced-cell, backspaced-so-far
+<span id="L1641" class="LineNr">1641 </span>      <a href='../065duplex_list.mu.html#L582'>splice</a> backspaced-cell, backspaced-so-far
 <span id="L1642" class="LineNr">1642 </span>      deletion <span class="Special">&lt;-</span> put deletion, <span class="Constant">deleted-text:offset</span>, backspaced-cell
 <span id="L1643" class="LineNr">1643 </span>      deletion <span class="Special">&lt;-</span> put deletion, <span class="Constant">after-row:offset</span>, cursor-row
 <span id="L1644" class="LineNr">1644 </span>      deletion <span class="Special">&lt;-</span> put deletion, <span class="Constant">after-column:offset</span>, cursor-column
@@ -1710,7 +1710,7 @@ if ('onhashchange' in window) {
 <span id="L1648" class="LineNr">1648 </span>    <span class="Delimiter">}</span>
 <span id="L1649" class="LineNr">1649 </span>    <span class="Comment"># if not, create a new operation</span>
 <span id="L1650" class="LineNr">1650 </span>    op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
-<span id="L1651" class="LineNr">1651 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1651" class="LineNr">1651 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1652" class="LineNr">1652 </span>    *op <span class="Special">&lt;-</span> merge <span class="Constant">2/delete-operation</span>, save-row/before, save-column/before, top-before, cursor-row/after, cursor-column/after, top-after, backspaced-cell/deleted, before-cursor/delete-from, deleted-until, <span class="Constant">1/coalesce-backspace</span>
 <span id="L1653" class="LineNr">1653 </span>    editor <span class="Special">&lt;-</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor, op
 <span id="L1654" class="LineNr">1654 </span><span class="Constant">    +done-adding-backspace-operation</span>
@@ -1724,8 +1724,8 @@ if ('onhashchange' in window) {
 <span id="L1662" class="LineNr">1662 </span>    anchor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">delete-from:offset</span>
 <span id="L1663" class="LineNr">1663 </span>    <span class="muControl">break-unless</span> anchor
 <span id="L1664" class="LineNr">1664 </span>    deleted:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">deleted-text:offset</span>
-<span id="L1665" class="LineNr">1665 </span>    old-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L572'>last</a> deleted
-<span id="L1666" class="LineNr">1666 </span>    <a href='../065duplex_list.mu.html#L525'>splice</a> anchor, deleted
+<span id="L1665" class="LineNr">1665 </span>    old-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L629'>last</a> deleted
+<span id="L1666" class="LineNr">1666 </span>    <a href='../065duplex_list.mu.html#L582'>splice</a> anchor, deleted
 <span id="L1667" class="LineNr">1667 </span>    <span class="Comment"># assert cursor-row/cursor-column/top-of-screen match after-row/after-column/after-top-of-screen</span>
 <span id="L1668" class="LineNr">1668 </span>    before-cursor <span class="Special">&lt;-</span> copy old-cursor
 <span id="L1669" class="LineNr">1669 </span>    cursor-row <span class="Special">&lt;-</span> get deletion, <span class="Constant">before-row:offset</span>
@@ -1744,7 +1744,7 @@ if ('onhashchange' in window) {
 <span id="L1682" class="LineNr">1682 </span>    start:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">delete-from:offset</span>
 <span id="L1683" class="LineNr">1683 </span>    end:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">delete-until:offset</span>
 <span id="L1684" class="LineNr">1684 </span>    data:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">data:offset</span>
-<span id="L1685" class="LineNr">1685 </span>    <a href='../065duplex_list.mu.html#L385'>remove-between</a> start, end
+<span id="L1685" class="LineNr">1685 </span>    <a href='../065duplex_list.mu.html#L391'>remove-between</a> start, end
 <span id="L1686" class="LineNr">1686 </span>    <span class="Comment"># assert cursor-row/cursor-column/top-of-screen match after-row/after-column/after-top-of-screen</span>
 <span id="L1687" class="LineNr">1687 </span>    cursor-row <span class="Special">&lt;-</span> get deletion, <span class="Constant">after-row:offset</span>
 <span id="L1688" class="LineNr">1688 </span>    *editor <span class="Special">&lt;-</span> put *editor, <span class="Constant">cursor-row:offset</span>, cursor-row
@@ -1924,7 +1924,7 @@ if ('onhashchange' in window) {
 <span id="L1862" class="LineNr">1862 </span>      previous-coalesce-tag:num <span class="Special">&lt;-</span> get deletion, <span class="Constant">tag:offset</span>
 <span id="L1863" class="LineNr">1863 </span>      coalesce?:bool <span class="Special">&lt;-</span> equal previous-coalesce-tag, <span class="Constant">2/coalesce-delete</span>
 <span id="L1864" class="LineNr">1864 </span>      <span class="muControl">break-unless</span> coalesce?
-<span id="L1865" class="LineNr">1865 </span>      delete-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1865" class="LineNr">1865 </span>      delete-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1866" class="LineNr">1866 </span>      deletion <span class="Special">&lt;-</span> put deletion, <span class="Constant">delete-until:offset</span>, delete-until
 <span id="L1867" class="LineNr">1867 </span>      deleted-so-far:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get deletion, <span class="Constant">deleted-text:offset</span>
 <span id="L1868" class="LineNr">1868 </span>      deleted-so-far <span class="Special">&lt;-</span> append deleted-so-far, deleted-cell
@@ -1937,7 +1937,7 @@ if ('onhashchange' in window) {
 <span id="L1875" class="LineNr">1875 </span>    <span class="Delimiter">}</span>
 <span id="L1876" class="LineNr">1876 </span>    <span class="Comment"># if not, create a new operation</span>
 <span id="L1877" class="LineNr">1877 </span>    op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
-<span id="L1878" class="LineNr">1878 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1878" class="LineNr">1878 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1879" class="LineNr">1879 </span>    *op <span class="Special">&lt;-</span> merge <span class="Constant">2/delete-operation</span>, save-row/before, save-column/before, top-before, cursor-row/after, cursor-column/after, top-after, deleted-cell/deleted, before-cursor/delete-from, deleted-until, <span class="Constant">2/coalesce-delete</span>
 <span id="L1880" class="LineNr">1880 </span>    editor <span class="Special">&lt;-</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor, op
 <span id="L1881" class="LineNr">1881 </span><span class="Constant">    +done-adding-delete-operation</span>
@@ -2039,7 +2039,7 @@ if ('onhashchange' in window) {
 <span id="L1977" class="LineNr">1977 </span>    top-after:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
 <span id="L1978" class="LineNr">1978 </span>    cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L1979" class="LineNr">1979 </span>    cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
-<span id="L1980" class="LineNr">1980 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L1980" class="LineNr">1980 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L1981" class="LineNr">1981 </span>    op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
 <span id="L1982" class="LineNr">1982 </span>    *op <span class="Special">&lt;-</span> merge <span class="Constant">2/delete-operation</span>, save-row/before, save-column/before, top-before, cursor-row/after, cursor-column/after, top-after, deleted-cells/deleted, before-cursor/delete-from, deleted-until, <span class="Constant">0/never-coalesce</span>
 <span id="L1983" class="LineNr">1983 </span>    editor <span class="Special">&lt;-</span> <a href='012-editor-undo.mu.html#L202'>add-operation</a> editor, op
@@ -2142,7 +2142,7 @@ if ('onhashchange' in window) {
 <span id="L2080" class="LineNr">2080 </span>    top-after:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">top-of-screen:offset</span>
 <span id="L2081" class="LineNr">2081 </span>    op:&amp;:<a href='012-editor-undo.mu.html#L5'>operation</a> <span class="Special">&lt;-</span> new <span class="Constant"><a href='012-editor-undo.mu.html#L5'>operation</a>:type</span>
 <span id="L2082" class="LineNr">2082 </span>    before-cursor:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> get *editor, <span class="Constant">before-cursor:offset</span>
-<span id="L2083" class="LineNr">2083 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L25'>next</a> before-cursor
+<span id="L2083" class="LineNr">2083 </span>    deleted-until:&amp;:<a href='../065duplex_list.mu.html#L3'>duplex-list</a>:char <span class="Special">&lt;-</span> <a href='../065duplex_list.mu.html#L31'>next</a> before-cursor
 <span id="L2084" class="LineNr">2084 </span>    cursor-row:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-row:offset</span>
 <span id="L2085" class="LineNr">2085 </span>    cursor-column:num <span class="Special">&lt;-</span> get *editor, <span class="Constant">cursor-column:offset</span>
 <span id="L2086" class="LineNr">2086 </span>    *op <span class="Special">&lt;-</span> merge <span class="Constant">2/delete-operation</span>, save-row/before, save-column/before, top-before, cursor-row/after, cursor-column/after, top-after, deleted-cells/deleted, before-cursor/delete-from, deleted-until, <span class="Constant">0/never-coalesce</span>
diff --git a/html/exception1.mu.html b/html/exception1.mu.html
index 2810d748..9ddc943f 100644
--- a/html/exception1.mu.html
+++ b/html/exception1.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -22,7 +23,6 @@ a:hover { text-decoration: underline; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
@@ -66,8 +66,8 @@ if ('onhashchange' in window) {
 <span id="L7" class="LineNr"> 7 </span>
 <span id="L8" class="LineNr"> 8 </span><span class="muRecipe">def</span> <a href='exception1.mu.html#L8'>main</a> [
 <span id="L9" class="LineNr"> 9 </span>  <span class="Constant">local-scope</span>
-<span id="L10" class="LineNr">10 </span>  <a href='exception1.mu.html#L15'>foo</a> <span class="Constant">0/no-exception</span>
-<span id="L11" class="LineNr">11 </span>  <a href='exception1.mu.html#L15'>foo</a> <span class="Constant">1/raise-exception</span>
+<span id="L10" class="LineNr">10 </span>  <a href='exception1.mu.html#L15'>foo</a><span class="Constant"> false/no-exception</span>
+<span id="L11" class="LineNr">11 </span>  <a href='exception1.mu.html#L15'>foo</a><span class="Constant"> true/raise-exception</span>
 <span id="L12" class="LineNr">12 </span>]
 <span id="L13" class="LineNr">13 </span>
 <span id="L14" class="LineNr">14 </span><span class="Comment"># example showing exception handling</span>
@@ -116,7 +116,7 @@ if ('onhashchange' in window) {
 <span id="L57" class="LineNr">57 </span>    <span class="muControl">return-continuation-until-mark</span> <span class="Constant">999/exception-tag</span>, <span class="Constant">[error will robinson!]</span>, <span class="Constant">0/unused</span>
 <span id="L58" class="LineNr">58 </span>  <span class="Delimiter">}</span>
 <span id="L59" class="LineNr">59 </span>  <span class="Comment"># normal return: 3 results including 0 continuation placeholder at start</span>
-<span id="L60" class="LineNr">60 </span> <span class="muControl"> return</span> <span class="Constant">0/continuation-placeholder</span>, <span class="Constant">0/no-error</span>, <span class="Constant">34/regular-result</span>
+<span id="L60" class="LineNr">60 </span> <span class="muControl"> return</span> <span class="Constant">0/continuation-placeholder</span>,<span class="Constant"> null/no-error,</span> <span class="Constant">34/regular-result</span>
 <span id="L61" class="LineNr">61 </span>]
 </pre>
 </body>
diff --git a/html/exception2.mu.html b/html/exception2.mu.html
index 8e5c5c21..392ccca0 100644
--- a/html/exception2.mu.html
+++ b/html/exception2.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -23,7 +24,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
 -->
 </style>
 
@@ -73,8 +73,8 @@ if ('onhashchange' in window) {
 <span id="L13" class="LineNr">13 </span>
 <span id="L14" class="LineNr">14 </span><span class="muRecipe">def</span> <a href='exception2.mu.html#L14'>main</a> [
 <span id="L15" class="LineNr">15 </span>  <span class="Constant">local-scope</span>
-<span id="L16" class="LineNr">16 </span>  <a href='exception2.mu.html#L21'>foo</a> <span class="Constant">0/no-exception</span>
-<span id="L17" class="LineNr">17 </span>  <a href='exception2.mu.html#L21'>foo</a> <span class="Constant">1/raise-exception</span>
+<span id="L16" class="LineNr">16 </span>  <a href='exception2.mu.html#L21'>foo</a><span class="Constant"> false/no-exception</span>
+<span id="L17" class="LineNr">17 </span>  <a href='exception2.mu.html#L21'>foo</a><span class="Constant"> true/raise-exception</span>
 <span id="L18" class="LineNr">18 </span>]
 <span id="L19" class="LineNr">19 </span>
 <span id="L20" class="LineNr">20 </span><span class="Comment"># example showing exception handling</span>
diff --git a/html/factorial.mu.html b/html/factorial.mu.html
index 67159a82..15d20edc 100644
--- a/html/factorial.mu.html
+++ b/html/factorial.mu.html
@@ -15,15 +15,15 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
diff --git a/html/filesystem.mu.html b/html/filesystem.mu.html
index 56ea3e96..1afa7712 100644
--- a/html/filesystem.mu.html
+++ b/html/filesystem.mu.html
@@ -15,9 +15,9 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
@@ -64,8 +64,8 @@ if ('onhashchange' in window) {
 <span id="L5" class="LineNr"> 5 </span>
 <span id="L6" class="LineNr"> 6 </span><span class="muRecipe">def</span> <a href='filesystem.mu.html#L6'>main</a> [
 <span id="L7" class="LineNr"> 7 </span>  <span class="Constant">local-scope</span>
-<span id="L8" class="LineNr"> 8 </span>  source-file:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='088file.mu.html#L21'>start-reading</a> <span class="Constant">0/real-filesystem</span>, <span class="Constant">[/tmp/mu-x]</span>
-<span id="L9" class="LineNr"> 9 </span>  sink-file:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, write-routine:num <span class="Special">&lt;-</span> <a href='088file.mu.html#L105'>start-writing</a> <span class="Constant">0/real-filesystem</span>, <span class="Constant">[/tmp/mu-y]</span>
+<span id="L8" class="LineNr"> 8 </span>  source-file:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='088file.mu.html#L21'>start-reading</a><span class="Constant"> null/real-filesystem,</span> <span class="Constant">[/tmp/mu-x]</span>
+<span id="L9" class="LineNr"> 9 </span>  sink-file:&amp;:<a href='075channel.mu.html#L40'>sink</a>:char, write-routine:num <span class="Special">&lt;-</span> <a href='088file.mu.html#L105'>start-writing</a><span class="Constant"> null/real-filesystem,</span> <span class="Constant">[/tmp/mu-y]</span>
 <span id="L10" class="LineNr">10 </span>  <span class="Delimiter">{</span>
 <span id="L11" class="LineNr">11 </span>    c:char, done?:bool, source-file <span class="Special">&lt;-</span> read source-file
 <span id="L12" class="LineNr">12 </span>    <span class="muControl">break-if</span> done?
diff --git a/html/fork.mu.html b/html/fork.mu.html
index 79a3c978..47f528ec 100644
--- a/html/fork.mu.html
+++ b/html/fork.mu.html
@@ -15,8 +15,8 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muRecipe { color: #ff8700; }
 .muControl { color: #c0a020; }
+.muRecipe { color: #ff8700; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Delimiter { color: #800080; }
diff --git a/html/http-client.mu.html b/html/http-client.mu.html
index a8f5abfb..7cce544a 100644
--- a/html/http-client.mu.html
+++ b/html/http-client.mu.html
@@ -15,9 +15,9 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.Delimiter { color: #800080; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
-.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
@@ -62,7 +62,7 @@ if ('onhashchange' in window) {
 <span id="L3" class="LineNr"> 3 </span><span class="muRecipe">def</span> <a href='http-client.mu.html#L3'>main</a> [
 <span id="L4" class="LineNr"> 4 </span>  <span class="Constant">local-scope</span>
 <span id="L5" class="LineNr"> 5 </span>  $print <span class="Constant">[aaa]</span> <span class="Constant">10/newline</span>
-<span id="L6" class="LineNr"> 6 </span>  google:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a> <span class="Constant">0/real-resources</span>, <span class="Constant">[google.com/]</span>
+<span id="L6" class="LineNr"> 6 </span>  google:&amp;:<a href='075channel.mu.html#L36'>source</a>:char <span class="Special">&lt;-</span> <a href='092socket.mu.html#L69'>start-reading-from-network</a><span class="Constant"> null/real-resources,</span> <span class="Constant">[google.com/]</span>
 <span id="L7" class="LineNr"> 7 </span>  $print <span class="Constant">[bbb]</span> <span class="Constant">10/newline</span>
 <span id="L8" class="LineNr"> 8 </span>  n:num <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
 <span id="L9" class="LineNr"> 9 </span>  buf:&amp;:<a href='061text.mu.html#L120'>buffer</a>:char <span class="Special">&lt;-</span> <a href='061text.mu.html#L125'>new-buffer</a><span class="Constant"> 30</span>
@@ -80,9 +80,9 @@ if ('onhashchange' in window) {
 <span id="L21" class="LineNr">21 </span>  <span class="Delimiter">}</span>
 <span id="L22" class="LineNr">22 </span>  result:text <span class="Special">&lt;-</span> <a href='061text.mu.html#L338'>buffer-to-array</a> buf
 <span id="L23" class="LineNr">23 </span>  open-console
-<span id="L24" class="LineNr">24 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L24" class="LineNr">24 </span>  <a href='081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L25" class="LineNr">25 </span>  len:num <span class="Special">&lt;-</span> length *result
-<span id="L26" class="LineNr">26 </span>  print <span class="Constant">0/real-screen</span>, result
+<span id="L26" class="LineNr">26 </span>  print<span class="Constant"> null/real-screen,</span> result
 <span id="L27" class="LineNr">27 </span>  wait-for-some-interaction
 <span id="L28" class="LineNr">28 </span>  close-console
 <span id="L29" class="LineNr">29 </span>]
diff --git a/html/http-server.mu.html b/html/http-server.mu.html
index 01243ab0..65364e63 100644
--- a/html/http-server.mu.html
+++ b/html/http-server.mu.html
@@ -15,13 +15,13 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muControl { color: #c0a020; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.muControl { color: #c0a020; }
 -->
 </style>
 
diff --git a/html/lambda-to-mu.mu.html b/html/lambda-to-mu.mu.html
index 995ffb5b..8866ff52 100644
--- a/html/lambda-to-mu.mu.html
+++ b/html/lambda-to-mu.mu.html
@@ -15,18 +15,18 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
-.muScenario { color: #00af00; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
 .SalientComment { color: #00ffff; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
-.CommentedCode { color: #6c6c6c; }
+.muControl { color: #c0a020; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.muControl { color: #c0a020; }
-.muData { color: #ffff00; }
+.CommentedCode { color: #6c6c6c; }
+.muScenario { color: #00af00; }
 -->
 </style>
 
@@ -85,7 +85,7 @@ if ('onhashchange' in window) {
 <span id="L22" class="LineNr"> 22 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L22'>lambda-to-mu</a> in:text<span class="muRecipe"> -&gt; </span>out:text [
 <span id="L23" class="LineNr"> 23 </span>  <span class="Constant">local-scope</span>
 <span id="L24" class="LineNr"> 24 </span>  <span class="Constant">load-inputs</span>
-<span id="L25" class="LineNr"> 25 </span>  out <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L25" class="LineNr"> 25 </span>  out <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L26" class="LineNr"> 26 </span>  cells:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> parse in
 <span id="L27" class="LineNr"> 27 </span>  out <span class="Special">&lt;-</span> to-mu cells
 <span id="L28" class="LineNr"> 28 </span>]
@@ -119,14 +119,14 @@ if ('onhashchange' in window) {
 <span id="L56" class="LineNr"> 56 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a> x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L57" class="LineNr"> 57 </span>  <span class="Constant">local-scope</span>
 <span id="L58" class="LineNr"> 58 </span>  <span class="Constant">load-inputs</span>
-<span id="L59" class="LineNr"> 59 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">0/false</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="muControl">return-unless</span> x,<span class="Constant"> false</span>
 <span id="L60" class="LineNr"> 60 </span>  _, result <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant">atom:variant</span>
 <span id="L61" class="LineNr"> 61 </span>]
 <span id="L62" class="LineNr"> 62 </span>
 <span id="L63" class="LineNr"> 63 </span><span class="muRecipe">def</span> <a href='lambda-to-mu.mu.html#L63'>is-pair?</a> x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a><span class="muRecipe"> -&gt; </span>result:bool [
 <span id="L64" class="LineNr"> 64 </span>  <span class="Constant">local-scope</span>
 <span id="L65" class="LineNr"> 65 </span>  <span class="Constant">load-inputs</span>
-<span id="L66" class="LineNr"> 66 </span>  <span class="muControl">return-unless</span> x, <span class="Constant">0/false</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="muControl">return-unless</span> x,<span class="Constant"> false</span>
 <span id="L67" class="LineNr"> 67 </span>  _, result <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
 <span id="L68" class="LineNr"> 68 </span>]
 <span id="L69" class="LineNr"> 69 </span>
@@ -147,7 +147,7 @@ if ('onhashchange' in window) {
 <span id="L84" class="LineNr"> 84 </span>  <span class="Comment"># construct (a . nil)</span>
 <span id="L85" class="LineNr"> 85 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a]</span>
 <span id="L86" class="LineNr"> 86 </span>  x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L42'>new-atom</a> s
-<span id="L87" class="LineNr"> 87 </span>  y:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> x, <span class="Constant">0/nil</span>
+<span id="L87" class="LineNr"> 87 </span>  y:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> x,<span class="Constant"> null</span>
 <span id="L88" class="LineNr"> 88 </span>  10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a> y
 <span id="L89" class="LineNr"> 89 </span>  11:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L63'>is-pair?</a> y
 <span id="L90" class="LineNr"> 90 </span>  memory-should-contain [
@@ -160,7 +160,7 @@ if ('onhashchange' in window) {
 <span id="L97" class="LineNr"> 97 </span>  <span class="Constant">local-scope</span>
 <span id="L98" class="LineNr"> 98 </span>  <span class="Constant">load-inputs</span>
 <span id="L99" class="LineNr"> 99 </span>  s:text, <a href='lambda-to-mu.mu.html#L56'>is-atom?</a>:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant">atom:variant</span>
-<span id="L100" class="LineNr">100 </span>  <span class="muControl">return-unless</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a>, <span class="Constant">0/false</span>
+<span id="L100" class="LineNr">100 </span>  <span class="muControl">return-unless</span> <a href='lambda-to-mu.mu.html#L56'>is-atom?</a>,<span class="Constant"> false</span>
 <span id="L101" class="LineNr">101 </span>  result <span class="Special">&lt;-</span> equal pat, s
 <span id="L102" class="LineNr">102 </span>]
 <span id="L103" class="LineNr">103 </span>
@@ -177,7 +177,7 @@ if ('onhashchange' in window) {
 <span id="L114" class="LineNr">114 </span>  <span class="Constant">local-scope</span>
 <span id="L115" class="LineNr">115 </span>  <span class="Constant">load-inputs</span>
 <span id="L116" class="LineNr">116 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, pair?:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
-<span id="L117" class="LineNr">117 </span>  <span class="muControl">return-unless</span> pair?, <span class="Constant">0/nil</span>
+<span id="L117" class="LineNr">117 </span>  <span class="muControl">return-unless</span> pair?,<span class="Constant"> null</span>
 <span id="L118" class="LineNr">118 </span>  result <span class="Special">&lt;-</span> get <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">first:offset</span>
 <span id="L119" class="LineNr">119 </span>]
 <span id="L120" class="LineNr">120 </span>
@@ -185,7 +185,7 @@ if ('onhashchange' in window) {
 <span id="L122" class="LineNr">122 </span>  <span class="Constant">local-scope</span>
 <span id="L123" class="LineNr">123 </span>  <span class="Constant">load-inputs</span>
 <span id="L124" class="LineNr">124 </span>  <a href='lambda-to-mu.mu.html#L37'>pair</a>:<a href='lambda-to-mu.mu.html#L37'>pair</a>, pair?:bool <span class="Special">&lt;-</span> maybe-convert *x, <span class="Constant"><a href='lambda-to-mu.mu.html#L37'>pair</a>:variant</span>
-<span id="L125" class="LineNr">125 </span>  <span class="muControl">return-unless</span> pair?, <span class="Constant">0/nil</span>
+<span id="L125" class="LineNr">125 </span>  <span class="muControl">return-unless</span> pair?,<span class="Constant"> null</span>
 <span id="L126" class="LineNr">126 </span>  result <span class="Special">&lt;-</span> get <a href='lambda-to-mu.mu.html#L37'>pair</a>, <span class="Constant">rest:offset</span>
 <span id="L127" class="LineNr">127 </span>]
 <span id="L128" class="LineNr">128 </span>
@@ -224,7 +224,7 @@ if ('onhashchange' in window) {
 <span id="L161" class="LineNr">161 </span>  <span class="Comment"># construct (a . nil)</span>
 <span id="L162" class="LineNr">162 </span>  s:text <span class="Special">&lt;-</span> new <span class="Constant">[a]</span>
 <span id="L163" class="LineNr">163 </span>  x:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L42'>new-atom</a> s
-<span id="L164" class="LineNr">164 </span>  y:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> x, <span class="Constant">0/nil</span>
+<span id="L164" class="LineNr">164 </span>  y:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> x,<span class="Constant"> null</span>
 <span id="L165" class="LineNr">165 </span>  x2:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> first y
 <span id="L166" class="LineNr">166 </span>  10:bool/<span class="Special">raw</span> <span class="Special">&lt;-</span> equal x, x2
 <span id="L167" class="LineNr">167 </span>  11:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>/<span class="Special">raw</span> <span class="Special">&lt;-</span> rest y
@@ -250,7 +250,7 @@ if ('onhashchange' in window) {
 <span id="L187" class="LineNr">187 </span>  <span class="Comment"># skip whitespace</span>
 <span id="L188" class="LineNr">188 </span>  in <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L274'>skip-whitespace</a> in
 <span id="L189" class="LineNr">189 </span>  c:char, eof?:bool <span class="Special">&lt;-</span> <a href='066stream.mu.html#L42'>peek</a> in
-<span id="L190" class="LineNr">190 </span>  <span class="muControl">return-if</span> eof?, <span class="Constant">0/nil</span>
+<span id="L190" class="LineNr">190 </span>  <span class="muControl">return-if</span> eof?,<span class="Constant"> null</span>
 <span id="L191" class="LineNr">191 </span>  pair?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">40/open-paren</span>
 <span id="L192" class="LineNr">192 </span>  <span class="Delimiter">{</span>
 <span id="L193" class="LineNr">193 </span>    <span class="muControl">break-if</span> pair?
@@ -286,7 +286,7 @@ if ('onhashchange' in window) {
 <span id="L223" class="LineNr">223 </span>      close-paren?:bool <span class="Special">&lt;-</span> equal c, <span class="Constant">41/close-paren</span>
 <span id="L224" class="LineNr">224 </span>      <span class="muControl">break-if</span> close-paren?
 <span id="L225" class="LineNr">225 </span>      first:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, in <span class="Special">&lt;-</span> parse in
-<span id="L226" class="LineNr">226 </span>      *out <span class="Special">&lt;-</span> merge <span class="Constant">1/pair</span>, first, <span class="Constant">0/nil</span>
+<span id="L226" class="LineNr">226 </span>      *out <span class="Special">&lt;-</span> merge <span class="Constant">1/pair</span>, first,<span class="Constant"> null</span>
 <span id="L227" class="LineNr">227 </span>    <span class="Delimiter">}</span>
 <span id="L228" class="LineNr">228 </span>    <span class="Comment"># read in any remaining elements</span>
 <span id="L229" class="LineNr">229 </span>    curr:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> copy out
@@ -304,11 +304,11 @@ if ('onhashchange' in window) {
 <span id="L241" class="LineNr">241 </span>       <span class="muControl"> break</span> <span class="Constant">+end-pair</span>
 <span id="L242" class="LineNr">242 </span>      <span class="Delimiter">}</span>
 <span id="L243" class="LineNr">243 </span>      <span class="Comment"># still here? read next element of pair</span>
-<span id="L244" class="LineNr">244 </span>      <a href='065duplex_list.mu.html#L25'>next</a>:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, in <span class="Special">&lt;-</span> parse in
-<span id="L245" class="LineNr">245 </span>      is-dot?:bool <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L96'>atom-match?</a> <a href='065duplex_list.mu.html#L25'>next</a>, <span class="Constant">[.]</span>
+<span id="L244" class="LineNr">244 </span>      <a href='065duplex_list.mu.html#L31'>next</a>:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a>, in <span class="Special">&lt;-</span> parse in
+<span id="L245" class="LineNr">245 </span>      is-dot?:bool <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L96'>atom-match?</a> <a href='065duplex_list.mu.html#L31'>next</a>, <span class="Constant">[.]</span>
 <span id="L246" class="LineNr">246 </span>      <span class="Delimiter">{</span>
 <span id="L247" class="LineNr">247 </span>        <span class="muControl">break-if</span> is-dot?
-<span id="L248" class="LineNr">248 </span>        next-curr:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> <a href='065duplex_list.mu.html#L25'>next</a>, <span class="Constant">0/nil</span>
+<span id="L248" class="LineNr">248 </span>        next-curr:&amp;:<a href='lambda-to-mu.mu.html#L31'>cell</a> <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L49'>new-pair</a> <a href='065duplex_list.mu.html#L31'>next</a>,<span class="Constant"> null</span>
 <span id="L249" class="LineNr">249 </span>        curr <span class="Special">&lt;-</span> <a href='lambda-to-mu.mu.html#L138'>set-rest</a> curr, next-curr
 <span id="L250" class="LineNr">250 </span>        curr <span class="Special">&lt;-</span> rest curr
 <span id="L251" class="LineNr">251 </span>      <span class="Delimiter">}</span>
@@ -339,7 +339,7 @@ if ('onhashchange' in window) {
 <span id="L276" class="LineNr">276 </span>  <span class="Constant">load-inputs</span>
 <span id="L277" class="LineNr">277 </span>  <span class="Delimiter">{</span>
 <span id="L278" class="LineNr">278 </span>    done?:bool <span class="Special">&lt;-</span> <a href='066stream.mu.html#L72'>end-of-stream?</a> in
-<span id="L279" class="LineNr">279 </span>    <span class="muControl">return-if</span> done?, <span class="Constant">0/null</span>
+<span id="L279" class="LineNr">279 </span>    <span class="muControl">return-if</span> done?,<span class="Constant"> null</span>
 <span id="L280" class="LineNr">280 </span>    c:char <span class="Special">&lt;-</span> <a href='066stream.mu.html#L42'>peek</a> in
 <span id="L281" class="LineNr">281 </span>    <a href='061text.mu.html#L634'>space?</a>:bool <span class="Special">&lt;-</span> <a href='061text.mu.html#L634'>space?</a> c
 <span id="L282" class="LineNr">282 </span>    <span class="muControl">break-unless</span> <a href='061text.mu.html#L634'>space?</a>
@@ -649,7 +649,7 @@ if ('onhashchange' in window) {
 <span id="L586" class="LineNr">586 </span>  <span class="Comment"># null cell? no change.</span>
 <span id="L587" class="LineNr">587 </span>  <span class="Comment"># pair with all atoms? gensym a new variable</span>
 <span id="L588" class="LineNr">588 </span>  <span class="Comment"># pair containing other pairs? recurse</span>
-<span id="L589" class="LineNr">589 </span>  result-name <span class="Special">&lt;-</span> copy<span class="Constant"> 0</span>
+<span id="L589" class="LineNr">589 </span>  result-name <span class="Special">&lt;-</span> copy<span class="Constant"> null</span>
 <span id="L590" class="LineNr">590 </span>]
 </pre>
 </body>
diff --git a/html/nqueens.mu.html b/html/nqueens.mu.html
index 96140af7..4fa4b3ee 100644
--- a/html/nqueens.mu.html
+++ b/html/nqueens.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -23,7 +24,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
 -->
 </style>
 
@@ -126,11 +126,11 @@ if ('onhashchange' in window) {
 <span id="L66" class="LineNr"> 66 </span>    q:<a href='nqueens.mu.html#L6'>square</a> <span class="Special">&lt;-</span> first queens
 <span id="L67" class="LineNr"> 67 </span>    qfile:num <span class="Special">&lt;-</span> get q, <span class="Constant">file:offset</span>
 <span id="L68" class="LineNr"> 68 </span>    file-match?:bool <span class="Special">&lt;-</span> equal curr-file, qfile
-<span id="L69" class="LineNr"> 69 </span>    <span class="muControl">return-if</span> file-match?, <span class="Constant">1/conflict-found</span>
+<span id="L69" class="LineNr"> 69 </span>    <span class="muControl">return-if</span> file-match?,<span class="Constant"> true/conflict-found</span>
 <span id="L70" class="LineNr"> 70 </span>    queens <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> queens
 <span id="L71" class="LineNr"> 71 </span>   <span class="muControl"> loop</span>
 <span id="L72" class="LineNr"> 72 </span>  <span class="Delimiter">}</span>
-<span id="L73" class="LineNr"> 73 </span> <span class="muControl"> return</span> <span class="Constant">0/no-conflict-found</span>
+<span id="L73" class="LineNr"> 73 </span> <span class="muControl"> return</span><span class="Constant"> false/no-conflict-found</span>
 <span id="L74" class="LineNr"> 74 </span>]
 <span id="L75" class="LineNr"> 75 </span>
 <span id="L76" class="LineNr"> 76 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L76'>conflicting-diagonal?</a> curr:<a href='nqueens.mu.html#L6'>square</a>, queens:&amp;:<a href='064list.mu.html#L6'>list</a>:<a href='nqueens.mu.html#L6'>square</a><span class="muRecipe"> -&gt; </span>result:bool [
@@ -148,11 +148,11 @@ if ('onhashchange' in window) {
 <span id="L88" class="LineNr"> 88 </span>    rank-delta <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> rank-delta
 <span id="L89" class="LineNr"> 89 </span>    file-delta <span class="Special">&lt;-</span> <a href='070table.mu.html#L103'>abs</a> file-delta
 <span id="L90" class="LineNr"> 90 </span>    diagonal-match?:bool <span class="Special">&lt;-</span> equal rank-delta, file-delta
-<span id="L91" class="LineNr"> 91 </span>    <span class="muControl">return-if</span> diagonal-match?, <span class="Constant">1/conflict-found</span>
+<span id="L91" class="LineNr"> 91 </span>    <span class="muControl">return-if</span> diagonal-match?,<span class="Constant"> true/conflict-found</span>
 <span id="L92" class="LineNr"> 92 </span>    queens <span class="Special">&lt;-</span> <a href='064list.mu.html#L24'>rest</a> queens
 <span id="L93" class="LineNr"> 93 </span>   <span class="muControl"> loop</span>
 <span id="L94" class="LineNr"> 94 </span>  <span class="Delimiter">}</span>
-<span id="L95" class="LineNr"> 95 </span> <span class="muControl"> return</span> <span class="Constant">0/no-conflict-found</span>
+<span id="L95" class="LineNr"> 95 </span> <span class="muControl"> return</span><span class="Constant"> false/no-conflict-found</span>
 <span id="L96" class="LineNr"> 96 </span>]
 <span id="L97" class="LineNr"> 97 </span>
 <span id="L98" class="LineNr"> 98 </span><span class="muRecipe">def</span> <a href='nqueens.mu.html#L98'>main</a> [
diff --git a/html/same-fringe.mu.html b/html/same-fringe.mu.html
index e9057ab1..370687b9 100644
--- a/html/same-fringe.mu.html
+++ b/html/same-fringe.mu.html
@@ -15,6 +15,7 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
+.muData { color: #ffff00; }
 .muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
 .Delimiter { color: #800080; }
@@ -23,7 +24,6 @@ a:hover { text-decoration: underline; }
 .Constant { color: #00a0a0; }
 .LineNr { color: #444444; }
 .muControl { color: #c0a020; }
-.muData { color: #ffff00; }
 -->
 </style>
 
@@ -98,7 +98,7 @@ if ('onhashchange' in window) {
 <span id="L38" class="LineNr">38 </span>    <span class="muControl">break-if</span> a-done?
 <span id="L39" class="LineNr">39 </span>    <span class="muControl">break-if</span> b-done?
 <span id="L40" class="LineNr">40 </span>    match?:bool <span class="Special">&lt;-</span> equal x, y
-<span id="L41" class="LineNr">41 </span>    <span class="muControl">return-unless</span> match?, <span class="Constant">0/false</span>
+<span id="L41" class="LineNr">41 </span>    <span class="muControl">return-unless</span> match?,<span class="Constant"> false</span>
 <span id="L42" class="LineNr">42 </span>   <span class="muControl"> loop</span>
 <span id="L43" class="LineNr">43 </span>  <span class="Delimiter">}</span>
 <span id="L44" class="LineNr">44 </span>  result <span class="Special">&lt;-</span> and a-done?, b-done?
@@ -111,8 +111,8 @@ if ('onhashchange' in window) {
 <span id="L51" class="LineNr">51 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>  <span class="Comment"># initial</span>
 <span id="L52" class="LineNr">52 </span>  <a href='same-fringe.mu.html#L59'>traverse</a> t
 <span id="L53" class="LineNr">53 </span>  zero-val:&amp;:_elem <span class="Special">&lt;-</span> new <span class="Constant">_elem:type</span>
-<span id="L54" class="LineNr">54 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>, *zero-val, <span class="Constant">1/done</span>  <span class="Comment"># final</span>
-<span id="L55" class="LineNr">55 </span>  assert <span class="Constant">0/false</span>, <span class="Constant">[continuation called past done]</span>
+<span id="L54" class="LineNr">54 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>, *zero-val,<span class="Constant"> true/done</span>  <span class="Comment"># final</span>
+<span id="L55" class="LineNr">55 </span>  assert<span class="Constant"> false</span>, <span class="Constant">[continuation called past done]</span>
 <span id="L56" class="LineNr">56 </span>]
 <span id="L57" class="LineNr">57 </span>
 <span id="L58" class="LineNr">58 </span><span class="Comment"># core traversal</span>
@@ -128,7 +128,7 @@ if ('onhashchange' in window) {
 <span id="L68" class="LineNr">68 </span>  <span class="muControl">return-if</span> r
 <span id="L69" class="LineNr">69 </span>  <span class="Comment"># leaf</span>
 <span id="L70" class="LineNr">70 </span>  v:_elem <span class="Special">&lt;-</span> get *t, <span class="Constant">val:offset</span>
-<span id="L71" class="LineNr">71 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>, v, <span class="Constant">0/not-done</span>
+<span id="L71" class="LineNr">71 </span>  <span class="muControl">return-continuation-until-mark</span> <span class="Constant">100/mark</span>, v,<span class="Constant"> false/not-done</span>
 <span id="L72" class="LineNr">72 </span>]
 <span id="L73" class="LineNr">73 </span>
 <span id="L74" class="LineNr">74 </span><span class="Comment"># details</span>
diff --git a/html/screen.mu.html b/html/screen.mu.html
index 74f00d11..26eb9ac5 100644
--- a/html/screen.mu.html
+++ b/html/screen.mu.html
@@ -61,27 +61,27 @@ if ('onhashchange' in window) {
 <span id="L4" class="LineNr"> 4 </span><span class="Comment"># screens.</span>
 <span id="L5" class="LineNr"> 5 </span><span class="muRecipe">def</span> <a href='screen.mu.html#L5'>main</a> [
 <span id="L6" class="LineNr"> 6 </span>  open-console
-<span id="L7" class="LineNr"> 7 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>  <span class="Comment"># non-scrolling app</span>
+<span id="L7" class="LineNr"> 7 </span>  <a href='081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>  <span class="Comment"># non-scrolling app</span>
 <span id="L8" class="LineNr"> 8 </span>  10:char <span class="Special">&lt;-</span> copy <span class="Constant">97/a</span>
-<span id="L9" class="LineNr"> 9 </span>  print <span class="Constant">0/screen</span>, 10:char/a, <span class="Constant">1/red</span>, <span class="Constant">2/green</span>
-<span id="L10" class="LineNr">10 </span>  1:num/<span class="Special">raw</span>, 2:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a> <span class="Constant">0/screen</span>
-<span id="L11" class="LineNr">11 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L12" class="LineNr">12 </span>  <a href='081print.mu.html#L46'>clear-screen</a> <span class="Constant">0/screen</span>
-<span id="L13" class="LineNr">13 </span>  <a href='081print.mu.html#L591'>move-cursor</a> <span class="Constant">0/screen</span>, <span class="Constant">0/row</span>, <span class="Constant">4/column</span>
+<span id="L9" class="LineNr"> 9 </span>  print<span class="Constant"> null/screen,</span> 10:char/a, <span class="Constant">1/red</span>, <span class="Constant">2/green</span>
+<span id="L10" class="LineNr">10 </span>  1:num/<span class="Special">raw</span>, 2:num/<span class="Special">raw</span> <span class="Special">&lt;-</span> <a href='081print.mu.html#L577'>cursor-position</a><span class="Constant"> null/screen</span>
+<span id="L11" class="LineNr">11 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L12" class="LineNr">12 </span>  <a href='081print.mu.html#L46'>clear-screen</a><span class="Constant"> null/screen</span>
+<span id="L13" class="LineNr">13 </span>  <a href='081print.mu.html#L591'>move-cursor</a><span class="Constant"> null/screen,</span> <span class="Constant">0/row</span>, <span class="Constant">4/column</span>
 <span id="L14" class="LineNr">14 </span>  10:char <span class="Special">&lt;-</span> copy <span class="Constant">98/b</span>
-<span id="L15" class="LineNr">15 </span>  print <span class="Constant">0/screen</span>, 10:char
-<span id="L16" class="LineNr">16 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L17" class="LineNr">17 </span>  <a href='081print.mu.html#L591'>move-cursor</a> <span class="Constant">0/screen</span>, <span class="Constant">0/row</span>, <span class="Constant">0/column</span>
-<span id="L18" class="LineNr">18 </span>  <a href='081print.mu.html#L524'>clear-line</a> <span class="Constant">0/screen</span>
-<span id="L19" class="LineNr">19 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L20" class="LineNr">20 </span>  <a href='081print.mu.html#L645'>cursor-down</a> <span class="Constant">0/screen</span>
-<span id="L21" class="LineNr">21 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L22" class="LineNr">22 </span>  <a href='081print.mu.html#L706'>cursor-right</a> <span class="Constant">0/screen</span>
-<span id="L23" class="LineNr">23 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L24" class="LineNr">24 </span>  <a href='081print.mu.html#L726'>cursor-left</a> <span class="Constant">0/screen</span>
-<span id="L25" class="LineNr">25 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
-<span id="L26" class="LineNr">26 </span>  <a href='081print.mu.html#L688'>cursor-up</a> <span class="Constant">0/screen</span>
-<span id="L27" class="LineNr">27 </span>  <a href='084console.mu.html#L88'>wait-for-event</a> <span class="Constant">0/console</span>
+<span id="L15" class="LineNr">15 </span>  print<span class="Constant"> null/screen,</span> 10:char
+<span id="L16" class="LineNr">16 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L17" class="LineNr">17 </span>  <a href='081print.mu.html#L591'>move-cursor</a><span class="Constant"> null/screen,</span> <span class="Constant">0/row</span>, <span class="Constant">0/column</span>
+<span id="L18" class="LineNr">18 </span>  <a href='081print.mu.html#L524'>clear-line</a><span class="Constant"> null/screen</span>
+<span id="L19" class="LineNr">19 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L20" class="LineNr">20 </span>  <a href='081print.mu.html#L645'>cursor-down</a><span class="Constant"> null/screen</span>
+<span id="L21" class="LineNr">21 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L22" class="LineNr">22 </span>  <a href='081print.mu.html#L706'>cursor-right</a><span class="Constant"> null/screen</span>
+<span id="L23" class="LineNr">23 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L24" class="LineNr">24 </span>  <a href='081print.mu.html#L726'>cursor-left</a><span class="Constant"> null/screen</span>
+<span id="L25" class="LineNr">25 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
+<span id="L26" class="LineNr">26 </span>  <a href='081print.mu.html#L688'>cursor-up</a><span class="Constant"> null/screen</span>
+<span id="L27" class="LineNr">27 </span>  <a href='084console.mu.html#L88'>wait-for-event</a><span class="Constant"> null/console</span>
 <span id="L28" class="LineNr">28 </span>  close-console
 <span id="L29" class="LineNr">29 </span>]
 </pre>
diff --git a/html/subx/000organization.cc.html b/html/subx/000organization.cc.html
index 7bc3557c..2c0c0877 100644
--- a/html/subx/000organization.cc.html
+++ b/html/subx/000organization.cc.html
@@ -15,14 +15,13 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.Delimiter { color: #800080; }
+.Constant { color: #00a0a0; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
-.Constant { color: #00a0a0; }
+.Delimiter { color: #800080; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -158,7 +157,7 @@ if ('onhashchange' in window) {
 <span id="L98" class="LineNr"> 98 </span><span class="Comment">// functions in any order. Just be sure to declare each function header all on</span>
 <span id="L99" class="LineNr"> 99 </span><span class="Comment">// one line, ending with the '{'. Our auto-generation scripts are too minimal</span>
 <span id="L100" class="LineNr">100 </span><span class="Comment">// and simple-minded to handle anything else.</span>
-<span id="L101" class="LineNr">101 </span><span class="PreProc">#include </span><span class="Constant">&quot;function_list&quot;</span>  <span class="Comment">// by convention, files ending with '_list' are auto-generated</span>
+<span id="L101" class="LineNr">101 </span><span class="Comment">#include &quot;function_list&quot;  // by convention, files ending with '_list' are auto-generated</span>
 <span id="L102" class="LineNr">102 </span>
 <span id="L103" class="LineNr">103 </span><span class="Comment">// Globals</span>
 <span id="L104" class="LineNr">104 </span><span class="Comment">//</span>
@@ -171,46 +170,55 @@ if ('onhashchange' in window) {
 <span id="L111" class="LineNr">111 </span><span class="Comment">// End Globals</span>
 <span id="L112" class="LineNr">112 </span>
 <span id="L113" class="LineNr">113 </span><span class="Normal">int</span> <a href='000organization.cc.html#L113'>main</a><span class="Delimiter">(</span><span class="Normal">int</span> argc<span class="Delimiter">,</span> <span class="Normal">char</span>* argv[]<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L114" class="LineNr">114 </span>  atexit<span class="Delimiter">(</span><a href='000organization.cc.html#L139'>reset</a><span class="Delimiter">);</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Comment">// run on a 32-bit system</span>
+<span id="L114" class="LineNr">114 </span>  atexit<span class="Delimiter">(</span><a href='000organization.cc.html#L148'>reset</a><span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>  <span class="Comment">// we require a 32-bit little-endian system</span>
 <span id="L116" class="LineNr">116 </span>  assert<span class="Delimiter">(</span><span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">int</span><span class="Delimiter">)</span> == <span class="Constant">4</span><span class="Delimiter">);</span>
 <span id="L117" class="LineNr">117 </span>  assert<span class="Delimiter">(</span><span class="Normal">sizeof</span><span class="Delimiter">(</span><span class="Normal">float</span><span class="Delimiter">)</span> == <span class="Constant">4</span><span class="Delimiter">);</span>
-<span id="L118" class="LineNr">118 </span>  <a href='000organization.cc.html#L143'>assert_little_endian</a><span class="Delimiter">();</span>
+<span id="L118" class="LineNr">118 </span>  <a href='000organization.cc.html#L152'>assert_little_endian</a><span class="Delimiter">();</span>
 <span id="L119" class="LineNr">119 </span>
 <span id="L120" class="LineNr">120 </span>  <span class="Comment">// End One-time Setup</span>
 <span id="L121" class="LineNr">121 </span>
 <span id="L122" class="LineNr">122 </span>  <span class="Comment">// Commandline Parsing</span>
 <span id="L123" class="LineNr">123 </span>  <span class="Comment">// End Commandline Parsing</span>
 <span id="L124" class="LineNr">124 </span>
-<span id="L125" class="LineNr">125 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// End Main</span>
-<span id="L126" class="LineNr">126 </span><span class="Delimiter">}</span>
-<span id="L127" class="LineNr">127 </span>
-<span id="L128" class="LineNr">128 </span><span class="Comment">// Unit Tests</span>
-<span id="L129" class="LineNr">129 </span><span class="Comment">// End Unit Tests</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Comment">//: our first directive; insert the following headers at the start of the program</span>
-<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L133" class="LineNr">133 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
-<span id="L134" class="LineNr">134 </span><span class="PreProc">#include </span><span class="Constant">&lt;stdlib.h&gt;</span>
-<span id="L135" class="LineNr">135 </span>
-<span id="L136" class="LineNr">136 </span><span class="Comment">//: Without directives or with the :(code) directive, lines get added at the</span>
-<span id="L137" class="LineNr">137 </span><span class="Comment">//: end.</span>
-<span id="L138" class="LineNr">138 </span><span class="Delimiter">:(code)</span>
-<span id="L139" class="LineNr">139 </span><span class="Normal">void</span> <a href='000organization.cc.html#L139'>reset</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L140" class="LineNr">140 </span>  <span class="Comment">// End Reset</span>
-<span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
-<span id="L142" class="LineNr">142 </span>
-<span id="L143" class="LineNr">143 </span><span class="Normal">void</span> <a href='000organization.cc.html#L143'>assert_little_endian</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L144" class="LineNr">144 </span>  <span class="Normal">const</span> <span class="Normal">int</span> x = <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* y = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">const</span> <span class="Normal">char</span>*&gt;<span class="Delimiter">(</span>&amp;x<span class="Delimiter">);</span>
-<span id="L146" class="LineNr">146 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*y != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </span>    cerr &lt;&lt; <span class="Constant">&quot;the SubX VM only runs on little-endian processors. Do you have Intel (or AMD or Atom) inside?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Delimiter">}</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Comment">// End Main</span>
+<span id="L126" class="LineNr">126 </span>
+<span id="L127" class="LineNr">127 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L128" class="LineNr">128 </span><span class="Delimiter">}</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span><span class="Comment">// Unit Tests</span>
+<span id="L131" class="LineNr">131 </span><span class="Comment">// End Unit Tests</span>
+<span id="L132" class="LineNr">132 </span>
+<span id="L133" class="LineNr">133 </span><span class="Comment">//: our first directive; insert the following headers at the start of the program</span>
+<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L135" class="LineNr">135 </span><span class="Comment">#include &lt;assert.h&gt;</span>
+<span id="L136" class="LineNr">136 </span><span class="Comment">#include &lt;stdlib.h&gt;</span>
+<span id="L137" class="LineNr">137 </span>
+<span id="L138" class="LineNr">138 </span><span class="Comment">//: Without directives or with the :(code) directive, lines get added at the</span>
+<span id="L139" class="LineNr">139 </span><span class="Comment">//: end.</span>
+<span id="L140" class="LineNr">140 </span><span class="Comment">//:</span>
+<span id="L141" class="LineNr">141 </span><span class="Comment">//: Regardless of where functions are defined, we can call them anywhere we</span>
+<span id="L142" class="LineNr">142 </span><span class="Comment">//: like as long as we format the function header in a specific way: put it</span>
+<span id="L143" class="LineNr">143 </span><span class="Comment">//: all on a single line without indent, end the line with ') {' and no</span>
+<span id="L144" class="LineNr">144 </span><span class="Comment">//: trailing whitespace. As long as functions uniformly start this way, our</span>
+<span id="L145" class="LineNr">145 </span><span class="Comment">//: 'build' script contains a little command to automatically generate</span>
+<span id="L146" class="LineNr">146 </span><span class="Comment">//: declarations for them.</span>
+<span id="L147" class="LineNr">147 </span><span class="Delimiter">:(code)</span>
+<span id="L148" class="LineNr">148 </span><span class="Normal">void</span> <a href='000organization.cc.html#L148'>reset</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Comment">// End Reset</span>
 <span id="L150" class="LineNr">150 </span><span class="Delimiter">}</span>
-<span id="L151" class="LineNr">151 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L152" class="LineNr">152 </span><span class="PreProc">#include</span><span class="Constant">&lt;iostream&gt;</span>
-<span id="L153" class="LineNr">153 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>
+<span id="L152" class="LineNr">152 </span><span class="Normal">void</span> <a href='000organization.cc.html#L152'>assert_little_endian</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Normal">const</span> <span class="Normal">int</span> x = <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Normal">const</span> <span class="Normal">char</span>* y = <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">const</span> <span class="Normal">char</span>*&gt;<span class="Delimiter">(</span>&amp;x<span class="Delimiter">);</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>*y != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L156" class="LineNr">156 </span>    cerr &lt;&lt; <span class="Constant">&quot;SubX requires a little-endian processor. Do you have Intel (or AMD or Atom) inside?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Delimiter">}</span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
+<span id="L160" class="LineNr">160 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L161" class="LineNr">161 </span><span class="Comment">#include&lt;iostream&gt;</span>
+<span id="L162" class="LineNr">162 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/001help.cc.html b/html/subx/001help.cc.html
index da5d00c5..03a2160c 100644
--- a/html/subx/001help.cc.html
+++ b/html/subx/001help.cc.html
@@ -16,7 +16,6 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .Constant { color: #00a0a0; }
-.SalientComment { color: #00ffff; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Delimiter { color: #800080; }
@@ -64,210 +63,284 @@ if ('onhashchange' in window) {
 <span id="L2" class="LineNr">  2 </span><span class="Comment">//: This should give you a sense for what to look forward to in later layers.</span>
 <span id="L3" class="LineNr">  3 </span>
 <span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
-<span id="L5" class="LineNr">  5 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &lt;= <span class="Constant">1</span> || <a href='001help.cc.html#L23'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;--help&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L5" class="LineNr">  5 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &lt;= <span class="Constant">1</span> || <a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;--help&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
 <span id="L6" class="LineNr">  6 </span>  <span class="Comment">//: this is the functionality later layers will provide</span>
 <span id="L7" class="LineNr">  7 </span>  <span class="Comment">// currently no automated tests for commandline arg parsing</span>
-<span id="L8" class="LineNr">  8 </span>  cerr &lt;&lt; <span class="Constant">&quot;Usage:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
-<span id="L9" class="LineNr">  9 </span>       &lt;&lt; <span class="Constant">&quot;  subx test</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L10" class="LineNr"> 10 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L11" class="LineNr"> 11 </span><span class="Delimiter">}</span>
-<span id="L12" class="LineNr"> 12 </span>
-<span id="L13" class="LineNr"> 13 </span><span class="SalientComment">//:: Helper function used by the above fragment of code (and later layers too,</span>
-<span id="L14" class="LineNr"> 14 </span><span class="SalientComment">//:: who knows?).</span>
-<span id="L15" class="LineNr"> 15 </span><span class="Comment">//: The :(code) directive appends function definitions to the end of the</span>
-<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: project. Regardless of where functions are defined, we can call them</span>
-<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: anywhere we like as long as we format the function header in a specific</span>
-<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: way: put it all on a single line without indent, end the line with ') {'</span>
-<span id="L19" class="LineNr"> 19 </span><span class="Comment">//: and no trailing whitespace. As long as functions uniformly start this</span>
-<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: way, our 'build' script contains a little command to automatically</span>
-<span id="L21" class="LineNr"> 21 </span><span class="Comment">//: generate declarations for them.</span>
-<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(code)</span>
-<span id="L23" class="LineNr"> 23 </span><span class="Normal">bool</span> <a href='001help.cc.html#L23'>is_equal</a><span class="Delimiter">(</span><span class="Normal">char</span>* s<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span>* lit<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">return</span> strncmp<span class="Delimiter">(</span>s<span class="Delimiter">,</span> lit<span class="Delimiter">,</span> strlen<span class="Delimiter">(</span>lit<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
-<span id="L26" class="LineNr"> 26 </span>
-<span id="L27" class="LineNr"> 27 </span><span class="Normal">bool</span> <a href='001help.cc.html#L27'>starts_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; pat<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L28" class="LineNr"> 28 </span>  string::const_iterator a=s<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> b=pat<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L29" class="LineNr"> 29 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  a!=s<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">()</span> &amp;&amp; b!=pat<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++a<span class="Delimiter">,</span> ++b<span class="Delimiter">)</span>
-<span id="L30" class="LineNr"> 30 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*a != *b<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L31" class="LineNr"> 31 </span>  <span class="Identifier">return</span> b == pat<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">}</span>
-<span id="L33" class="LineNr"> 33 </span>
-<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: I'll throw some style conventions here for want of a better place for them.</span>
-<span id="L35" class="LineNr"> 35 </span><span class="Comment">//: As a rule I hate style guides. Do what you want, that's my motto. But since</span>
-<span id="L36" class="LineNr"> 36 </span><span class="Comment">//: we're dealing with C/C++, the one big thing we want to avoid is undefined</span>
-<span id="L37" class="LineNr"> 37 </span><span class="Comment">//: behavior. If a compiler ever encounters undefined behavior it can make</span>
-<span id="L38" class="LineNr"> 38 </span><span class="Comment">//: your program do anything it wants.</span>
-<span id="L39" class="LineNr"> 39 </span><span class="Comment">//:</span>
-<span id="L40" class="LineNr"> 40 </span><span class="Comment">//: For reference, my checklist of undefined behaviors to watch out for:</span>
-<span id="L41" class="LineNr"> 41 </span><span class="Comment">//:   out-of-bounds access</span>
-<span id="L42" class="LineNr"> 42 </span><span class="Comment">//:   uninitialized variables</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Comment">//:   use after free</span>
-<span id="L44" class="LineNr"> 44 </span><span class="Comment">//:   dereferencing invalid pointers: null, a new of size 0, others</span>
-<span id="L45" class="LineNr"> 45 </span><span class="Comment">//:</span>
-<span id="L46" class="LineNr"> 46 </span><span class="Comment">//:   casting a large number to a type too small to hold it</span>
-<span id="L47" class="LineNr"> 47 </span><span class="Comment">//:</span>
-<span id="L48" class="LineNr"> 48 </span><span class="Comment">//:   integer overflow</span>
-<span id="L49" class="LineNr"> 49 </span><span class="Comment">//:   division by zero and other undefined expressions</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Comment">//:   left-shift by negative count</span>
-<span id="L51" class="LineNr"> 51 </span><span class="Comment">//:   shifting values by more than or equal to the number of bits they contain</span>
-<span id="L52" class="LineNr"> 52 </span><span class="Comment">//:   bitwise operations on signed numbers</span>
-<span id="L53" class="LineNr"> 53 </span><span class="Comment">//:</span>
-<span id="L54" class="LineNr"> 54 </span><span class="Comment">//:   Converting pointers to types of different alignment requirements</span>
-<span id="L55" class="LineNr"> 55 </span><span class="Comment">//:     T* -&gt; void* -&gt; T*: defined</span>
-<span id="L56" class="LineNr"> 56 </span><span class="Comment">//:     T* -&gt; U* -&gt; T*: defined if non-function pointers and alignment requirements are same</span>
-<span id="L57" class="LineNr"> 57 </span><span class="Comment">//:     function pointers may be cast to other function pointers</span>
-<span id="L58" class="LineNr"> 58 </span><span class="Comment">//:</span>
-<span id="L59" class="LineNr"> 59 </span><span class="Comment">//:       Casting a numeric value into a value that can't be represented by the target type (either directly or via static_cast)</span>
-<span id="L60" class="LineNr"> 60 </span><span class="Comment">//:</span>
-<span id="L61" class="LineNr"> 61 </span><span class="Comment">//: To guard against these, some conventions:</span>
-<span id="L62" class="LineNr"> 62 </span><span class="Comment">//:</span>
-<span id="L63" class="LineNr"> 63 </span><span class="Comment">//: 0. Initialize all primitive variables in functions and constructors.</span>
-<span id="L64" class="LineNr"> 64 </span><span class="Comment">//:</span>
-<span id="L65" class="LineNr"> 65 </span><span class="Comment">//: 1. Minimize use of pointers and pointer arithmetic. Avoid 'new' and</span>
-<span id="L66" class="LineNr"> 66 </span><span class="Comment">//: 'delete' as far as possible. Rely on STL to perform memory management to</span>
-<span id="L67" class="LineNr"> 67 </span><span class="Comment">//: avoid use-after-free issues (and memory leaks).</span>
-<span id="L68" class="LineNr"> 68 </span><span class="Comment">//:</span>
-<span id="L69" class="LineNr"> 69 </span><span class="Comment">//: 2. Avoid naked arrays to avoid out-of-bounds access. Never use operator[]</span>
-<span id="L70" class="LineNr"> 70 </span><span class="Comment">//: except with map. Use at() with STL vectors and so on.</span>
-<span id="L71" class="LineNr"> 71 </span><span class="Comment">//:</span>
-<span id="L72" class="LineNr"> 72 </span><span class="Comment">//: 3. Valgrind all the things.</span>
-<span id="L73" class="LineNr"> 73 </span><span class="Comment">//:</span>
-<span id="L74" class="LineNr"> 74 </span><span class="Comment">//: 4. Avoid unsigned numbers. Not strictly an undefined-behavior issue, but</span>
-<span id="L75" class="LineNr"> 75 </span><span class="Comment">//: the extra range doesn't matter, and it's one less confusing category of</span>
-<span id="L76" class="LineNr"> 76 </span><span class="Comment">//: interaction gotchas to worry about.</span>
-<span id="L77" class="LineNr"> 77 </span><span class="Comment">//:</span>
-<span id="L78" class="LineNr"> 78 </span><span class="Comment">//: Corollary: don't use the size() method on containers, since it returns an</span>
-<span id="L79" class="LineNr"> 79 </span><span class="Comment">//: unsigned and that'll cause warnings about mixing signed and unsigned,</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Comment">//: yadda-yadda. Instead use this macro below to perform an unsafe cast to</span>
-<span id="L81" class="LineNr"> 81 </span><span class="Comment">//: signed. We'll just give up immediately if a container's ever too large.</span>
-<span id="L82" class="LineNr"> 82 </span><span class="Comment">//: Basically, Mu is not concerned about this being a little slower than it</span>
-<span id="L83" class="LineNr"> 83 </span><span class="Comment">//: could be. (<a href="https://gist.github.com/rygorous/e0f055bfb74e3d5f0af20690759de5a7">https://gist.github.com/rygorous/e0f055bfb74e3d5f0af20690759de5a7</a>)</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Comment">//:</span>
-<span id="L85" class="LineNr"> 85 </span><span class="Comment">//: Addendum to corollary: We're going to uniformly use int everywhere, to</span>
-<span id="L86" class="LineNr"> 86 </span><span class="Comment">//: indicate that we're oblivious to number size, and since Clang on 32-bit</span>
-<span id="L87" class="LineNr"> 87 </span><span class="Comment">//: platforms doesn't yet support multiplication over 64-bit integers, and</span>
-<span id="L88" class="LineNr"> 88 </span><span class="Comment">//: since multiplying two integers seems like a more common situation to end</span>
-<span id="L89" class="LineNr"> 89 </span><span class="Comment">//: up in than integer overflow.</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L91" class="LineNr"> 91 </span><span class="PreProc">#define SIZE(X) (assert((X)</span><span class="Delimiter">.</span><span class="PreProc">size() &lt; (</span><span class="Constant">1LL</span><span class="PreProc">&lt;&lt;(</span><span class="Normal">sizeof</span><span class="PreProc">(</span><span class="Normal">int</span><span class="PreProc">)*</span><span class="Constant">8</span><span class="PreProc">-</span><span class="Constant">2</span><span class="PreProc">)))</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Normal">static_cast</span><span class="PreProc">&lt;</span><span class="Normal">int</span><span class="PreProc">&gt;((X)</span><span class="Delimiter">.</span><span class="PreProc">size()))</span>
+<span id="L8" class="LineNr">  8 </span>  cerr &lt;&lt; get<span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;usage&quot;</span><span class="Delimiter">);</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Delimiter">}</span>
+<span id="L11" class="LineNr"> 11 </span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment">//: Support for option parsing.</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Comment">//: Options always begin with '--' and are always the first arguments. An</span>
+<span id="L14" class="LineNr"> 14 </span><span class="Comment">//: option will never follow a non-option.</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Normal">char</span>** <a href='001help.cc.html#L15'>arg</a> = &amp;argv[<span class="Constant">1</span>]<span class="Delimiter">;</span>
+<span id="L16" class="LineNr"> 16 </span><span class="Normal">while</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span> &amp;&amp; <a href='001help.cc.html#L93'>starts_with</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L17" class="LineNr"> 17 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">)</span>
+<span id="L18" class="LineNr"> 18 </span>    <span class="Delimiter">;</span>  <span class="Comment">// no-op branch just so any further additions can consistently always start with 'else'</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Comment">// End Commandline Options(*arg)</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Normal">else</span>
+<span id="L21" class="LineNr"> 21 </span>    cerr &lt;&lt; <span class="Constant">&quot;skipping unknown option &quot;</span> &lt;&lt; *arg &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L22" class="LineNr"> 22 </span>  --argc<span class="Delimiter">;</span>  ++argv<span class="Delimiter">;</span>  ++arg<span class="Delimiter">;</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">}</span>
+<span id="L24" class="LineNr"> 24 </span>
+<span id="L25" class="LineNr"> 25 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;help&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>argc == <span class="Constant">2</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L27" class="LineNr"> 27 </span>    cerr &lt;&lt; <span class="Constant">&quot;help on what?</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L28" class="LineNr"> 28 </span>    <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">();</span>
+<span id="L29" class="LineNr"> 29 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Delimiter">}</span>
+<span id="L31" class="LineNr"> 31 </span>  string key<span class="Delimiter">(</span>argv[<span class="Constant">2</span>]<span class="Delimiter">);</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Comment">// End Help Special-cases(key)</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> key<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L34" class="LineNr"> 34 </span>    cerr &lt;&lt; get<span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> key<span class="Delimiter">);</span>
+<span id="L35" class="LineNr"> 35 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Delimiter">}</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L38" class="LineNr"> 38 </span>    cerr &lt;&lt; <span class="Constant">&quot;No help found for '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span>    <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>    cerr &lt;&lt; <span class="Constant">&quot;Please check your command for typos.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Delimiter">}</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Delimiter">}</span>
+<span id="L44" class="LineNr"> 44 </span>
+<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">:(code)</span>
+<span id="L46" class="LineNr"> 46 </span><span class="Normal">void</span> <a href='001help.cc.html#L46'>help_contents</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L47" class="LineNr"> 47 </span>  cerr &lt;&lt; <span class="Constant">&quot;Available top-level topics:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L48" class="LineNr"> 48 </span>  cerr &lt;&lt; <span class="Constant">&quot;  usage</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// End Help Contents</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span>
+<span id="L51" class="LineNr"> 51 </span>
+<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L53" class="LineNr"> 53 </span>map&lt;string<span class="Delimiter">,</span> string&gt; <a href='001help.cc.html#L53'>Help</a><span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Comment">#include &lt;map&gt;</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Normal">using</span> std::map<span class="Delimiter">;</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L58" class="LineNr"> 58 </span><a href='001help.cc.html#L60'>init_help</a><span class="Delimiter">();</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">:(code)</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Normal">void</span> <a href='001help.cc.html#L60'>init_help</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L61" class="LineNr"> 61 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;usage&quot;</span><span class="Delimiter">,</span>
+<span id="L62" class="LineNr"> 62 </span>    <span class="Constant">&quot;Welcome to SubX, a better way to <a href='011run.cc.html#L94'>program</a> in machine code.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L63" class="LineNr"> 63 </span>    <span class="Constant">&quot;SubX uses a subset of the x86 instruction set. SubX programs will <a href='011run.cc.html#L78'>run</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L64" class="LineNr"> 64 </span>    <span class="Constant">&quot;without modification on Linux computers.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L65" class="LineNr"> 65 </span>    <span class="Constant">&quot;It provides a better experience and better error messages than</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L66" class="LineNr"> 66 </span>    <span class="Constant">&quot;programming directly in machine code, but you have to stick to the</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L67" class="LineNr"> 67 </span>    <span class="Constant">&quot;instructions it supports.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L68" class="LineNr"> 68 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L69" class="LineNr"> 69 </span>    <span class="Constant">&quot;== Ways to invoke subx</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L70" class="LineNr"> 70 </span>    <span class="Constant">&quot;- Run tests:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L71" class="LineNr"> 71 </span>    <span class="Constant">&quot;    subx test</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L72" class="LineNr"> 72 </span>    <span class="Constant">&quot;- See this message:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L73" class="LineNr"> 73 </span>    <span class="Constant">&quot;    subx --help</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L74" class="LineNr"> 74 </span>    <span class="Constant">&quot;- Convert a textual SubX <a href='011run.cc.html#L94'>program</a> into a standard ELF binary that you can</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L75" class="LineNr"> 75 </span>    <span class="Constant">&quot;  <a href='011run.cc.html#L78'>run</a> on your computer:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L76" class="LineNr"> 76 </span>    <span class="Constant">&quot;    subx translate &lt;input 'source' file&gt; &lt;output ELF binary&gt;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L77" class="LineNr"> 77 </span>    <span class="Constant">&quot;- Run a SubX binary using SubX itself (for better error messages):</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L78" class="LineNr"> 78 </span>    <span class="Constant">&quot;    subx <a href='011run.cc.html#L78'>run</a> &lt;ELF binary&gt;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L79" class="LineNr"> 79 </span>    <span class="Constant">&quot;Add '--trace' to any of these commands to also emit a <a href='003trace.cc.html#L189'>trace</a>, for debugging purposes.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L80" class="LineNr"> 80 </span>    <span class="Constant">&quot;However, options starting with '--' must always come before any other arguments.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L81" class="LineNr"> 81 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L82" class="LineNr"> 82 </span>    <span class="Constant">&quot;To <a href='011run.cc.html#L103'>start</a> learning how to write SubX programs, <a href='011run.cc.html#L78'>run</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L83" class="LineNr"> 83 </span>    <span class="Constant">&quot;  subx help</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Delimiter">);</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Comment">// End Help Texts</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="Delimiter">:(code)</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Normal">bool</span> <a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span><span class="Normal">char</span>* s<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span>* lit<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">return</span> strncmp<span class="Delimiter">(</span>s<span class="Delimiter">,</span> lit<span class="Delimiter">,</span> strlen<span class="Delimiter">(</span>lit<span class="Delimiter">))</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">}</span>
 <span id="L92" class="LineNr"> 92 </span>
-<span id="L93" class="LineNr"> 93 </span><span class="Comment">//: 5. Integer overflow is guarded against at runtime using the -ftrapv flag</span>
-<span id="L94" class="LineNr"> 94 </span><span class="Comment">//: to the compiler, supported by Clang (GCC version only works sometimes:</span>
-<span id="L95" class="LineNr"> 95 </span><span class="Comment">//: <a href="http://stackoverflow.com/questions/20851061/how-to-make-gcc-ftrapv-work">http://stackoverflow.com/questions/20851061/how-to-make-gcc-ftrapv-work</a>).</span>
-<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(before &quot;atexit(reset)&quot;)</span>
-<span id="L97" class="LineNr"> 97 </span><a href='001help.cc.html#L102'>initialize_signal_handlers</a><span class="Delimiter">();</span>  <span class="Comment">// not always necessary, but doesn't hurt</span>
-<span id="L98" class="LineNr"> 98 </span><span class="CommentedCode">//? cerr &lt;&lt; INT_MAX+1 &lt;&lt; '\n';  // test overflow</span>
-<span id="L99" class="LineNr"> 99 </span><span class="CommentedCode">//? assert(false);  // test SIGABRT</span>
-<span id="L100" class="LineNr">100 </span><span class="Delimiter">:(code)</span>
-<span id="L101" class="LineNr">101 </span><span class="Comment">// based on <a href="https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c">https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c</a></span>
-<span id="L102" class="LineNr">102 </span><span class="Normal">void</span> <a href='001help.cc.html#L102'>initialize_signal_handlers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>  <span class="Normal">struct</span> sigaction action<span class="Delimiter">;</span>
-<span id="L104" class="LineNr">104 </span>  bzero<span class="Delimiter">(</span>&amp;action<span class="Delimiter">,</span> <span class="Normal">sizeof</span><span class="Delimiter">(</span>action<span class="Delimiter">));</span>
-<span id="L105" class="LineNr">105 </span>  action<span class="Delimiter">.</span>sa_sigaction = <a href='001help.cc.html#L110'>dump_and_exit</a><span class="Delimiter">;</span>
-<span id="L106" class="LineNr">106 </span>  sigemptyset<span class="Delimiter">(</span>&amp;action<span class="Delimiter">.</span>sa_mask<span class="Delimiter">);</span>
-<span id="L107" class="LineNr">107 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGABRT</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// assert() failure or integer overflow on linux (with -ftrapv)</span>
-<span id="L108" class="LineNr">108 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGILL</span><span class="Delimiter">,</span>  &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// integer overflow on OS X (with -ftrapv)</span>
-<span id="L109" class="LineNr">109 </span><span class="Delimiter">}</span>
-<span id="L110" class="LineNr">110 </span><span class="Normal">void</span> <a href='001help.cc.html#L110'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> <a href='001help.cc.html#L208'>unused</a> siginfo_t* dummy1<span class="Delimiter">,</span> <a href='001help.cc.html#L208'>unused</a> <span class="Normal">void</span>* dummy2<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L112" class="LineNr">112 </span>    <span class="Normal">case</span> <span class="Constant">SIGABRT</span>:
-<span id="L113" class="LineNr">113 </span><span class="PreProc">      #ifndef __APPLE__</span>
-<span id="L114" class="LineNr">114 </span>        cerr &lt;&lt; <span class="Constant">&quot;SIGABRT: might be an integer overflow if it wasn't an assert() failure</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L115" class="LineNr">115 </span>        _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L116" class="LineNr">116 </span><span class="PreProc">      #endif</span>
-<span id="L117" class="LineNr">117 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>    <span class="Normal">case</span> <span class="Constant">SIGILL</span>:
-<span id="L119" class="LineNr">119 </span><span class="PreProc">      #ifdef __APPLE__</span>
-<span id="L120" class="LineNr">120 </span>        cerr &lt;&lt; <span class="Constant">&quot;SIGILL: most likely caused by integer overflow</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L121" class="LineNr">121 </span>        _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L122" class="LineNr">122 </span><span class="PreProc">      #endif</span>
-<span id="L123" class="LineNr">123 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L124" class="LineNr">124 </span>    <span class="Normal">default</span>:
-<span id="L125" class="LineNr">125 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L126" class="LineNr">126 </span>  <span class="Delimiter">}</span>
-<span id="L127" class="LineNr">127 </span><span class="Delimiter">}</span>
-<span id="L128" class="LineNr">128 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L129" class="LineNr">129 </span><span class="PreProc">#include </span><span class="Constant">&lt;signal.h&gt;</span>
-<span id="L130" class="LineNr">130 </span>
-<span id="L131" class="LineNr">131 </span><span class="Comment">//: For good measure we'll also enable SIGFPE.</span>
-<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;atexit(reset)&quot;)</span>
-<span id="L133" class="LineNr">133 </span><a href='001help.cc.html#L146'>feenableexcept</a><span class="Delimiter">(</span>FE_OVERFLOW | FE_UNDERFLOW<span class="Delimiter">);</span>
-<span id="L134" class="LineNr">134 </span><span class="CommentedCode">//? assert(sizeof(int) == 4 &amp;&amp; sizeof(float) == 4);</span>
-<span id="L135" class="LineNr">135 </span><span class="CommentedCode">//? //                          | exp   |  mantissa</span>
-<span id="L136" class="LineNr">136 </span><span class="CommentedCode">//? int smallest_subnormal = 0b00000000000000000000000000000001;</span>
-<span id="L137" class="LineNr">137 </span><span class="CommentedCode">//? float smallest_subnormal_f = *reinterpret_cast&lt;float*&gt;(&amp;smallest_subnormal);</span>
-<span id="L138" class="LineNr">138 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε: &quot; &lt;&lt; smallest_subnormal_f &lt;&lt; '\n';</span>
-<span id="L139" class="LineNr">139 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε/2: &quot; &lt;&lt; smallest_subnormal_f/2 &lt;&lt; &quot; (underflow)\n&quot;;  // test SIGFPE</span>
-<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L141" class="LineNr">141 </span><span class="PreProc">#include </span><span class="Constant">&lt;fenv.h&gt;</span>
-<span id="L142" class="LineNr">142 </span><span class="Delimiter">:(code)</span>
-<span id="L143" class="LineNr">143 </span><span class="PreProc">#ifdef __APPLE__</span>
-<span id="L144" class="LineNr">144 </span><span class="Comment">// Public domain polyfill for feenableexcept on OS X</span>
-<span id="L145" class="LineNr">145 </span><span class="Comment">// <a href="http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c">http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c</a></span>
-<span id="L146" class="LineNr">146 </span><span class="Normal">int</span> <a href='001help.cc.html#L146'>feenableexcept</a><span class="Delimiter">(</span><span class="Normal">unsigned</span> <span class="Normal">int</span> excepts<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </span>  <span class="Normal">static</span> fenv_t fenv<span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>  <span class="Normal">unsigned</span> <span class="Normal">int</span> new_excepts = excepts &amp; FE_ALL_EXCEPT<span class="Delimiter">;</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Normal">unsigned</span> <span class="Normal">int</span> old_excepts<span class="Delimiter">;</span>
-<span id="L150" class="LineNr">150 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fegetenv<span class="Delimiter">(</span>&amp;fenv<span class="Delimiter">))</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L151" class="LineNr">151 </span>  old_excepts = fenv<span class="Delimiter">.</span>__control &amp; FE_ALL_EXCEPT<span class="Delimiter">;</span>
-<span id="L152" class="LineNr">152 </span>  fenv<span class="Delimiter">.</span>__control &amp;= ~new_excepts<span class="Delimiter">;</span>
-<span id="L153" class="LineNr">153 </span>  fenv<span class="Delimiter">.</span>__mxcsr &amp;= ~<span class="Delimiter">(</span>new_excepts &lt;&lt; <span class="Constant">7</span><span class="Delimiter">);</span>
-<span id="L154" class="LineNr">154 </span>  <span class="Identifier">return</span> fesetenv<span class="Delimiter">(</span>&amp;fenv<span class="Delimiter">)</span> ? -<span class="Constant">1</span> : old_excepts<span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span><span class="Delimiter">}</span>
-<span id="L156" class="LineNr">156 </span><span class="PreProc">#endif</span>
-<span id="L157" class="LineNr">157 </span>
-<span id="L158" class="LineNr">158 </span><span class="Comment">//: 6. Map's operator[] being non-const is fucking evil.</span>
-<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>  <span class="Comment">// can't generate prototypes for these</span>
-<span id="L160" class="LineNr">160 </span><span class="Comment">// from <a href="http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map">http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map</a></span>
-<span id="L161" class="LineNr">161 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; get<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L162" class="LineNr">162 </span>  <span class="Normal">typename</span> T::iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
-<span id="L163" class="LineNr">163 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">());</span>
-<span id="L164" class="LineNr">164 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span><span class="Delimiter">}</span>
-<span id="L166" class="LineNr">166 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; get<span class="Delimiter">(</span><span class="Normal">const</span> T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L167" class="LineNr">167 </span>  <span class="Normal">typename</span> T::const_iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
-<span id="L168" class="LineNr">168 </span>  assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">());</span>
-<span id="L169" class="LineNr">169 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
-<span id="L170" class="LineNr">170 </span><span class="Delimiter">}</span>
-<span id="L171" class="LineNr">171 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; <a href='001help.cc.html#L171'>put</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L172" class="LineNr">172 </span>  map[key] = value<span class="Delimiter">;</span>
-<span id="L173" class="LineNr">173 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
-<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
-<span id="L175" class="LineNr">175 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> <a href='001help.cc.html#L175'>contains_key</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L176" class="LineNr">176 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
-<span id="L178" class="LineNr">178 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L178'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L179" class="LineNr">179 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
-<span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
-<span id="L181" class="LineNr">181 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
-<span id="L182" class="LineNr">182 </span><span class="Comment">//: contains_key.</span>
-<span id="L183" class="LineNr">183 </span>
-<span id="L184" class="LineNr">184 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
-<span id="L185" class="LineNr">185 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
-<span id="L186" class="LineNr">186 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
-<span id="L187" class="LineNr">187 </span><span class="Delimiter">:(code)</span>
-<span id="L188" class="LineNr">188 </span><span class="Normal">bool</span> <a href='001help.cc.html#L188'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L189" class="LineNr">189 </span>  <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
-<span id="L190" class="LineNr">190 </span><span class="Delimiter">}</span>
-<span id="L191" class="LineNr">191 </span>
-<span id="L192" class="LineNr">192 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L193" class="LineNr">193 </span><span class="PreProc">#include </span><span class="Constant">&lt;assert.h&gt;</span>
-<span id="L194" class="LineNr">194 </span>
-<span id="L195" class="LineNr">195 </span><span class="PreProc">#include </span><span class="Constant">&lt;iostream&gt;</span>
-<span id="L196" class="LineNr">196 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
-<span id="L197" class="LineNr">197 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
-<span id="L198" class="LineNr">198 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
-<span id="L199" class="LineNr">199 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
-<span id="L200" class="LineNr">200 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
-<span id="L201" class="LineNr">201 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
-<span id="L202" class="LineNr">202 </span><span class="PreProc">#include </span><span class="Constant">&lt;iomanip&gt;</span>
-<span id="L203" class="LineNr">203 </span>
-<span id="L204" class="LineNr">204 </span><span class="PreProc">#include </span><span class="Constant">&lt;string.h&gt;</span>
-<span id="L205" class="LineNr">205 </span><span class="PreProc">#include </span><span class="Constant">&lt;string&gt;</span>
-<span id="L206" class="LineNr">206 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
-<span id="L207" class="LineNr">207 </span>
-<span id="L208" class="LineNr">208 </span><span class="PreProc">#define unused  __attribute__((unused))</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Normal">bool</span> <a href='001help.cc.html#L93'>starts_with</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; pat<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L94" class="LineNr"> 94 </span>  string::const_iterator a=s<span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> b=pat<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  a!=s<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">()</span> &amp;&amp; b!=pat<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++a<span class="Delimiter">,</span> ++b<span class="Delimiter">)</span>
+<span id="L96" class="LineNr"> 96 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>*a != *b<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Identifier">return</span> b == pat<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span>
+<span id="L100" class="LineNr">100 </span><span class="Comment">//: I'll throw some style conventions here for want of a better place for them.</span>
+<span id="L101" class="LineNr">101 </span><span class="Comment">//: As a rule I hate style guides. Do what you want, that's my motto. But since</span>
+<span id="L102" class="LineNr">102 </span><span class="Comment">//: we're dealing with C/C++, the one big thing we want to avoid is undefined</span>
+<span id="L103" class="LineNr">103 </span><span class="Comment">//: behavior. If a compiler ever encounters undefined behavior it can make</span>
+<span id="L104" class="LineNr">104 </span><span class="Comment">//: your program do anything it wants.</span>
+<span id="L105" class="LineNr">105 </span><span class="Comment">//:</span>
+<span id="L106" class="LineNr">106 </span><span class="Comment">//: For reference, my checklist of undefined behaviors to watch out for:</span>
+<span id="L107" class="LineNr">107 </span><span class="Comment">//:   out-of-bounds access</span>
+<span id="L108" class="LineNr">108 </span><span class="Comment">//:   uninitialized variables</span>
+<span id="L109" class="LineNr">109 </span><span class="Comment">//:   use after free</span>
+<span id="L110" class="LineNr">110 </span><span class="Comment">//:   dereferencing invalid pointers: null, a new of size 0, others</span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">//:</span>
+<span id="L112" class="LineNr">112 </span><span class="Comment">//:   casting a large number to a type too small to hold it</span>
+<span id="L113" class="LineNr">113 </span><span class="Comment">//:</span>
+<span id="L114" class="LineNr">114 </span><span class="Comment">//:   integer overflow</span>
+<span id="L115" class="LineNr">115 </span><span class="Comment">//:   division by zero and other undefined expressions</span>
+<span id="L116" class="LineNr">116 </span><span class="Comment">//:   left-shift by negative count</span>
+<span id="L117" class="LineNr">117 </span><span class="Comment">//:   shifting values by more than or equal to the number of bits they contain</span>
+<span id="L118" class="LineNr">118 </span><span class="Comment">//:   bitwise operations on signed numbers</span>
+<span id="L119" class="LineNr">119 </span><span class="Comment">//:</span>
+<span id="L120" class="LineNr">120 </span><span class="Comment">//:   Converting pointers to types of different alignment requirements</span>
+<span id="L121" class="LineNr">121 </span><span class="Comment">//:     T* -&gt; void* -&gt; T*: defined</span>
+<span id="L122" class="LineNr">122 </span><span class="Comment">//:     T* -&gt; U* -&gt; T*: defined if non-function pointers and alignment requirements are same</span>
+<span id="L123" class="LineNr">123 </span><span class="Comment">//:     function pointers may be cast to other function pointers</span>
+<span id="L124" class="LineNr">124 </span><span class="Comment">//:</span>
+<span id="L125" class="LineNr">125 </span><span class="Comment">//:       Casting a numeric value into a value that can't be represented by the target type (either directly or via static_cast)</span>
+<span id="L126" class="LineNr">126 </span><span class="Comment">//:</span>
+<span id="L127" class="LineNr">127 </span><span class="Comment">//: To guard against these, some conventions:</span>
+<span id="L128" class="LineNr">128 </span><span class="Comment">//:</span>
+<span id="L129" class="LineNr">129 </span><span class="Comment">//: 0. Initialize all primitive variables in functions and constructors.</span>
+<span id="L130" class="LineNr">130 </span><span class="Comment">//:</span>
+<span id="L131" class="LineNr">131 </span><span class="Comment">//: 1. Minimize use of pointers and pointer arithmetic. Avoid 'new' and</span>
+<span id="L132" class="LineNr">132 </span><span class="Comment">//: 'delete' as far as possible. Rely on STL to perform memory management to</span>
+<span id="L133" class="LineNr">133 </span><span class="Comment">//: avoid use-after-free issues (and memory leaks).</span>
+<span id="L134" class="LineNr">134 </span><span class="Comment">//:</span>
+<span id="L135" class="LineNr">135 </span><span class="Comment">//: 2. Avoid naked arrays to avoid out-of-bounds access. Never use operator[]</span>
+<span id="L136" class="LineNr">136 </span><span class="Comment">//: except with map. Use at() with STL vectors and so on.</span>
+<span id="L137" class="LineNr">137 </span><span class="Comment">//:</span>
+<span id="L138" class="LineNr">138 </span><span class="Comment">//: 3. Valgrind all the things.</span>
+<span id="L139" class="LineNr">139 </span><span class="Comment">//:</span>
+<span id="L140" class="LineNr">140 </span><span class="Comment">//: 4. Avoid unsigned numbers. Not strictly an undefined-behavior issue, but</span>
+<span id="L141" class="LineNr">141 </span><span class="Comment">//: the extra range doesn't matter, and it's one less confusing category of</span>
+<span id="L142" class="LineNr">142 </span><span class="Comment">//: interaction gotchas to worry about.</span>
+<span id="L143" class="LineNr">143 </span><span class="Comment">//:</span>
+<span id="L144" class="LineNr">144 </span><span class="Comment">//: Corollary: don't use the size() method on containers, since it returns an</span>
+<span id="L145" class="LineNr">145 </span><span class="Comment">//: unsigned and that'll cause warnings about mixing signed and unsigned,</span>
+<span id="L146" class="LineNr">146 </span><span class="Comment">//: yadda-yadda. Instead use this macro below to perform an unsafe cast to</span>
+<span id="L147" class="LineNr">147 </span><span class="Comment">//: signed. We'll just give up immediately if a container's ever too large.</span>
+<span id="L148" class="LineNr">148 </span><span class="Comment">//: Basically, Mu is not concerned about this being a little slower than it</span>
+<span id="L149" class="LineNr">149 </span><span class="Comment">//: could be. (<a href="https://gist.github.com/rygorous/e0f055bfb74e3d5f0af20690759de5a7">https://gist.github.com/rygorous/e0f055bfb74e3d5f0af20690759de5a7</a>)</span>
+<span id="L150" class="LineNr">150 </span><span class="Comment">//:</span>
+<span id="L151" class="LineNr">151 </span><span class="Comment">//: Addendum to corollary: We're going to uniformly use int everywhere, to</span>
+<span id="L152" class="LineNr">152 </span><span class="Comment">//: indicate that we're oblivious to number size, and since Clang on 32-bit</span>
+<span id="L153" class="LineNr">153 </span><span class="Comment">//: platforms doesn't yet support multiplication over 64-bit integers, and</span>
+<span id="L154" class="LineNr">154 </span><span class="Comment">//: since multiplying two integers seems like a more common situation to end</span>
+<span id="L155" class="LineNr">155 </span><span class="Comment">//: up in than integer overflow.</span>
+<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L157" class="LineNr">157 </span><span class="Comment">#define SIZE(X) (assert((X).size() &lt; (1LL&lt;&lt;(sizeof(int)*8-2))), static_cast&lt;int&gt;((X).size()))</span>
+<span id="L158" class="LineNr">158 </span>
+<span id="L159" class="LineNr">159 </span><span class="Comment">//: 5. Integer overflow is guarded against at runtime using the -ftrapv flag</span>
+<span id="L160" class="LineNr">160 </span><span class="Comment">//: to the compiler, supported by Clang (GCC version only works sometimes:</span>
+<span id="L161" class="LineNr">161 </span><span class="Comment">//: <a href="http://stackoverflow.com/questions/20851061/how-to-make-gcc-ftrapv-work">http://stackoverflow.com/questions/20851061/how-to-make-gcc-ftrapv-work</a>).</span>
+<span id="L162" class="LineNr">162 </span><span class="Delimiter">:(before &quot;atexit(reset)&quot;)</span>
+<span id="L163" class="LineNr">163 </span><a href='001help.cc.html#L168'>initialize_signal_handlers</a><span class="Delimiter">();</span>  <span class="Comment">// not always necessary, but doesn't hurt</span>
+<span id="L164" class="LineNr">164 </span><span class="CommentedCode">//? cerr &lt;&lt; INT_MAX+1 &lt;&lt; '\n';  // test overflow</span>
+<span id="L165" class="LineNr">165 </span><span class="CommentedCode">//? assert(false);  // test SIGABRT</span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(code)</span>
+<span id="L167" class="LineNr">167 </span><span class="Comment">// based on <a href="https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c">https://spin.atomicobject.com/2013/01/13/exceptions-stack-traces-c</a></span>
+<span id="L168" class="LineNr">168 </span><span class="Normal">void</span> <a href='001help.cc.html#L168'>initialize_signal_handlers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Normal">struct</span> sigaction action<span class="Delimiter">;</span>
+<span id="L170" class="LineNr">170 </span>  bzero<span class="Delimiter">(</span>&amp;action<span class="Delimiter">,</span> <span class="Normal">sizeof</span><span class="Delimiter">(</span>action<span class="Delimiter">));</span>
+<span id="L171" class="LineNr">171 </span>  action<span class="Delimiter">.</span>sa_sigaction = <a href='001help.cc.html#L176'>dump_and_exit</a><span class="Delimiter">;</span>
+<span id="L172" class="LineNr">172 </span>  sigemptyset<span class="Delimiter">(</span>&amp;action<span class="Delimiter">.</span>sa_mask<span class="Delimiter">);</span>
+<span id="L173" class="LineNr">173 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGABRT</span><span class="Delimiter">,</span> &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// assert() failure or integer overflow on linux (with -ftrapv)</span>
+<span id="L174" class="LineNr">174 </span>  sigaction<span class="Delimiter">(</span><span class="Constant">SIGILL</span><span class="Delimiter">,</span>  &amp;action<span class="Delimiter">,</span> <span class="Constant">NULL</span><span class="Delimiter">);</span>  <span class="Comment">// integer overflow on OS X (with -ftrapv)</span>
+<span id="L175" class="LineNr">175 </span><span class="Delimiter">}</span>
+<span id="L176" class="LineNr">176 </span><span class="Normal">void</span> <a href='001help.cc.html#L176'>dump_and_exit</a><span class="Delimiter">(</span><span class="Normal">int</span> sig<span class="Delimiter">,</span> siginfo_t* <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">,</span> <span class="Normal">void</span>* <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>sig<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L178" class="LineNr">178 </span>    <span class="Normal">case</span> <span class="Constant">SIGABRT</span>:
+<span id="L179" class="LineNr">179 </span><span class="PreProc">      #ifndef __APPLE__</span>
+<span id="L180" class="LineNr">180 </span>        cerr &lt;&lt; <span class="Constant">&quot;SIGABRT: might be an integer overflow if it wasn't an assert() failure</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L181" class="LineNr">181 </span>        _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L182" class="LineNr">182 </span><span class="PreProc">      #endif</span>
+<span id="L183" class="LineNr">183 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L184" class="LineNr">184 </span>    <span class="Normal">case</span> <span class="Constant">SIGILL</span>:
+<span id="L185" class="LineNr">185 </span><span class="PreProc">      #ifdef __APPLE__</span>
+<span id="L186" class="LineNr">186 </span>        cerr &lt;&lt; <span class="Constant">&quot;SIGILL: most likely caused by integer overflow</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L187" class="LineNr">187 </span>        _Exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L188" class="LineNr">188 </span><span class="PreProc">      #endif</span>
+<span id="L189" class="LineNr">189 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L190" class="LineNr">190 </span>    <span class="Normal">default</span>:
+<span id="L191" class="LineNr">191 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Delimiter">}</span>
+<span id="L193" class="LineNr">193 </span><span class="Delimiter">}</span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L195" class="LineNr">195 </span><span class="Comment">#include &lt;signal.h&gt;</span>
+<span id="L196" class="LineNr">196 </span>
+<span id="L197" class="LineNr">197 </span><span class="Comment">//: For good measure we'll also enable SIGFPE.</span>
+<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(before &quot;atexit(reset)&quot;)</span>
+<span id="L199" class="LineNr">199 </span><a href='001help.cc.html#L212'>feenableexcept</a><span class="Delimiter">(</span>FE_OVERFLOW | FE_UNDERFLOW<span class="Delimiter">);</span>
+<span id="L200" class="LineNr">200 </span><span class="CommentedCode">//? assert(sizeof(int) == 4 &amp;&amp; sizeof(float) == 4);</span>
+<span id="L201" class="LineNr">201 </span><span class="CommentedCode">//? //                          | exp   |  mantissa</span>
+<span id="L202" class="LineNr">202 </span><span class="CommentedCode">//? int smallest_subnormal = 0b00000000000000000000000000000001;</span>
+<span id="L203" class="LineNr">203 </span><span class="CommentedCode">//? float smallest_subnormal_f = *reinterpret_cast&lt;float*&gt;(&amp;smallest_subnormal);</span>
+<span id="L204" class="LineNr">204 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε: &quot; &lt;&lt; smallest_subnormal_f &lt;&lt; '\n';</span>
+<span id="L205" class="LineNr">205 </span><span class="CommentedCode">//? cerr &lt;&lt; &quot;ε/2: &quot; &lt;&lt; smallest_subnormal_f/2 &lt;&lt; &quot; (underflow)\n&quot;;  // test SIGFPE</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L207" class="LineNr">207 </span><span class="Comment">#include &lt;fenv.h&gt;</span>
+<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(code)</span>
+<span id="L209" class="LineNr">209 </span><span class="Comment">#ifdef __APPLE__</span>
+<span id="L210" class="LineNr">210 </span><span class="Comment">// Public domain polyfill for feenableexcept on OS X</span>
+<span id="L211" class="LineNr">211 </span><span class="Comment">// <a href="http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c">http://www-personal.umich.edu/~williams/archive/computation/fe-handling-example.c</a></span>
+<span id="L212" class="LineNr">212 </span><span class="Normal">int</span> <a href='001help.cc.html#L212'>feenableexcept</a><span class="Delimiter">(</span><span class="Normal">unsigned</span> <span class="Normal">int</span> excepts<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Normal">static</span> fenv_t fenv<span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">unsigned</span> <span class="Normal">int</span> new_excepts = excepts &amp; FE_ALL_EXCEPT<span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Normal">unsigned</span> <span class="Normal">int</span> old_excepts<span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fegetenv<span class="Delimiter">(</span>&amp;fenv<span class="Delimiter">))</span> <span class="Identifier">return</span> -<span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span>  old_excepts = fenv<span class="Delimiter">.</span>__control &amp; FE_ALL_EXCEPT<span class="Delimiter">;</span>
+<span id="L218" class="LineNr">218 </span>  fenv<span class="Delimiter">.</span>__control &amp;= ~new_excepts<span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  fenv<span class="Delimiter">.</span>__mxcsr &amp;= ~<span class="Delimiter">(</span>new_excepts &lt;&lt; <span class="Constant">7</span><span class="Delimiter">);</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Identifier">return</span> fesetenv<span class="Delimiter">(</span>&amp;fenv<span class="Delimiter">)</span> ? -<span class="Constant">1</span> : old_excepts<span class="Delimiter">;</span>
+<span id="L221" class="LineNr">221 </span><span class="Delimiter">}</span>
+<span id="L222" class="LineNr">222 </span><span class="Comment">#endif</span>
+<span id="L223" class="LineNr">223 </span>
+<span id="L224" class="LineNr">224 </span><span class="Comment">//: 6. Map's operator[] being non-const is fucking evil.</span>
+<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>  <span class="Comment">// can't generate prototypes for these</span>
+<span id="L226" class="LineNr">226 </span><span class="Comment">// from <a href="http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map">http://stackoverflow.com/questions/152643/idiomatic-c-for-reading-from-a-const-map</a></span>
+<span id="L227" class="LineNr">227 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; get<span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L228" class="LineNr">228 </span>  <span class="Normal">typename</span> T::iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>iter == map<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L230" class="LineNr">230 </span>    cerr &lt;&lt; <span class="Constant">&quot;get couldn't find key '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L231" class="LineNr">231 </span>    assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">());</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Delimiter">}</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span><span class="Delimiter">}</span>
+<span id="L235" class="LineNr">235 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; get<span class="Delimiter">(</span><span class="Normal">const</span> T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Normal">typename</span> T::const_iterator iter<span class="Delimiter">(</span>map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">));</span>
+<span id="L237" class="LineNr">237 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>iter == map<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L238" class="LineNr">238 </span>    cerr &lt;&lt; <span class="Constant">&quot;get couldn't find key '&quot;</span> &lt;&lt; key &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L239" class="LineNr">239 </span>    assert<span class="Delimiter">(</span>iter != map<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">());</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Delimiter">}</span>
+<span id="L241" class="LineNr">241 </span>  <span class="Identifier">return</span> iter<span class="Delimiter">-&gt;</span>second<span class="Delimiter">;</span>
+<span id="L242" class="LineNr">242 </span><span class="Delimiter">}</span>
+<span id="L243" class="LineNr">243 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">,</span> <span class="Normal">typename</span> T::mapped_type <span class="Normal">const</span>&amp; value<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L244" class="LineNr">244 </span>  map[key] = value<span class="Delimiter">;</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
+<span id="L246" class="LineNr">246 </span><span class="Delimiter">}</span>
+<span id="L247" class="LineNr">247 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">bool</span> <a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Identifier">return</span> map<span class="Delimiter">.</span>find<span class="Delimiter">(</span>key<span class="Delimiter">)</span> != map<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L249" class="LineNr">249 </span><span class="Delimiter">}</span>
+<span id="L250" class="LineNr">250 </span><span class="Normal">template</span>&lt;<span class="Normal">typename</span> T&gt; <span class="Normal">typename</span> T::mapped_type&amp; <a href='001help.cc.html#L250'>get_or_insert</a><span class="Delimiter">(</span>T&amp; map<span class="Delimiter">,</span> <span class="Normal">typename</span> T::key_type <span class="Normal">const</span>&amp; key<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Identifier">return</span> map[key]<span class="Delimiter">;</span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">}</span>
+<span id="L253" class="LineNr">253 </span><span class="Comment">//: The contract: any container that relies on get_or_insert should never call</span>
+<span id="L254" class="LineNr">254 </span><span class="Comment">//: contains_key.</span>
+<span id="L255" class="LineNr">255 </span>
+<span id="L256" class="LineNr">256 </span><span class="Comment">//: 7. istreams are a royal pain in the arse. You have to be careful about</span>
+<span id="L257" class="LineNr">257 </span><span class="Comment">//: what subclass you try to putback into. You have to watch out for the pesky</span>
+<span id="L258" class="LineNr">258 </span><span class="Comment">//: failbit and badbit. Just avoid eof() and use this helper instead.</span>
+<span id="L259" class="LineNr">259 </span><span class="Delimiter">:(code)</span>
+<span id="L260" class="LineNr">260 </span><span class="Normal">bool</span> <a href='001help.cc.html#L260'>has_data</a><span class="Delimiter">(</span>istream&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L261" class="LineNr">261 </span>  <span class="Identifier">return</span> in &amp;&amp; !in<span class="Delimiter">.</span>eof<span class="Delimiter">();</span>
+<span id="L262" class="LineNr">262 </span><span class="Delimiter">}</span>
+<span id="L263" class="LineNr">263 </span>
+<span id="L264" class="LineNr">264 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L265" class="LineNr">265 </span><span class="Comment">#include &lt;assert.h&gt;</span>
+<span id="L266" class="LineNr">266 </span>
+<span id="L267" class="LineNr">267 </span><span class="Comment">#include &lt;iostream&gt;</span>
+<span id="L268" class="LineNr">268 </span><span class="Normal">using</span> std::istream<span class="Delimiter">;</span>
+<span id="L269" class="LineNr">269 </span><span class="Normal">using</span> std::ostream<span class="Delimiter">;</span>
+<span id="L270" class="LineNr">270 </span><span class="Normal">using</span> std::iostream<span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span><span class="Normal">using</span> std::cin<span class="Delimiter">;</span>
+<span id="L272" class="LineNr">272 </span><span class="Normal">using</span> std::cout<span class="Delimiter">;</span>
+<span id="L273" class="LineNr">273 </span><span class="Normal">using</span> std::cerr<span class="Delimiter">;</span>
+<span id="L274" class="LineNr">274 </span><span class="Comment">#include &lt;iomanip&gt;</span>
+<span id="L275" class="LineNr">275 </span>
+<span id="L276" class="LineNr">276 </span><span class="Comment">#include &lt;string.h&gt;</span>
+<span id="L277" class="LineNr">277 </span><span class="Comment">#include &lt;string&gt;</span>
+<span id="L278" class="LineNr">278 </span><span class="Normal">using</span> std::string<span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span>
+<span id="L280" class="LineNr">280 </span><span class="Comment">#include &lt;algorithm&gt;</span>
+<span id="L281" class="LineNr">281 </span><span class="Normal">using</span> std::min<span class="Delimiter">;</span>
+<span id="L282" class="LineNr">282 </span><span class="Normal">using</span> std::max<span class="Delimiter">;</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/002test.cc.html b/html/subx/002test.cc.html
index 59ee6642..89d83fe0 100644
--- a/html/subx/002test.cc.html
+++ b/html/subx/002test.cc.html
@@ -59,92 +59,117 @@ if ('onhashchange' in window) {
 </head>
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
-<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: A simple test harness. To create new tests, define functions starting with</span>
-<span id="L2" class="LineNr"> 2 </span><span class="Comment">//: 'test_'. To run all tests so defined, run:</span>
-<span id="L3" class="LineNr"> 3 </span><span class="Comment">//:   $ ./mu test</span>
-<span id="L4" class="LineNr"> 4 </span><span class="Comment">//:</span>
-<span id="L5" class="LineNr"> 5 </span><span class="Comment">//: Every layer should include tests, and can reach into previous layers.</span>
-<span id="L6" class="LineNr"> 6 </span><span class="Comment">//: However, it seems like a good idea never to reach into tests from previous</span>
-<span id="L7" class="LineNr"> 7 </span><span class="Comment">//: layers. Every test should be a contract that always passes as originally</span>
-<span id="L8" class="LineNr"> 8 </span><span class="Comment">//: written, regardless of any later layers. Avoid writing 'temporary' tests</span>
-<span id="L9" class="LineNr"> 9 </span><span class="Comment">//: that are only meant to work until some layer.</span>
-<span id="L10" class="LineNr">10 </span>
-<span id="L11" class="LineNr">11 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L12" class="LineNr">12 </span><span class="Normal">typedef</span> <span class="Normal">void</span> <span class="Delimiter">(</span>*test_fn<span class="Delimiter">)(</span><span class="Normal">void</span><span class="Delimiter">);</span>
-<span id="L13" class="LineNr">13 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
-<span id="L14" class="LineNr">14 </span><span class="Comment">// move a global ahead into types that we can't generate an extern declaration for</span>
-<span id="L15" class="LineNr">15 </span><span class="Normal">const</span> <a href='002test.cc.html#L12'>test_fn</a> Tests[] = <span class="Delimiter">{</span>
-<span id="L16" class="LineNr">16 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_list&quot;</span>  <span class="Comment">// auto-generated; see 'build' script</span>
-<span id="L17" class="LineNr">17 </span><span class="Delimiter">};</span>
-<span id="L18" class="LineNr">18 </span>
-<span id="L19" class="LineNr">19 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L20" class="LineNr">20 </span><span class="Normal">bool</span> <a href='002test.cc.html#L20'>Run_tests</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L21" class="LineNr">21 </span><span class="Normal">bool</span> <a href='002test.cc.html#L21'>Passed</a> = <span class="Constant">true</span><span class="Delimiter">;</span>  <span class="Comment">// set this to false inside any test to indicate failure</span>
-<span id="L22" class="LineNr">22 </span>
-<span id="L23" class="LineNr">23 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L24" class="LineNr">24 </span><span class="PreProc">#define CHECK(X) \</span>
-<span id="L25" class="LineNr">25 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; !(X)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L26" class="LineNr">26 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): &quot;</span><span class="PreProc"> &lt;&lt; #X &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L27" class="LineNr">27 </span><span class="PreProc">    <a href='002test.cc.html#L21'>Passed</a> = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L28" class="LineNr">28 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L29" class="LineNr">29 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L30" class="LineNr">30 </span>
-<span id="L31" class="LineNr">31 </span><span class="PreProc">#define CHECK_EQ(X</span><span class="Delimiter">,</span><span class="PreProc"> Y) \</span>
-<span id="L32" class="LineNr">32 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; (X) != (Y)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L33" class="LineNr">33 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): &quot;</span><span class="PreProc"> &lt;&lt; #X &lt;&lt; </span><span class="Constant">&quot; == &quot;</span><span class="PreProc"> &lt;&lt; #Y &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L34" class="LineNr">34 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;  got &quot;</span><span class="PreProc"> &lt;&lt; (X) &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> BEWARE: multiple eval </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L35" class="LineNr">35 </span><span class="PreProc">    <a href='002test.cc.html#L21'>Passed</a> = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L36" class="LineNr">36 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L37" class="LineNr">37 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L38" class="LineNr">38 </span>
-<span id="L39" class="LineNr">39 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L40" class="LineNr">40 </span><a href='002test.cc.html#L21'>Passed</a> = <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L41" class="LineNr">41 </span>
-<span id="L42" class="LineNr">42 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
-<span id="L43" class="LineNr">43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span> &amp;&amp; <a href='001help.cc.html#L23'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;test&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L44" class="LineNr">44 </span>  <a href='002test.cc.html#L20'>Run_tests</a> = <span class="Constant">true</span><span class="Delimiter">;</span>  --argc<span class="Delimiter">;</span>  ++argv<span class="Delimiter">;</span>  <span class="Comment">// shift 'test' out of commandline args</span>
-<span id="L45" class="LineNr">45 </span><span class="Delimiter">}</span>
-<span id="L46" class="LineNr">46 </span>
-<span id="L47" class="LineNr">47 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
-<span id="L48" class="LineNr">48 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L20'>Run_tests</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr">49 </span>  <span class="Comment">// Test Runs</span>
-<span id="L50" class="LineNr">50 </span>  <span class="Comment">// we run some tests and then exit; assume no state need be maintained afterward</span>
-<span id="L51" class="LineNr">51 </span>
-<span id="L52" class="LineNr">52 </span>  <span class="Normal">long</span> num_failures = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L53" class="LineNr">53 </span>  <span class="Comment">// End Test Run Initialization</span>
-<span id="L54" class="LineNr">54 </span>  <span class="Normal">time_t</span> t<span class="Delimiter">;</span>  time<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
-<span id="L55" class="LineNr">55 </span>  cerr &lt;&lt; <span class="Constant">&quot;C tests: &quot;</span> &lt;&lt; ctime<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
-<span id="L56" class="LineNr">56 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='002test.cc.html#L15'>Tests</a><span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L57" class="LineNr">57 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;running .build/test_list line &quot; &lt;&lt; (i+1) &lt;&lt; '\n';</span>
-<span id="L58" class="LineNr">58 </span>    <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
-<span id="L59" class="LineNr">59 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
-<span id="L60" class="LineNr">60 </span>    <span class="Normal">else</span> ++num_failures<span class="Delimiter">;</span>
-<span id="L61" class="LineNr">61 </span>  <span class="Delimiter">}</span>
-<span id="L62" class="LineNr">62 </span>  cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L63" class="LineNr">63 </span>  <span class="Comment">// End Tests</span>
-<span id="L64" class="LineNr">64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L65" class="LineNr">65 </span>    cerr &lt;&lt; num_failures &lt;&lt; <span class="Constant">&quot; failure&quot;</span>
-<span id="L66" class="LineNr">66 </span>         &lt;&lt; <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">1</span> ? <span class="Constant">&quot;s&quot;</span> : <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span>
-<span id="L67" class="LineNr">67 </span>         &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L68" class="LineNr">68 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
-<span id="L69" class="LineNr">69 </span>  <span class="Delimiter">}</span>
-<span id="L70" class="LineNr">70 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><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="Delimiter">:(code)</span>
-<span id="L74" class="LineNr">74 </span><span class="Normal">void</span> <a href='002test.cc.html#L74'>run_test</a><span class="Delimiter">(</span><span class="Normal">size_t</span> i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L75" class="LineNr">75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='002test.cc.html#L15'>Tests</a><span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr">76 </span>    cerr &lt;&lt; <span class="Constant">&quot;no test &quot;</span> &lt;&lt; i &lt;&lt; <span class="cSpecial">'\n'</span><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>  <a href='000organization.cc.html#L139'>reset</a><span class="Delimiter">();</span>
-<span id="L80" class="LineNr">80 </span>  <span class="Comment">// End Test Setup</span>
-<span id="L81" class="LineNr">81 </span>  <span class="Delimiter">(</span>*Tests[i]<span class="Delimiter">)();</span>
-<span id="L82" class="LineNr">82 </span>  <span class="Comment">// End Test Teardown</span>
-<span id="L83" class="LineNr">83 </span><span class="Delimiter">}</span>
-<span id="L84" class="LineNr">84 </span>
-<span id="L85" class="LineNr">85 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L86" class="LineNr">86 </span><span class="PreProc">#include </span><span class="Constant">&lt;stdlib.h&gt;</span>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: A simple test harness. To create new tests, define functions starting with</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: 'test_'. To run all tests so defined, run:</span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//:   $ ./mu test</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//:</span>
+<span id="L5" class="LineNr">  5 </span><span class="Comment">//: Every layer should include tests, and can reach into previous layers.</span>
+<span id="L6" class="LineNr">  6 </span><span class="Comment">//: However, it seems like a good idea never to reach into tests from previous</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment">//: layers. Every test should be a contract that always passes as originally</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">//: written, regardless of any later layers. Avoid writing 'temporary' tests</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment">//: that are only meant to work until some layer.</span>
+<span id="L10" class="LineNr"> 10 </span>
+<span id="L11" class="LineNr"> 11 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Normal">typedef</span> <span class="Normal">void</span> <span class="Delimiter">(</span>*test_fn<span class="Delimiter">)(</span><span class="Normal">void</span><span class="Delimiter">);</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
+<span id="L14" class="LineNr"> 14 </span><span class="Comment">// move a global ahead into types that we can't generate an extern declaration for</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Normal">const</span> <a href='002test.cc.html#L12'>test_fn</a> Tests[] = <span class="Delimiter">{</span>
+<span id="L16" class="LineNr"> 16 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_list&quot;</span>  <span class="Comment">// auto-generated; see 'build*' scripts</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">};</span>
+<span id="L18" class="LineNr"> 18 </span>
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Normal">bool</span> <a href='002test.cc.html#L20'>Run_tests</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Normal">bool</span> <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> true</span><span class="Delimiter">;</span>  <span class="Comment">// set this to false inside any test to indicate failure</span>
+<span id="L22" class="LineNr"> 22 </span>
+<span id="L23" class="LineNr"> 23 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">#define CHECK(X) \</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; !<span class="Delimiter">(</span>X<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L26" class="LineNr"> 26 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): &quot;</span> &lt;&lt; <span class="Comment">#X &lt;&lt; '\n'; \</span>
+<span id="L27" class="LineNr"> 27 </span>    <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L28" class="LineNr"> 28 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L29" class="LineNr"> 29 </span>  <span class="Delimiter">}</span>
+<span id="L30" class="LineNr"> 30 </span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment">#define CHECK_EQ(X, Y) \</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; <span class="Delimiter">(</span>X<span class="Delimiter">)</span> != <span class="Delimiter">(</span>Y<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L33" class="LineNr"> 33 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): &quot;</span> &lt;&lt; <span class="Comment">#X &lt;&lt; &quot; == &quot; &lt;&lt; #Y &lt;&lt; '\n'; \</span>
+<span id="L34" class="LineNr"> 34 </span>    cerr &lt;&lt; <span class="Constant">&quot;  got &quot;</span> &lt;&lt; <span class="Delimiter">(</span>X<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> BEWARE: multiple eval </span><span class="Comment">*/</span> \
+<span id="L35" class="LineNr"> 35 </span>    <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L36" class="LineNr"> 36 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L37" class="LineNr"> 37 </span>  <span class="Delimiter">}</span>
+<span id="L38" class="LineNr"> 38 </span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L40" class="LineNr"> 40 </span><a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>
+<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Normal">if</span> <span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span> &amp;&amp; <a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;test&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L44" class="LineNr"> 44 </span>  <a href='002test.cc.html#L20'>Run_tests</a> =<span class="Constant"> true</span><span class="Delimiter">;</span>  --argc<span class="Delimiter">;</span>  ++argv<span class="Delimiter">;</span>  <span class="Comment">// shift 'test' out of commandline args</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L20'>Run_tests</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Comment">// Test Runs</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Comment">// we run some tests and then exit; assume no state need be maintained afterward</span>
+<span id="L51" class="LineNr"> 51 </span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">long</span> num_failures = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Comment">// End Test Run Initialization</span>
+<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">time_t</span> t<span class="Delimiter">;</span>  time<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
+<span id="L55" class="LineNr"> 55 </span>  cerr &lt;&lt; <span class="Constant">&quot;C tests: &quot;</span> &lt;&lt; ctime<span class="Delimiter">(</span>&amp;t<span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='002test.cc.html#L15'>Tests</a><span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L57" class="LineNr"> 57 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;running &quot; &lt;&lt; Test_names[i] &lt;&lt; '\n';</span>
+<span id="L58" class="LineNr"> 58 </span>    <a href='002test.cc.html#L81'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L59" class="LineNr"> 59 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">'.'</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span>    <span class="Normal">else</span> ++num_failures<span class="Delimiter">;</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr"> 62 </span>  cerr &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// End Tests</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L65" class="LineNr"> 65 </span>    cerr &lt;&lt; num_failures &lt;&lt; <span class="Constant">&quot; failure&quot;</span>
+<span id="L66" class="LineNr"> 66 </span>         &lt;&lt; <span class="Delimiter">(</span>num_failures &gt; <span class="Constant">1</span> ? <span class="Constant">&quot;s&quot;</span> : <span class="Constant">&quot;&quot;</span><span class="Delimiter">)</span>
+<span id="L67" class="LineNr"> 67 </span>         &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L68" class="LineNr"> 68 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Delimiter">}</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><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="Delimiter">:(after &quot;End Main&quot;)</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Comment">//: Raise other unrecognized sub-commands as errors.</span>
+<span id="L75" class="LineNr"> 75 </span><span class="Comment">//: We couldn't do this until now because we want `./subx test` to always</span>
+<span id="L76" class="LineNr"> 76 </span><span class="Comment">//: succeed, no matter how many layers are included in the build.</span>
+<span id="L77" class="LineNr"> 77 </span>cerr &lt;&lt; <span class="Constant">&quot;nothing to do</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L79" class="LineNr"> 79 </span>
+<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(code)</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Normal">void</span> <a href='002test.cc.html#L81'>run_test</a><span class="Delimiter">(</span><span class="Normal">size_t</span> i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt;= <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='002test.cc.html#L15'>Tests</a><span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L83" class="LineNr"> 83 </span>    cerr &lt;&lt; <span class="Constant">&quot;no test &quot;</span> &lt;&lt; i &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Delimiter">}</span>
+<span id="L86" class="LineNr"> 86 </span>  <a href='000organization.cc.html#L148'>reset</a><span class="Delimiter">();</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Comment">// End Test Setup</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Delimiter">(</span>*Tests[i]<span class="Delimiter">)();</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Comment">// End Test Teardown</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">}</span>
+<span id="L91" class="LineNr"> 91 </span>
+<span id="L92" class="LineNr"> 92 </span><span class="Comment">//: Convenience: run a single test</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(before &quot;Globals&quot;)</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Comment">// Names for each element of the 'Tests' global, respectively.</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Normal">const</span> string Test_names[] = <span class="Delimiter">{</span>
+<span id="L96" class="LineNr"> 96 </span><span class="PreProc">  #include </span><span class="Constant">&quot;test_name_list&quot;</span>  <span class="Comment">// auto-generated; see 'build*' scripts</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">};</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(after &quot;Test Runs&quot;)</span>
+<span id="L99" class="LineNr"> 99 </span>string <a href='002test.cc.html#L99'>maybe_single_test_to_run</a> = argv[argc-<span class="Constant">1</span>]<span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span><span class="Normal">if</span> <span class="Delimiter">(</span>!starts_with<span class="Delimiter">(</span><a href='002test.cc.html#L99'>maybe_single_test_to_run</a><span class="Delimiter">,</span> <span class="Constant">&quot;test_&quot;</span><span class="Delimiter">))</span>
+<span id="L101" class="LineNr">101 </span>  <a href='002test.cc.html#L99'>maybe_single_test_to_run</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">&quot;test_&quot;</span><span class="Delimiter">);</span>
+<span id="L102" class="LineNr">102 </span><span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i=<span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='002test.cc.html#L15'>Tests</a><span class="Delimiter">)</span>/<span class="Normal">sizeof</span><span class="Delimiter">(</span>Tests[<span class="Constant">0</span>]<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>Test_names[i] == <a href='002test.cc.html#L99'>maybe_single_test_to_run</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L104" class="LineNr">104 </span>    <a href='002test.cc.html#L81'>run_test</a><span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L105" class="LineNr">105 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a><span class="Delimiter">)</span> cerr &lt;&lt; <span class="Constant">&quot;.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Delimiter">}</span>
+<span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">#include &lt;stdlib.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/003trace.cc.html b/html/subx/003trace.cc.html
index da4d4f00..6fb7af1a 100644
--- a/html/subx/003trace.cc.html
+++ b/html/subx/003trace.cc.html
@@ -22,7 +22,6 @@ a:hover { text-decoration: underline; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.PreProc { color: #800080; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -137,325 +136,346 @@ if ('onhashchange' in window) {
 <span id="L77" class="LineNr"> 77 </span><span class="Delimiter">};</span>
 <span id="L78" class="LineNr"> 78 </span>
 <span id="L79" class="LineNr"> 79 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L80" class="LineNr"> 80 </span><span class="Normal">bool</span> Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L81" class="LineNr"> 81 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L81'>Dump_trace</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L82" class="LineNr"> 82 </span>string <a href='003trace.cc.html#L82'>Dump_label</a> = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Normal">bool</span> Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, don't print even error trace lines to screen</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L81'>Dump_trace</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, print trace lines to screen</span>
+<span id="L82" class="LineNr"> 82 </span>string <a href='003trace.cc.html#L82'>Dump_label</a> = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>  <span class="Comment">// if set, print trace lines matching a single label to screen</span>
 <span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
-<span id="L84" class="LineNr"> 84 </span>Hide_errors = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L85" class="LineNr"> 85 </span><a href='003trace.cc.html#L81'>Dump_trace</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span>Hide_errors =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span><a href='003trace.cc.html#L81'>Dump_trace</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
 <span id="L86" class="LineNr"> 86 </span><a href='003trace.cc.html#L82'>Dump_label</a> = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
 <span id="L87" class="LineNr"> 87 </span>
-<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L89" class="LineNr"> 89 </span><span class="Comment">// Pre-define some global constants that trace_stream needs to know about.</span>
-<span id="L90" class="LineNr"> 90 </span><span class="Comment">// Since they're in the Types section, they'll be included in any cleaved</span>
-<span id="L91" class="LineNr"> 91 </span><span class="Comment">// compilation units. So no extern linkage.</span>
-<span id="L92" class="LineNr"> 92 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L92'>Max_depth</a> = <span class="Constant">9999</span><span class="Delimiter">;</span>
-<span id="L93" class="LineNr"> 93 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L93'>Error_depth</a> = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// definitely always print errors</span>
-<span id="L94" class="LineNr"> 94 </span>
-<span id="L95" class="LineNr"> 95 </span><span class="Normal">struct</span> trace_stream <span class="Delimiter">{</span>
-<span id="L96" class="LineNr"> 96 </span>  vector&lt;trace_line&gt; <a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">;</span>
-<span id="L97" class="LineNr"> 97 </span>  <span class="Comment">// accumulator for current line</span>
-<span id="L98" class="LineNr"> 98 </span>  ostringstream* <a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">;</span>
-<span id="L99" class="LineNr"> 99 </span>  string <a href='003trace.cc.html#L99'>curr_label</a><span class="Delimiter">;</span>
-<span id="L100" class="LineNr">100 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L100'>curr_depth</a><span class="Delimiter">;</span>
-<span id="L101" class="LineNr">101 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L101'>callstack_depth</a><span class="Delimiter">;</span>
-<span id="L102" class="LineNr">102 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L102'>collect_depth</a><span class="Delimiter">;</span>
-<span id="L103" class="LineNr">103 </span>  ofstream <a href='003trace.cc.html#L103'>null_stream</a><span class="Delimiter">;</span>  <span class="Comment">// never opens a file, so writes silently fail</span>
-<span id="L104" class="LineNr">104 </span>  trace_stream<span class="Delimiter">()</span> :<a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> <a href='003trace.cc.html#L100'>curr_depth</a><span class="Delimiter">(</span><a href='003trace.cc.html#L92'>Max_depth</a><span class="Delimiter">),</span> <a href='003trace.cc.html#L101'>callstack_depth</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <a href='003trace.cc.html#L102'>collect_depth</a><span class="Delimiter">(</span><a href='003trace.cc.html#L92'>Max_depth</a><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
-<span id="L105" class="LineNr">105 </span>  <a href='003trace.cc.html#L105'>~trace_stream</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">)</span> <span class="Normal">delete</span> <a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L106" class="LineNr">106 </span>
-<span id="L107" class="LineNr">107 </span>  ostream&amp; stream<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L108" class="LineNr">108 </span>    <span class="Identifier">return</span> stream<span class="Delimiter">(</span><a href='003trace.cc.html#L92'>Max_depth</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
-<span id="L109" class="LineNr">109 </span>  <span class="Delimiter">}</span>
-<span id="L110" class="LineNr">110 </span>
-<span id="L111" class="LineNr">111 </span>  ostream&amp; stream<span class="Delimiter">(</span><span class="Normal">int</span> <a href='003trace.cc.html#L72'>depth</a><span class="Delimiter">,</span> string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L112" class="LineNr">112 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L72'>depth</a> &gt; <a href='003trace.cc.html#L102'>collect_depth</a><span class="Delimiter">)</span> <span class="Identifier">return</span> <a href='003trace.cc.html#L103'>null_stream</a><span class="Delimiter">;</span>
-<span id="L113" class="LineNr">113 </span>    <a href='003trace.cc.html#L98'>curr_stream</a> = <span class="Normal">new</span> ostringstream<span class="Delimiter">;</span>
-<span id="L114" class="LineNr">114 </span>    <a href='003trace.cc.html#L99'>curr_label</a> = <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">;</span>
-<span id="L115" class="LineNr">115 </span>    <a href='003trace.cc.html#L100'>curr_depth</a> = <a href='003trace.cc.html#L72'>depth</a><span class="Delimiter">;</span>
-<span id="L116" class="LineNr">116 </span>    <span class="Identifier">return</span> *curr_stream<span class="Delimiter">;</span>
-<span id="L117" class="LineNr">117 </span>  <span class="Delimiter">}</span>
-<span id="L118" class="LineNr">118 </span>
-<span id="L119" class="LineNr">119 </span>  <span class="Comment">// be sure to call this before messing with curr_stream or curr_label</span>
-<span id="L120" class="LineNr">120 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L126'>newline</a><span class="Delimiter">();</span>
-<span id="L121" class="LineNr">121 </span>  <span class="Comment">// useful for debugging</span>
-<span id="L122" class="LineNr">122 </span>  string <a href='003trace.cc.html#L142'>readable_contents</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>  <span class="Comment">// empty label = show everything</span>
-<span id="L123" class="LineNr">123 </span><span class="Delimiter">};</span>
-<span id="L124" class="LineNr">124 </span>
-<span id="L125" class="LineNr">125 </span><span class="Delimiter">:(code)</span>
-<span id="L126" class="LineNr">126 </span><span class="Normal">void</span> trace_stream::<a href='003trace.cc.html#L126'>newline</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
-<span id="L128" class="LineNr">128 </span>  string curr_contents = <a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">-&gt;</span>str<span class="Delimiter">();</span>
-<span id="L129" class="LineNr">129 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L130" class="LineNr">130 </span>    <a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span><a href='003trace.cc.html#L100'>curr_depth</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><a href='003trace.cc.html#L99'>curr_label</a><span class="Delimiter">),</span> curr_contents<span class="Delimiter">));</span>  <span class="Comment">// preserve indent in contents</span>
-<span id="L131" class="LineNr">131 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>!Hide_errors &amp;&amp; <a href='003trace.cc.html#L99'>curr_label</a> == <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span>
-<span id="L132" class="LineNr">132 </span>        || <a href='003trace.cc.html#L81'>Dump_trace</a>
-<span id="L133" class="LineNr">133 </span>        || <span class="Delimiter">(</span>!Dump_label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; <a href='003trace.cc.html#L99'>curr_label</a> == <a href='003trace.cc.html#L82'>Dump_label</a><span class="Delimiter">))</span>
-<span id="L134" class="LineNr">134 </span>      cerr &lt;&lt; <a href='003trace.cc.html#L99'>curr_label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr_contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L135" class="LineNr">135 </span>  <span class="Delimiter">}</span>
-<span id="L136" class="LineNr">136 </span>  <span class="Normal">delete</span> <a href='003trace.cc.html#L98'>curr_stream</a><span class="Delimiter">;</span>
-<span id="L137" class="LineNr">137 </span>  <a href='003trace.cc.html#L98'>curr_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L138" class="LineNr">138 </span>  <a href='003trace.cc.html#L99'>curr_label</a><span class="Delimiter">.</span>clear<span class="Delimiter">();</span>
-<span id="L139" class="LineNr">139 </span>  <a href='003trace.cc.html#L100'>curr_depth</a> = <a href='003trace.cc.html#L92'>Max_depth</a><span class="Delimiter">;</span>
-<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
-<span id="L141" class="LineNr">141 </span>
-<span id="L142" class="LineNr">142 </span>string trace_stream::<a href='003trace.cc.html#L142'>readable_contents</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L143" class="LineNr">143 </span>  ostringstream output<span class="Delimiter">;</span>
-<span id="L144" class="LineNr">144 </span>  <a href='003trace.cc.html#L73'>label</a> = <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
-<span id="L145" class="LineNr">145 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
-<span id="L146" class="LineNr">146 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || <a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L147" class="LineNr">147 </span>      output &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L72'>depth</a> &lt;&lt; <span class="Constant">' '</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
-<span id="L148" class="LineNr">148 </span>    <span class="Delimiter">}</span>
-<span id="L149" class="LineNr">149 </span>  <span class="Identifier">return</span> output<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
-<span id="L150" class="LineNr">150 </span><span class="Delimiter">}</span>
-<span id="L151" class="LineNr">151 </span>
-<span id="L152" class="LineNr">152 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L153" class="LineNr">153 </span>trace_stream* <a href='003trace.cc.html#L153'>Trace_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
-<span id="L154" class="LineNr">154 </span><span class="Normal">int</span> <a href='003trace.cc.html#L154'>Trace_errors</a> = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// used only when Trace_stream is NULL</span>
-<span id="L155" class="LineNr">155 </span>
-<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L157" class="LineNr">157 </span><span class="PreProc">#define CLEAR_TRACE  </span><span class="Normal">delete</span><span class="PreProc"> Trace_stream</span><span class="Delimiter">,</span><span class="PreProc"> Trace_stream = </span><span class="Normal">new</span><span class="PreProc"> trace_stream</span><span class="Delimiter">;</span>
-<span id="L158" class="LineNr">158 </span>
-<span id="L159" class="LineNr">159 </span><span class="Comment">// Top-level helper. IMPORTANT: can't nest</span>
-<span id="L160" class="LineNr">160 </span><span class="PreProc">#define trace(</span><span class="Delimiter">...</span><span class="PreProc">)  !Trace_stream ? cerr </span><span class="Comment">/*</span><span class="Comment">print nothing</span><span class="Comment">*/</span><span class="PreProc"> : Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">stream(__VA_ARGS__)</span>
-<span id="L161" class="LineNr">161 </span>
-<span id="L162" class="LineNr">162 </span><span class="Comment">// Just for debugging; 'git log' should never show any calls to 'dbg'.</span>
-<span id="L163" class="LineNr">163 </span><span class="PreProc">#define dbg trace(</span><span class="Constant">0</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">&quot;a&quot;</span><span class="PreProc">)</span>
-<span id="L164" class="LineNr">164 </span><span class="PreProc">#define DUMP(label)  </span><span class="Normal">if</span><span class="PreProc"> (Trace_stream) cerr &lt;&lt; Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">readable_contents(label)</span><span class="Delimiter">;</span>
-<span id="L165" class="LineNr">165 </span>
-<span id="L166" class="LineNr">166 </span><span class="Comment">// Errors are a special layer.</span>
-<span id="L167" class="LineNr">167 </span><span class="PreProc">#define raise  (!Trace_stream ? (++Trace_errors</span><span class="Delimiter">,</span><span class="PreProc">cerr) </span><span class="Comment">/*</span><span class="Comment">do print</span><span class="Comment">*/</span><span class="PreProc"> : Trace_stream</span><span class="Delimiter">-&gt;</span><span class="PreProc">stream(Error_depth</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">&quot;error&quot;</span><span class="PreProc">))</span>
-<span id="L168" class="LineNr">168 </span><span class="Comment">// If we aren't yet sure how to deal with some corner case, use assert_for_now</span>
-<span id="L169" class="LineNr">169 </span><span class="Comment">// to indicate that it isn't an inviolable invariant.</span>
-<span id="L170" class="LineNr">170 </span><span class="PreProc">#define assert_for_now assert</span>
-<span id="L171" class="LineNr">171 </span>
-<span id="L172" class="LineNr">172 </span><span class="Comment">// Inside tests, fail any tests that displayed (unexpected) errors.</span>
-<span id="L173" class="LineNr">173 </span><span class="Comment">// Expected errors in tests should always be hidden and silently checked for.</span>
-<span id="L174" class="LineNr">174 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
-<span id="L175" class="LineNr">175 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; !Hide_errors &amp;&amp; <a href='003trace.cc.html#L179'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
-<span id="L176" class="LineNr">176 </span>  <a href='002test.cc.html#L21'>Passed</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
-<span id="L178" class="LineNr">178 </span><span class="Delimiter">:(code)</span>
-<span id="L179" class="LineNr">179 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L179'>trace_contains_errors</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L180" class="LineNr">180 </span>  <span class="Identifier">return</span> <a href='003trace.cc.html#L154'>Trace_errors</a> &gt; <span class="Constant">0</span> || trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L181" class="LineNr">181 </span><span class="Delimiter">}</span>
-<span id="L182" class="LineNr">182 </span>
-<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L184" class="LineNr">184 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L184'>end</a> <span class="Delimiter">{};</span>
-<span id="L185" class="LineNr">185 </span><span class="Delimiter">:(code)</span>
-<span id="L186" class="LineNr">186 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='001help.cc.html#L208'>unused</a> <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L187" class="LineNr">187 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">)</span> <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L126'>newline</a><span class="Delimiter">();</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
-<span id="L189" class="LineNr">189 </span><span class="Delimiter">}</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Comment">//: Support for tracing an entire run.</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Comment">//: Traces can have a lot of overhead, so only turn them on when asked.</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Delimiter">:(before &quot;End Commandline Options(*arg)&quot;)</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>*arg<span class="Delimiter">,</span> <span class="Constant">&quot;--trace&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  <a href='003trace.cc.html#L221'>Save_trace</a> =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">}</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Delimiter">:(before &quot;End Commandline Parsing&quot;)</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L221'>Save_trace</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L96" class="LineNr"> 96 </span>  cerr &lt;&lt; <span class="Constant">&quot;initializing <a href='003trace.cc.html#L189'>trace</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span>  <a href='003trace.cc.html#L182'>Trace_stream</a> = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">}</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(code)</span>
+<span id="L100" class="LineNr">100 </span><span class="Normal">void</span> <a href='003trace.cc.html#L100'>cleanup_main</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L102" class="LineNr">102 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L221'>Save_trace</a><span class="Delimiter">)</span>
+<span id="L103" class="LineNr">103 </span>    <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L141'>save</a><span class="Delimiter">();</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Normal">delete</span> <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  <a href='003trace.cc.html#L182'>Trace_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">}</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L108" class="LineNr">108 </span>atexit<span class="Delimiter">(</span><a href='003trace.cc.html#L100'>cleanup_main</a><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">// Pre-define some global constants that trace_stream needs to know about.</span>
+<span id="L112" class="LineNr">112 </span><span class="Comment">// Since they're in the Types section, they'll be included in any cleaved</span>
+<span id="L113" class="LineNr">113 </span><span class="Comment">// compilation units. So no extern linkage.</span>
+<span id="L114" class="LineNr">114 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L114'>Max_depth</a> = <span class="Constant">9999</span><span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L115'>Error_depth</a> = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// definitely always print errors</span>
+<span id="L116" class="LineNr">116 </span>
+<span id="L117" class="LineNr">117 </span><span class="Normal">struct</span> trace_stream <span class="Delimiter">{</span>
+<span id="L118" class="LineNr">118 </span>  vector&lt;trace_line&gt; <a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">;</span>
+<span id="L119" class="LineNr">119 </span>  <span class="Comment">// accumulator for current line</span>
+<span id="L120" class="LineNr">120 </span>  ostringstream* <a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">;</span>
+<span id="L121" class="LineNr">121 </span>  string <a href='003trace.cc.html#L121'>curr_label</a><span class="Delimiter">;</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L122'>curr_depth</a><span class="Delimiter">;</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L123'>callstack_depth</a><span class="Delimiter">;</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Normal">int</span> <a href='003trace.cc.html#L124'>collect_depth</a><span class="Delimiter">;</span>
+<span id="L125" class="LineNr">125 </span>  ofstream<span class="Constant"> null</span>_stream<span class="Delimiter">;</span>  <span class="Comment">// never opens a file, so writes silently fail</span>
+<span id="L126" class="LineNr">126 </span>  trace_stream<span class="Delimiter">()</span> :<a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">(</span><span class="Constant">NULL</span><span class="Delimiter">),</span> <a href='003trace.cc.html#L122'>curr_depth</a><span class="Delimiter">(</span><a href='003trace.cc.html#L114'>Max_depth</a><span class="Delimiter">),</span> <a href='003trace.cc.html#L123'>callstack_depth</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <a href='003trace.cc.html#L124'>collect_depth</a><span class="Delimiter">(</span><a href='003trace.cc.html#L114'>Max_depth</a><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L127" class="LineNr">127 </span>  <a href='003trace.cc.html#L127'>~trace_stream</a><span class="Delimiter">()</span> <span class="Delimiter">{</span> <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">)</span> <span class="Normal">delete</span> <a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L128" class="LineNr">128 </span>
+<span id="L129" class="LineNr">129 </span>  ostream&amp; stream<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L130" class="LineNr">130 </span>    <span class="Identifier">return</span> stream<span class="Delimiter">(</span><a href='003trace.cc.html#L114'>Max_depth</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Delimiter">}</span>
+<span id="L132" class="LineNr">132 </span>
+<span id="L133" class="LineNr">133 </span>  ostream&amp; stream<span class="Delimiter">(</span><span class="Normal">int</span> <a href='003trace.cc.html#L72'>depth</a><span class="Delimiter">,</span> string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L72'>depth</a> &gt; <a href='003trace.cc.html#L124'>collect_depth</a><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> null</span>_stream<span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>    <a href='003trace.cc.html#L120'>curr_stream</a> = <span class="Normal">new</span> ostringstream<span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span>    <a href='003trace.cc.html#L121'>curr_label</a> = <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">;</span>
+<span id="L137" class="LineNr">137 </span>    <a href='003trace.cc.html#L122'>curr_depth</a> = <a href='003trace.cc.html#L72'>depth</a><span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span>    <span class="Identifier">return</span> *curr_stream<span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
+<span id="L140" class="LineNr">140 </span>
+<span id="L141" class="LineNr">141 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L141'>save</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L142" class="LineNr">142 </span>    cerr &lt;&lt; <span class="Constant">&quot;saving <a href='003trace.cc.html#L189'>trace</a> to 'last_run'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>    ofstream fout<span class="Delimiter">(</span><span class="Constant">&quot;last_run&quot;</span><span class="Delimiter">);</span>
+<span id="L144" class="LineNr">144 </span>    fout &lt;&lt; <a href='003trace.cc.html#L171'>readable_contents</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>    fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
+<span id="L147" class="LineNr">147 </span>
+<span id="L148" class="LineNr">148 </span>  <span class="Comment">// be sure to call this before messing with curr_stream or curr_label</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Normal">void</span> <a href='003trace.cc.html#L155'>newline</a><span class="Delimiter">();</span>
+<span id="L150" class="LineNr">150 </span>  <span class="Comment">// useful for debugging</span>
+<span id="L151" class="LineNr">151 </span>  string <a href='003trace.cc.html#L171'>readable_contents</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>  <span class="Comment">// empty label = show everything</span>
+<span id="L152" class="LineNr">152 </span><span class="Delimiter">};</span>
+<span id="L153" class="LineNr">153 </span>
+<span id="L154" class="LineNr">154 </span><span class="Delimiter">:(code)</span>
+<span id="L155" class="LineNr">155 </span><span class="Normal">void</span> trace_stream::<a href='003trace.cc.html#L155'>newline</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L157" class="LineNr">157 </span>  string curr_contents = <a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">-&gt;</span>str<span class="Delimiter">();</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!curr_contents<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L159" class="LineNr">159 </span>    <a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>trace_line<span class="Delimiter">(</span><a href='003trace.cc.html#L122'>curr_depth</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><a href='003trace.cc.html#L121'>curr_label</a><span class="Delimiter">),</span> curr_contents<span class="Delimiter">));</span>  <span class="Comment">// preserve indent in contents</span>
+<span id="L160" class="LineNr">160 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>!Hide_errors &amp;&amp; <a href='003trace.cc.html#L121'>curr_label</a> == <span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span>
+<span id="L161" class="LineNr">161 </span>        || <a href='003trace.cc.html#L81'>Dump_trace</a>
+<span id="L162" class="LineNr">162 </span>        || <span class="Delimiter">(</span>!Dump_label<span class="Delimiter">.</span>empty<span class="Delimiter">()</span> &amp;&amp; <a href='003trace.cc.html#L121'>curr_label</a> == <a href='003trace.cc.html#L82'>Dump_label</a><span class="Delimiter">))</span>
+<span id="L163" class="LineNr">163 </span>      cerr &lt;&lt; <a href='003trace.cc.html#L121'>curr_label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; curr_contents &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Normal">delete</span> <a href='003trace.cc.html#L120'>curr_stream</a><span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span>  <a href='003trace.cc.html#L120'>curr_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L167" class="LineNr">167 </span>  <a href='003trace.cc.html#L121'>curr_label</a><span class="Delimiter">.</span>clear<span class="Delimiter">();</span>
+<span id="L168" class="LineNr">168 </span>  <a href='003trace.cc.html#L122'>curr_depth</a> = <a href='003trace.cc.html#L114'>Max_depth</a><span class="Delimiter">;</span>
+<span id="L169" class="LineNr">169 </span><span class="Delimiter">}</span>
+<span id="L170" class="LineNr">170 </span>
+<span id="L171" class="LineNr">171 </span>string trace_stream::<a href='003trace.cc.html#L171'>readable_contents</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L172" class="LineNr">172 </span>  ostringstream output<span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>  <a href='003trace.cc.html#L73'>label</a> = <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L175" class="LineNr">175 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">.</span>empty<span class="Delimiter">()</span> || <a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L176" class="LineNr">176 </span>      output &lt;&lt; std::setw<span class="Delimiter">(</span><span class="Constant">4</span><span class="Delimiter">)</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L72'>depth</a> &lt;&lt; <span class="Constant">' '</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span>    <span class="Delimiter">}</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Identifier">return</span> output<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L179" class="LineNr">179 </span><span class="Delimiter">}</span>
+<span id="L180" class="LineNr">180 </span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L182" class="LineNr">182 </span>trace_stream* <a href='003trace.cc.html#L182'>Trace_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L183" class="LineNr">183 </span><span class="Normal">int</span> <a href='003trace.cc.html#L183'>Trace_errors</a> = <span class="Constant">0</span><span class="Delimiter">;</span>  <span class="Comment">// used only when Trace_stream is NULL</span>
+<span id="L184" class="LineNr">184 </span>
+<span id="L185" class="LineNr">185 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L186" class="LineNr">186 </span><span class="Comment">#define CLEAR_TRACE  delete Trace_stream, Trace_stream = new trace_stream;</span>
+<span id="L187" class="LineNr">187 </span>
+<span id="L188" class="LineNr">188 </span><span class="Comment">// Top-level helper. IMPORTANT: can't nest</span>
+<span id="L189" class="LineNr">189 </span><span class="Comment">#define trace(...)  !Trace_stream ? cerr /*print nothing*/ : Trace_stream-&gt;stream(__VA_ARGS__)</span>
 <span id="L190" class="LineNr">190 </span>
-<span id="L191" class="LineNr">191 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L192" class="LineNr">192 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L192'>Save_trace</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L193" class="LineNr">193 </span>
-<span id="L194" class="LineNr">194 </span><span class="Comment">// Trace_stream is a resource, lease_tracer uses RAII to manage it.</span>
-<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L196" class="LineNr">196 </span><span class="Normal">struct</span> lease_tracer <span class="Delimiter">{</span>
-<span id="L197" class="LineNr">197 </span>  lease_tracer<span class="Delimiter">();</span>
-<span id="L198" class="LineNr">198 </span>  <a href='003trace.cc.html#L202'>~lease_tracer</a><span class="Delimiter">();</span>
-<span id="L199" class="LineNr">199 </span><span class="Delimiter">};</span>
-<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(code)</span>
-<span id="L201" class="LineNr">201 </span>lease_tracer::lease_tracer<span class="Delimiter">()</span> <span class="Delimiter">{</span> <a href='003trace.cc.html#L153'>Trace_stream</a> = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
-<span id="L202" class="LineNr">202 </span>lease_tracer::<a href='003trace.cc.html#L202'>~lease_tracer</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L203" class="LineNr">203 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// in case tests close Trace_stream</span>
-<span id="L204" class="LineNr">204 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L192'>Save_trace</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L205" class="LineNr">205 </span>    ofstream fout<span class="Delimiter">(</span><span class="Constant">&quot;last_trace&quot;</span><span class="Delimiter">);</span>
-<span id="L206" class="LineNr">206 </span>    fout &lt;&lt; <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L142'>readable_contents</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L207" class="LineNr">207 </span>    fout<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
-<span id="L208" class="LineNr">208 </span>  <span class="Delimiter">}</span>
-<span id="L209" class="LineNr">209 </span>  <span class="Normal">delete</span> <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L153'>Trace_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L191" class="LineNr">191 </span><span class="Comment">// Just for debugging; 'git log' should never show any calls to 'dbg'.</span>
+<span id="L192" class="LineNr">192 </span><span class="Comment">#define dbg trace(0, &quot;a&quot;)</span>
+<span id="L193" class="LineNr">193 </span><span class="Comment">#define DUMP(label)  if (Trace_stream) cerr &lt;&lt; Trace_stream-&gt;readable_contents(label);</span>
+<span id="L194" class="LineNr">194 </span>
+<span id="L195" class="LineNr">195 </span><span class="Comment">// Errors are a special layer.</span>
+<span id="L196" class="LineNr">196 </span><span class="Comment">#define raise  (!Trace_stream ? (++Trace_errors,cerr) /*do print*/ : Trace_stream-&gt;stream(Error_depth, &quot;error&quot;))</span>
+<span id="L197" class="LineNr">197 </span><span class="Comment">// If we aren't yet sure how to deal with some corner case, use assert_for_now</span>
+<span id="L198" class="LineNr">198 </span><span class="Comment">// to indicate that it isn't an inviolable invariant.</span>
+<span id="L199" class="LineNr">199 </span><span class="Comment">#define assert_for_now assert</span>
+<span id="L200" class="LineNr">200 </span>
+<span id="L201" class="LineNr">201 </span><span class="Comment">// Inside tests, fail any tests that displayed (unexpected) errors.</span>
+<span id="L202" class="LineNr">202 </span><span class="Comment">// Expected errors in tests should always be hidden and silently checked for.</span>
+<span id="L203" class="LineNr">203 </span><span class="Delimiter">:(before &quot;End Test Teardown&quot;)</span>
+<span id="L204" class="LineNr">204 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; !Hide_errors &amp;&amp; <a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L205" class="LineNr">205 </span>  <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">}</span>
+<span id="L207" class="LineNr">207 </span><span class="Delimiter">:(code)</span>
+<span id="L208" class="LineNr">208 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L209" class="LineNr">209 </span>  <span class="Identifier">return</span> <a href='003trace.cc.html#L183'>Trace_errors</a> &gt; <span class="Constant">0</span> || trace_count<span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">)</span> &gt; <span class="Constant">0</span><span class="Delimiter">;</span>
 <span id="L210" class="LineNr">210 </span><span class="Delimiter">}</span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L212" class="LineNr">212 </span><span class="PreProc">#define START_TRACING_UNTIL_END_OF_SCOPE  lease_tracer leased_tracer</span><span class="Delimiter">;</span>
-<span id="L213" class="LineNr">213 </span><span class="Delimiter">:(before &quot;End Test Setup&quot;)</span>
-<span id="L214" class="LineNr">214 </span><a href='003trace.cc.html#L212'>START_TRACING_UNTIL_END_OF_SCOPE</a>
-<span id="L215" class="LineNr">215 </span>
-<span id="L216" class="LineNr">216 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L217" class="LineNr">217 </span><span class="PreProc">#define CHECK_TRACE_CONTENTS(</span><span class="Delimiter">...</span><span class="PreProc">)  check_trace_contents(__FUNCTION__</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">__FILE__</span><span class="Delimiter">,</span><span class="PreProc"> </span><span class="Constant">__LINE__</span><span class="Delimiter">,</span><span class="PreProc"> __VA_ARGS__)</span>
-<span id="L218" class="LineNr">218 </span>
-<span id="L219" class="LineNr">219 </span><span class="PreProc">#define CHECK_TRACE_CONTAINS_ERRORS()  CHECK(trace_contains_errors())</span>
-<span id="L220" class="LineNr">220 </span><span class="PreProc">#define CHECK_TRACE_DOESNT_CONTAIN_ERRORS() \</span>
-<span id="L221" class="LineNr">221 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; trace_contains_errors()) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L222" class="LineNr">222 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): unexpected errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L223" class="LineNr">223 </span><span class="PreProc">    DUMP(</span><span class="Constant">&quot;error&quot;</span><span class="PreProc">)</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L224" class="LineNr">224 </span><span class="PreProc">    <a href='002test.cc.html#L21'>Passed</a> = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L225" class="LineNr">225 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L226" class="LineNr">226 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L227" class="LineNr">227 </span>
-<span id="L228" class="LineNr">228 </span><span class="PreProc">#define CHECK_TRACE_COUNT(label</span><span class="Delimiter">,</span><span class="PreProc"> count) \</span>
-<span id="L229" class="LineNr">229 </span><span class="PreProc">  </span><span class="Normal">if</span><span class="PreProc"> (Passed &amp;&amp; trace_count(label) != (count)) </span><span class="Delimiter">{</span><span class="PreProc"> \</span>
-<span id="L230" class="LineNr">230 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span><span class="PreProc"> &lt;&lt; __FUNCTION__ &lt;&lt; </span><span class="Constant">&quot;(&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__FILE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;:&quot;</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">__LINE__</span><span class="PreProc"> &lt;&lt; </span><span class="Constant">&quot;): trace_count of &quot;</span><span class="PreProc"> &lt;&lt; <a href='003trace.cc.html#L73'>label</a> &lt;&lt; </span><span class="Constant">&quot; should be &quot;</span><span class="PreProc"> &lt;&lt; count &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L231" class="LineNr">231 </span><span class="PreProc">    cerr &lt;&lt; </span><span class="Constant">&quot;  got &quot;</span><span class="PreProc"> &lt;&lt; trace_count(label) &lt;&lt; </span><span class="cSpecial">'\n'</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> multiple eval </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L232" class="LineNr">232 </span><span class="PreProc">    DUMP(label)</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L233" class="LineNr">233 </span><span class="PreProc">    <a href='002test.cc.html#L21'>Passed</a> = </span><span class="Constant">false</span><span class="Delimiter">;</span><span class="PreProc"> \</span>
-<span id="L234" class="LineNr">234 </span><span class="PreProc">    </span><span class="Identifier">return</span><span class="Delimiter">;</span><span class="PreProc">  </span><span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span><span class="PreProc"> \</span>
-<span id="L235" class="LineNr">235 </span><span class="PreProc">  </span><span class="Delimiter">}</span>
-<span id="L236" class="LineNr">236 </span>
-<span id="L237" class="LineNr">237 </span><span class="PreProc">#define CHECK_TRACE_DOESNT_CONTAIN(</span><span class="Delimiter">...</span><span class="PreProc">)  CHECK(trace_doesnt_contain(__VA_ARGS__))</span>
-<span id="L238" class="LineNr">238 </span>
-<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(code)</span>
-<span id="L240" class="LineNr">240 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L240'>check_trace_contents</a><span class="Delimiter">(</span>string FUNCTION<span class="Delimiter">,</span> string <span class="Normal">FILE</span><span class="Delimiter">,</span> <span class="Normal">int</span> LINE<span class="Delimiter">,</span> string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L241" class="LineNr">241 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L242" class="LineNr">242 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L243" class="LineNr">243 </span>  vector&lt;string&gt; expected_lines = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;^D&quot;</span><span class="Delimiter">);</span>
-<span id="L244" class="LineNr">244 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L245" class="LineNr">245 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L91'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
-<span id="L246" class="LineNr">246 </span>    ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L247" class="LineNr">247 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L91'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L248" class="LineNr">248 </span>  string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">;</span>
-<span id="L249" class="LineNr">249 </span>  <a href='003trace.cc.html#L272'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
-<span id="L250" class="LineNr">250 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L251" class="LineNr">251 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> != p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L252" class="LineNr">252 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L74'>contents</a> != <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L253" class="LineNr">253 </span>    ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L254" class="LineNr">254 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L91'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
-<span id="L255" class="LineNr">255 </span>      ++curr_expected_line<span class="Delimiter">;</span>
-<span id="L256" class="LineNr">256 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L91'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L257" class="LineNr">257 </span>    <a href='003trace.cc.html#L272'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
-<span id="L258" class="LineNr">258 </span>  <span class="Delimiter">}</span>
-<span id="L259" class="LineNr">259 </span>
-<span id="L260" class="LineNr">260 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L285'>line_exists_anywhere</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
-<span id="L261" class="LineNr">261 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): line [&quot;</span> &lt;&lt; <a href='003trace.cc.html#L73'>label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="Constant">&quot;] out of order in <a href='003trace.cc.html#L160'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L262" class="LineNr">262 </span>    <a href='003trace.cc.html#L164'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L263" class="LineNr">263 </span>  <span class="Delimiter">}</span>
-<span id="L264" class="LineNr">264 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L265" class="LineNr">265 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): missing [&quot;</span> &lt;&lt; <a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L160'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
-<span id="L266" class="LineNr">266 </span>    <a href='003trace.cc.html#L164'>DUMP</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
-<span id="L267" class="LineNr">267 </span>  <span class="Delimiter">}</span>
-<span id="L268" class="LineNr">268 </span>  <a href='002test.cc.html#L21'>Passed</a> = <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L269" class="LineNr">269 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L270" class="LineNr">270 </span><span class="Delimiter">}</span>
-<span id="L271" class="LineNr">271 </span>
-<span id="L272" class="LineNr">272 </span><span class="Normal">void</span> <a href='003trace.cc.html#L272'>split_label_contents</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> string* <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string* <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L273" class="LineNr">273 </span>  <span class="Normal">static</span> <span class="Normal">const</span> string delim<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
-<span id="L274" class="LineNr">274 </span>  <span class="Normal">size_t</span> pos = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L275" class="LineNr">275 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>pos == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L276" class="LineNr">276 </span>    *label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L277" class="LineNr">277 </span>    *contents = <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">);</span>
-<span id="L278" class="LineNr">278 </span>  <span class="Delimiter">}</span>
-<span id="L279" class="LineNr">279 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
-<span id="L280" class="LineNr">280 </span>    *label = <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> pos<span class="Delimiter">));</span>
-<span id="L281" class="LineNr">281 </span>    *contents = <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>pos+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">)));</span>
+<span id="L211" class="LineNr">211 </span>
+<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L213" class="LineNr">213 </span><span class="Normal">struct</span> <a href='003trace.cc.html#L213'>end</a> <span class="Delimiter">{};</span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(code)</span>
+<span id="L215" class="LineNr">215 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='003trace.cc.html#L213'>end</a> <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">)</span> <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L155'>newline</a><span class="Delimiter">();</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">}</span>
+<span id="L219" class="LineNr">219 </span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L221" class="LineNr">221 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L221'>Save_trace</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// if set, write out trace to disk</span>
+<span id="L222" class="LineNr">222 </span>
+<span id="L223" class="LineNr">223 </span><span class="Comment">// Trace_stream is a resource, lease_tracer uses RAII to manage it.</span>
+<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L225" class="LineNr">225 </span><span class="Normal">struct</span> lease_tracer <span class="Delimiter">{</span>
+<span id="L226" class="LineNr">226 </span>  lease_tracer<span class="Delimiter">();</span>
+<span id="L227" class="LineNr">227 </span>  <a href='003trace.cc.html#L231'>~lease_tracer</a><span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">};</span>
+<span id="L229" class="LineNr">229 </span><span class="Delimiter">:(code)</span>
+<span id="L230" class="LineNr">230 </span>lease_tracer::lease_tracer<span class="Delimiter">()</span> <span class="Delimiter">{</span> <a href='003trace.cc.html#L182'>Trace_stream</a> = <span class="Normal">new</span> trace_stream<span class="Delimiter">;</span> <span class="Delimiter">}</span>
+<span id="L231" class="LineNr">231 </span>lease_tracer::<a href='003trace.cc.html#L231'>~lease_tracer</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L232" class="LineNr">232 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L221'>Save_trace</a><span class="Delimiter">)</span> <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L141'>save</a><span class="Delimiter">();</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Normal">delete</span> <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L182'>Trace_stream</a> = <span class="Constant">NULL</span><span class="Delimiter">;</span>
+<span id="L234" class="LineNr">234 </span><span class="Delimiter">}</span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L236" class="LineNr">236 </span><span class="Comment">#define START_TRACING_UNTIL_END_OF_SCOPE  lease_tracer leased_tracer;</span>
+<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End Test Setup&quot;)</span>
+<span id="L238" class="LineNr">238 </span><a href='003trace.cc.html#L236'>START_TRACING_UNTIL_END_OF_SCOPE</a>
+<span id="L239" class="LineNr">239 </span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L241" class="LineNr">241 </span><span class="Comment">#define CHECK_TRACE_CONTENTS(...)  check_trace_contents(__FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)</span>
+<span id="L242" class="LineNr">242 </span>
+<span id="L243" class="LineNr">243 </span><span class="Comment">#define CHECK_TRACE_CONTAINS_ERRORS()  CHECK(trace_contains_errors())</span>
+<span id="L244" class="LineNr">244 </span><span class="Comment">#define CHECK_TRACE_DOESNT_CONTAIN_ERRORS() \</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; <a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Delimiter">{</span> \
+<span id="L246" class="LineNr">246 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): unexpected errors</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span> \
+<span id="L247" class="LineNr">247 </span>    <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;error&quot;</span><span class="Delimiter">);</span> \
+<span id="L248" class="LineNr">248 </span>    <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L249" class="LineNr">249 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span> \
+<span id="L250" class="LineNr">250 </span>  <span class="Delimiter">}</span>
+<span id="L251" class="LineNr">251 </span>
+<span id="L252" class="LineNr">252 </span><span class="Comment">#define CHECK_TRACE_COUNT(label, count) \</span>
+<span id="L253" class="LineNr">253 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='002test.cc.html#L21'>Passed</a> &amp;&amp; trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> != <span class="Delimiter">(</span>count<span class="Delimiter">))</span> <span class="Delimiter">{</span> \
+<span id="L254" class="LineNr">254 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; __FUNCTION__ &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Constant">__FILE__</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; <span class="Constant">__LINE__</span> &lt;&lt; <span class="Constant">&quot;): trace_count of &quot;</span> &lt;&lt; <a href='003trace.cc.html#L73'>label</a> &lt;&lt; <span class="Constant">&quot; should be &quot;</span> &lt;&lt; count &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span> \
+<span id="L255" class="LineNr">255 </span>    cerr &lt;&lt; <span class="Constant">&quot;  got &quot;</span> &lt;&lt; trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> multiple eval </span><span class="Comment">*/</span> \
+<span id="L256" class="LineNr">256 </span>    <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span> \
+<span id="L257" class="LineNr">257 </span>    <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L258" class="LineNr">258 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">/*</span><span class="Comment"> Currently we stop at the very first failure. </span><span class="Comment">*/</span> \
+<span id="L259" class="LineNr">259 </span>  <span class="Delimiter">}</span>
+<span id="L260" class="LineNr">260 </span>
+<span id="L261" class="LineNr">261 </span><span class="Comment">#define CHECK_TRACE_DOESNT_CONTAIN(...)  CHECK(trace_doesnt_contain(__VA_ARGS__))</span>
+<span id="L262" class="LineNr">262 </span>
+<span id="L263" class="LineNr">263 </span><span class="Delimiter">:(code)</span>
+<span id="L264" class="LineNr">264 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L264'>check_trace_contents</a><span class="Delimiter">(</span>string FUNCTION<span class="Delimiter">,</span> string <span class="Normal">FILE</span><span class="Delimiter">,</span> <span class="Normal">int</span> LINE<span class="Delimiter">,</span> string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Passed<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L266" class="LineNr">266 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L267" class="LineNr">267 </span>  vector&lt;string&gt; expected_lines = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;^D&quot;</span><span class="Delimiter">);</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">int</span> curr_expected_line = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L269" class="LineNr">269 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
+<span id="L270" class="LineNr">270 </span>    ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L272" class="LineNr">272 </span>  string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">;</span>
+<span id="L273" class="LineNr">273 </span>  <a href='003trace.cc.html#L296'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L275" class="LineNr">275 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> != p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L276" class="LineNr">276 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L74'>contents</a> != <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L277" class="LineNr">277 </span>    ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L278" class="LineNr">278 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span>curr_expected_line &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">)</span> &amp;&amp; expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">).</span>empty<span class="Delimiter">())</span>
+<span id="L279" class="LineNr">279 </span>      ++curr_expected_line<span class="Delimiter">;</span>
+<span id="L280" class="LineNr">280 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>curr_expected_line == <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L281" class="LineNr">281 </span>    <a href='003trace.cc.html#L296'>split_label_contents</a><span class="Delimiter">(</span>expected_lines<span class="Delimiter">.</span>at<span class="Delimiter">(</span>curr_expected_line<span class="Delimiter">),</span> &amp;label<span class="Delimiter">,</span> &amp;contents<span class="Delimiter">);</span>
 <span id="L282" class="LineNr">282 </span>  <span class="Delimiter">}</span>
-<span id="L283" class="LineNr">283 </span><span class="Delimiter">}</span>
-<span id="L284" class="LineNr">284 </span>
-<span id="L285" class="LineNr">285 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L285'>line_exists_anywhere</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L286" class="LineNr">286 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L287" class="LineNr">287 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> != p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
-<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L74'>contents</a> == <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">true</span><span class="Delimiter">;</span>
-<span id="L289" class="LineNr">289 </span>  <span class="Delimiter">}</span>
-<span id="L290" class="LineNr">290 </span>  <span class="Identifier">return</span> <span class="Constant">false</span><span class="Delimiter">;</span>
-<span id="L291" class="LineNr">291 </span><span class="Delimiter">}</span>
-<span id="L292" class="LineNr">292 </span>
-<span id="L293" class="LineNr">293 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L294" class="LineNr">294 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span>
-<span id="L296" class="LineNr">296 </span>
-<span id="L297" class="LineNr">297 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L298" class="LineNr">298 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L299" class="LineNr">299 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L300" class="LineNr">300 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L301" class="LineNr">301 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L302" class="LineNr">302 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>line == <span class="Constant">&quot;&quot;</span> || <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>line<span class="Delimiter">)</span> == <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span>
-<span id="L303" class="LineNr">303 </span>        ++result<span class="Delimiter">;</span>
-<span id="L304" class="LineNr">304 </span>    <span class="Delimiter">}</span>
-<span id="L305" class="LineNr">305 </span>  <span class="Delimiter">}</span>
-<span id="L306" class="LineNr">306 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L283" class="LineNr">283 </span>
+<span id="L284" class="LineNr">284 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L309'>line_exists_anywhere</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L285" class="LineNr">285 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): <a href='011run.cc.html#L108'>line</a> [&quot;</span> &lt;&lt; <a href='003trace.cc.html#L73'>label</a> &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; <a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="Constant">&quot;] out of order in <a href='003trace.cc.html#L189'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L286" class="LineNr">286 </span>    <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Delimiter">}</span>
+<span id="L288" class="LineNr">288 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L289" class="LineNr">289 </span>    cerr &lt;&lt; <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">F - &quot;</span> &lt;&lt; FUNCTION &lt;&lt; <span class="Constant">&quot;(&quot;</span> &lt;&lt; <span class="Normal">FILE</span> &lt;&lt; <span class="Constant">&quot;:&quot;</span> &lt;&lt; LINE &lt;&lt; <span class="Constant">&quot;): missing [&quot;</span> &lt;&lt; <a href='003trace.cc.html#L74'>contents</a> &lt;&lt; <span class="Constant">&quot;] in <a href='003trace.cc.html#L189'>trace</a>:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L290" class="LineNr">290 </span>    <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">);</span>
+<span id="L291" class="LineNr">291 </span>  <span class="Delimiter">}</span>
+<span id="L292" class="LineNr">292 </span>  <a href='002test.cc.html#L21'>Passed</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L294" class="LineNr">294 </span><span class="Delimiter">}</span>
+<span id="L295" class="LineNr">295 </span>
+<span id="L296" class="LineNr">296 </span><span class="Normal">void</span> <a href='003trace.cc.html#L296'>split_label_contents</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">,</span> string* <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string* <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L297" class="LineNr">297 </span>  <span class="Normal">static</span> <span class="Normal">const</span> string delim<span class="Delimiter">(</span><span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Normal">size_t</span> pos = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>pos == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L300" class="LineNr">300 </span>    *label = <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L301" class="LineNr">301 </span>    *contents = <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L302" class="LineNr">302 </span>  <span class="Delimiter">}</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L304" class="LineNr">304 </span>    *label = <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> pos<span class="Delimiter">));</span>
+<span id="L305" class="LineNr">305 </span>    *contents = <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>pos+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">)));</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Delimiter">}</span>
 <span id="L307" class="LineNr">307 </span><span class="Delimiter">}</span>
 <span id="L308" class="LineNr">308 </span>
-<span id="L309" class="LineNr">309 </span><span class="Normal">int</span> <a href='003trace.cc.html#L309'>trace_count_prefix</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string prefix<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L310" class="LineNr">310 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L311" class="LineNr">311 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L312" class="LineNr">312 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L153'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L96'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L313" class="LineNr">313 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L314" class="LineNr">314 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L27'>starts_with</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">),</span> <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span>prefix<span class="Delimiter">)))</span>
-<span id="L315" class="LineNr">315 </span>        ++result<span class="Delimiter">;</span>
-<span id="L316" class="LineNr">316 </span>    <span class="Delimiter">}</span>
-<span id="L317" class="LineNr">317 </span>  <span class="Delimiter">}</span>
-<span id="L318" class="LineNr">318 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L309" class="LineNr">309 </span><span class="Normal">bool</span> <a href='003trace.cc.html#L309'>line_exists_anywhere</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; <a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L311" class="LineNr">311 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> != p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L312" class="LineNr">312 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L74'>contents</a> == <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L313" class="LineNr">313 </span>  <span class="Delimiter">}</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span><span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L318" class="LineNr">318 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L319" class="LineNr">319 </span><span class="Delimiter">}</span>
 <span id="L320" class="LineNr">320 </span>
-<span id="L321" class="LineNr">321 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string line<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L322" class="LineNr">322 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> line<span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
-<span id="L323" class="LineNr">323 </span><span class="Delimiter">}</span>
-<span id="L324" class="LineNr">324 </span>
-<span id="L325" class="LineNr">325 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L326" class="LineNr">326 </span>  vector&lt;string&gt; tmp = <a href='003trace.cc.html#L345'>split_first</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
-<span id="L327" class="LineNr">327 </span>  <span class="Identifier">return</span> trace_doesnt_contain<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
-<span id="L328" class="LineNr">328 </span><span class="Delimiter">}</span>
-<span id="L329" class="LineNr">329 </span>
-<span id="L330" class="LineNr">330 </span>vector&lt;string&gt; <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L331" class="LineNr">331 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
-<span id="L332" class="LineNr">332 </span>  <span class="Normal">size_t</span> begin=<span class="Constant">0</span><span class="Delimiter">,</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L333" class="LineNr">333 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L334" class="LineNr">334 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L184'>end</a> == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L335" class="LineNr">335 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> string::npos<span class="Delimiter">));</span>
-<span id="L336" class="LineNr">336 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L337" class="LineNr">337 </span>    <span class="Delimiter">}</span>
-<span id="L338" class="LineNr">338 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> end-begin<span class="Delimiter">));</span>
-<span id="L339" class="LineNr">339 </span>    begin = end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L340" class="LineNr">340 </span>    <a href='003trace.cc.html#L184'>end</a> = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">,</span> begin<span class="Delimiter">);</span>
+<span id="L321" class="LineNr">321 </span><span class="Normal">int</span> trace_count<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string <a href='011run.cc.html#L108'>line</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L322" class="LineNr">322 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L325" class="LineNr">325 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L326" class="LineNr">326 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='011run.cc.html#L108'>line</a> == <span class="Constant">&quot;&quot;</span> || <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><a href='011run.cc.html#L108'>line</a><span class="Delimiter">)</span> == <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">))</span>
+<span id="L327" class="LineNr">327 </span>        ++result<span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>    <span class="Delimiter">}</span>
+<span id="L329" class="LineNr">329 </span>  <span class="Delimiter">}</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span><span class="Delimiter">}</span>
+<span id="L332" class="LineNr">332 </span>
+<span id="L333" class="LineNr">333 </span><span class="Normal">int</span> <a href='003trace.cc.html#L333'>trace_count_prefix</a><span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string prefix<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!Trace_stream<span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L335" class="LineNr">335 </span>  <span class="Normal">long</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>vector&lt;trace_line&gt;::iterator p = <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L118'>past_lines</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L337" class="LineNr">337 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a> == p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L338" class="LineNr">338 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L93'>starts_with</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L74'>contents</a><span class="Delimiter">),</span> <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span>prefix<span class="Delimiter">)))</span>
+<span id="L339" class="LineNr">339 </span>        ++result<span class="Delimiter">;</span>
+<span id="L340" class="LineNr">340 </span>    <span class="Delimiter">}</span>
 <span id="L341" class="LineNr">341 </span>  <span class="Delimiter">}</span>
 <span id="L342" class="LineNr">342 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
 <span id="L343" class="LineNr">343 </span><span class="Delimiter">}</span>
 <span id="L344" class="LineNr">344 </span>
-<span id="L345" class="LineNr">345 </span>vector&lt;string&gt; <a href='003trace.cc.html#L345'>split_first</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L346" class="LineNr">346 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
-<span id="L347" class="LineNr">347 </span>  <span class="Normal">size_t</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
-<span id="L348" class="LineNr">348 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">));</span>
-<span id="L349" class="LineNr">349 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L184'>end</a> != string::npos<span class="Delimiter">)</span>
-<span id="L350" class="LineNr">350 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">),</span> string::npos<span class="Delimiter">));</span>
-<span id="L351" class="LineNr">351 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L345" class="LineNr">345 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> string <a href='011run.cc.html#L108'>line</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L346" class="LineNr">346 </span>  <span class="Identifier">return</span> trace_count<span class="Delimiter">(</span><a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> <a href='011run.cc.html#L108'>line</a><span class="Delimiter">)</span> == <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L347" class="LineNr">347 </span><span class="Delimiter">}</span>
+<span id="L348" class="LineNr">348 </span>
+<span id="L349" class="LineNr">349 </span><span class="Normal">bool</span> trace_doesnt_contain<span class="Delimiter">(</span>string expected<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L350" class="LineNr">350 </span>  vector&lt;string&gt; tmp = <a href='003trace.cc.html#L369'>split_first</a><span class="Delimiter">(</span>expected<span class="Delimiter">,</span> <span class="Constant">&quot;: &quot;</span><span class="Delimiter">);</span>
+<span id="L351" class="LineNr">351 </span>  <span class="Identifier">return</span> trace_doesnt_contain<span class="Delimiter">(</span>tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> tmp<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
 <span id="L352" class="LineNr">352 </span><span class="Delimiter">}</span>
 <span id="L353" class="LineNr">353 </span>
-<span id="L354" class="LineNr">354 </span>string <a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L355" class="LineNr">355 </span>  string::const_iterator first = s<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
-<span id="L356" class="LineNr">356 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>first != s<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*first<span class="Delimiter">))</span>
-<span id="L357" class="LineNr">357 </span>    ++first<span class="Delimiter">;</span>
-<span id="L358" class="LineNr">358 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>first == s<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
-<span id="L359" class="LineNr">359 </span>
-<span id="L360" class="LineNr">360 </span>  string::const_iterator last = --s<span class="Delimiter">.</span><a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L361" class="LineNr">361 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>last != s<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*last<span class="Delimiter">))</span>
-<span id="L362" class="LineNr">362 </span>    --last<span class="Delimiter">;</span>
-<span id="L363" class="LineNr">363 </span>  ++last<span class="Delimiter">;</span>
-<span id="L364" class="LineNr">364 </span>  <span class="Identifier">return</span> string<span class="Delimiter">(</span>first<span class="Delimiter">,</span> last<span class="Delimiter">);</span>
-<span id="L365" class="LineNr">365 </span><span class="Delimiter">}</span>
-<span id="L366" class="LineNr">366 </span>
-<span id="L367" class="LineNr">367 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
-<span id="L368" class="LineNr">368 </span><span class="PreProc">#include </span><span class="Constant">&lt;vector&gt;</span>
-<span id="L369" class="LineNr">369 </span><span class="Normal">using</span> std::vector<span class="Delimiter">;</span>
-<span id="L370" class="LineNr">370 </span><span class="PreProc">#include </span><span class="Constant">&lt;list&gt;</span>
-<span id="L371" class="LineNr">371 </span><span class="Normal">using</span> std::list<span class="Delimiter">;</span>
-<span id="L372" class="LineNr">372 </span><span class="PreProc">#include </span><span class="Constant">&lt;map&gt;</span>
-<span id="L373" class="LineNr">373 </span><span class="Normal">using</span> std::map<span class="Delimiter">;</span>
-<span id="L374" class="LineNr">374 </span><span class="PreProc">#include </span><span class="Constant">&lt;set&gt;</span>
-<span id="L375" class="LineNr">375 </span><span class="Normal">using</span> std::set<span class="Delimiter">;</span>
-<span id="L376" class="LineNr">376 </span><span class="PreProc">#include </span><span class="Constant">&lt;algorithm&gt;</span>
+<span id="L354" class="LineNr">354 </span>vector&lt;string&gt; <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L355" class="LineNr">355 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
+<span id="L356" class="LineNr">356 </span>  <span class="Normal">size_t</span> begin=<span class="Constant">0</span><span class="Delimiter">,</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L357" class="LineNr">357 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><span class="Constant">true</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L358" class="LineNr">358 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L213'>end</a> == string::npos<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L359" class="LineNr">359 </span>      result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> string::npos<span class="Delimiter">));</span>
+<span id="L360" class="LineNr">360 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L361" class="LineNr">361 </span>    <span class="Delimiter">}</span>
+<span id="L362" class="LineNr">362 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> begin<span class="Delimiter">,</span> end-begin<span class="Delimiter">));</span>
+<span id="L363" class="LineNr">363 </span>    begin = end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L364" class="LineNr">364 </span>    <a href='003trace.cc.html#L213'>end</a> = s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">,</span> begin<span class="Delimiter">);</span>
+<span id="L365" class="LineNr">365 </span>  <span class="Delimiter">}</span>
+<span id="L366" class="LineNr">366 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L367" class="LineNr">367 </span><span class="Delimiter">}</span>
+<span id="L368" class="LineNr">368 </span>
+<span id="L369" class="LineNr">369 </span>vector&lt;string&gt; <a href='003trace.cc.html#L369'>split_first</a><span class="Delimiter">(</span>string s<span class="Delimiter">,</span> string delim<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L370" class="LineNr">370 </span>  vector&lt;string&gt; result<span class="Delimiter">;</span>
+<span id="L371" class="LineNr">371 </span>  <span class="Normal">size_t</span> end=s<span class="Delimiter">.</span>find<span class="Delimiter">(</span>delim<span class="Delimiter">);</span>
+<span id="L372" class="LineNr">372 </span>  result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">));</span>
+<span id="L373" class="LineNr">373 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L213'>end</a> != string::npos<span class="Delimiter">)</span>
+<span id="L374" class="LineNr">374 </span>    result<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>string<span class="Delimiter">(</span>s<span class="Delimiter">,</span> end+SIZE<span class="Delimiter">(</span>delim<span class="Delimiter">),</span> string::npos<span class="Delimiter">));</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L376" class="LineNr">376 </span><span class="Delimiter">}</span>
 <span id="L377" class="LineNr">377 </span>
-<span id="L378" class="LineNr">378 </span><span class="PreProc">#include </span><span class="Constant">&lt;sstream&gt;</span>
-<span id="L379" class="LineNr">379 </span><span class="Normal">using</span> std::istringstream<span class="Delimiter">;</span>
-<span id="L380" class="LineNr">380 </span><span class="Normal">using</span> std::ostringstream<span class="Delimiter">;</span>
-<span id="L381" class="LineNr">381 </span>
-<span id="L382" class="LineNr">382 </span><span class="PreProc">#include </span><span class="Constant">&lt;fstream&gt;</span>
-<span id="L383" class="LineNr">383 </span><span class="Normal">using</span> std::ifstream<span class="Delimiter">;</span>
-<span id="L384" class="LineNr">384 </span><span class="Normal">using</span> std::ofstream<span class="Delimiter">;</span>
-<span id="L385" class="LineNr">385 </span>
-<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
-<span id="L387" class="LineNr">387 </span><span class="Comment">//: In future layers we'll use the depth field as follows:</span>
-<span id="L388" class="LineNr">388 </span><span class="Comment">//:</span>
-<span id="L389" class="LineNr">389 </span><span class="Comment">//: Errors will be depth 0.</span>
-<span id="L390" class="LineNr">390 </span><span class="Comment">//: Mu 'applications' will be able to use depths 1-100 as they like.</span>
-<span id="L391" class="LineNr">391 </span><span class="Comment">//: Primitive statements will occupy 101-9989</span>
-<span id="L392" class="LineNr">392 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L392'>Initial_callstack_depth</a> = <span class="Constant">101</span><span class="Delimiter">;</span>
-<span id="L393" class="LineNr">393 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L393'>Max_callstack_depth</a> = <span class="Constant">9989</span><span class="Delimiter">;</span>
-<span id="L394" class="LineNr">394 </span><span class="Comment">//: Finally, details of primitive Mu statements will occupy depth 9990-9999</span>
-<span id="L395" class="LineNr">395 </span><span class="Comment">//: (more on that later as well)</span>
-<span id="L396" class="LineNr">396 </span><span class="Comment">//:</span>
-<span id="L397" class="LineNr">397 </span><span class="Comment">//: This framework should help us hide some details at each level, mixing</span>
-<span id="L398" class="LineNr">398 </span><span class="Comment">//: static ideas like layers with the dynamic notion of call-stack depth.</span>
+<span id="L378" class="LineNr">378 </span>string <a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L379" class="LineNr">379 </span>  string::const_iterator first = s<span class="Delimiter">.</span>begin<span class="Delimiter">();</span>
+<span id="L380" class="LineNr">380 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>first != s<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*first<span class="Delimiter">))</span>
+<span id="L381" class="LineNr">381 </span>    ++first<span class="Delimiter">;</span>
+<span id="L382" class="LineNr">382 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>first == s<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L383" class="LineNr">383 </span>
+<span id="L384" class="LineNr">384 </span>  string::const_iterator last = --s<span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L385" class="LineNr">385 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span>last != s<span class="Delimiter">.</span>begin<span class="Delimiter">()</span> &amp;&amp; isspace<span class="Delimiter">(</span>*last<span class="Delimiter">))</span>
+<span id="L386" class="LineNr">386 </span>    --last<span class="Delimiter">;</span>
+<span id="L387" class="LineNr">387 </span>  ++last<span class="Delimiter">;</span>
+<span id="L388" class="LineNr">388 </span>  <span class="Identifier">return</span> string<span class="Delimiter">(</span>first<span class="Delimiter">,</span> last<span class="Delimiter">);</span>
+<span id="L389" class="LineNr">389 </span><span class="Delimiter">}</span>
+<span id="L390" class="LineNr">390 </span>
+<span id="L391" class="LineNr">391 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L392" class="LineNr">392 </span><span class="Comment">#include &lt;vector&gt;</span>
+<span id="L393" class="LineNr">393 </span><span class="Normal">using</span> std::vector<span class="Delimiter">;</span>
+<span id="L394" class="LineNr">394 </span><span class="Comment">#include &lt;list&gt;</span>
+<span id="L395" class="LineNr">395 </span><span class="Normal">using</span> std::list<span class="Delimiter">;</span>
+<span id="L396" class="LineNr">396 </span><span class="Comment">#include &lt;set&gt;</span>
+<span id="L397" class="LineNr">397 </span><span class="Normal">using</span> std::set<span class="Delimiter">;</span>
+<span id="L398" class="LineNr">398 </span>
+<span id="L399" class="LineNr">399 </span><span class="Comment">#include &lt;sstream&gt;</span>
+<span id="L400" class="LineNr">400 </span><span class="Normal">using</span> std::istringstream<span class="Delimiter">;</span>
+<span id="L401" class="LineNr">401 </span><span class="Normal">using</span> std::ostringstream<span class="Delimiter">;</span>
+<span id="L402" class="LineNr">402 </span>
+<span id="L403" class="LineNr">403 </span><span class="Comment">#include &lt;fstream&gt;</span>
+<span id="L404" class="LineNr">404 </span><span class="Normal">using</span> std::ifstream<span class="Delimiter">;</span>
+<span id="L405" class="LineNr">405 </span><span class="Normal">using</span> std::ofstream<span class="Delimiter">;</span>
+<span id="L406" class="LineNr">406 </span>
+<span id="L407" class="LineNr">407 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L408" class="LineNr">408 </span><span class="Comment">//: In future layers we'll use the depth field as follows:</span>
+<span id="L409" class="LineNr">409 </span><span class="Comment">//:</span>
+<span id="L410" class="LineNr">410 </span><span class="Comment">//: Errors will be depth 0.</span>
+<span id="L411" class="LineNr">411 </span><span class="Comment">//: Mu 'applications' will be able to use depths 1-100 as they like.</span>
+<span id="L412" class="LineNr">412 </span><span class="Comment">//: Primitive statements will occupy 101-9989</span>
+<span id="L413" class="LineNr">413 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L413'>Initial_callstack_depth</a> = <span class="Constant">101</span><span class="Delimiter">;</span>
+<span id="L414" class="LineNr">414 </span><span class="Normal">extern</span> <span class="Normal">const</span> <span class="Normal">int</span> <a href='003trace.cc.html#L414'>Max_callstack_depth</a> = <span class="Constant">9989</span><span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span><span class="Comment">//: Finally, details of primitive Mu statements will occupy depth 9990-9999</span>
+<span id="L416" class="LineNr">416 </span><span class="Comment">//: (more on that later as well)</span>
+<span id="L417" class="LineNr">417 </span><span class="Comment">//:</span>
+<span id="L418" class="LineNr">418 </span><span class="Comment">//: This framework should help us hide some details at each level, mixing</span>
+<span id="L419" class="LineNr">419 </span><span class="Comment">//: static ideas like layers with the dynamic notion of call-stack depth.</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/003trace.test.cc.html b/html/subx/003trace.test.cc.html
index 621dab4d..72ec2c33 100644
--- a/html/subx/003trace.test.cc.html
+++ b/html/subx/003trace.test.cc.html
@@ -57,66 +57,66 @@ if ('onhashchange' in window) {
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
 <span id="L1" class="LineNr">  1 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L1'>test_trace_check_compares</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L2" class="LineNr">  2 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L3" class="LineNr">  3 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L2" class="LineNr">  2 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L3" class="LineNr">  3 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L4" class="LineNr">  4 </span><span class="Delimiter">}</span>
 <span id="L5" class="LineNr">  5 </span>
 <span id="L6" class="LineNr">  6 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L6'>test_trace_check_ignores_other_layers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L7" class="LineNr">  7 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L8" class="LineNr">  8 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L9" class="LineNr">  9 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
-<span id="L10" class="LineNr"> 10 </span>  <a href='003trace.cc.html#L237'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L7" class="LineNr">  7 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L8" class="LineNr">  8 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L9" class="LineNr">  9 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L10" class="LineNr"> 10 </span>  <a href='003trace.cc.html#L261'>CHECK_TRACE_DOESNT_CONTAIN</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L11" class="LineNr"> 11 </span><span class="Delimiter">}</span>
 <span id="L12" class="LineNr"> 12 </span>
 <span id="L13" class="LineNr"> 13 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L13'>test_trace_check_ignores_leading_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L14" class="LineNr"> 14 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
+<span id="L14" class="LineNr"> 14 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
 <span id="L15" class="LineNr"> 15 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">too little whitespace</span><span class="Comment">*/</span><span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L16" class="LineNr"> 16 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">too much whitespace</span><span class="Comment">*/</span><span class="Constant">&quot;  foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L17" class="LineNr"> 17 </span><span class="Delimiter">}</span>
 <span id="L18" class="LineNr"> 18 </span>
 <span id="L19" class="LineNr"> 19 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L19'>test_trace_check_ignores_other_lines</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L20" class="LineNr"> 20 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L20" class="LineNr"> 20 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L23" class="LineNr"> 23 </span><span class="Delimiter">}</span>
 <span id="L24" class="LineNr"> 24 </span>
 <span id="L25" class="LineNr"> 25 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L25'>test_trace_check_ignores_other_lines2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L26" class="LineNr"> 26 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L28" class="LineNr"> 28 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: bar&quot;</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L28" class="LineNr"> 28 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: bar&quot;</span><span class="Delimiter">);</span>
 <span id="L29" class="LineNr"> 29 </span><span class="Delimiter">}</span>
 <span id="L30" class="LineNr"> 30 </span>
 <span id="L31" class="LineNr"> 31 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L31'>test_trace_ignores_trailing_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L32" class="LineNr"> 32 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L33" class="LineNr"> 33 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L32" class="LineNr"> 32 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L33" class="LineNr"> 33 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L34" class="LineNr"> 34 </span><span class="Delimiter">}</span>
 <span id="L35" class="LineNr"> 35 </span>
 <span id="L36" class="LineNr"> 36 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L36'>test_trace_ignores_trailing_whitespace2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo &quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo &quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L38" class="LineNr"> 38 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo&quot;</span><span class="Delimiter">);</span>
 <span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
 <span id="L40" class="LineNr"> 40 </span>
 <span id="L41" class="LineNr"> 41 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L41'>test_trace_orders_across_layers</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L43" class="LineNr"> 43 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L44" class="LineNr"> 44 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;qux&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L217'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo^Dtest layer 2: bar^Dtest layer 1: qux^D&quot;</span><span class="Delimiter">);</span>
+<span id="L42" class="LineNr"> 42 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L43" class="LineNr"> 43 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 2&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L44" class="LineNr"> 44 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;qux&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>  <a href='003trace.cc.html#L241'>CHECK_TRACE_CONTENTS</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1: foo^Dtest layer 2: bar^Dtest layer 1: qux^D&quot;</span><span class="Delimiter">);</span>
 <span id="L46" class="LineNr"> 46 </span><span class="Delimiter">}</span>
 <span id="L47" class="LineNr"> 47 </span>
 <span id="L48" class="LineNr"> 48 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L48'>test_trace_supports_count</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L49" class="LineNr"> 49 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
 <span id="L51" class="LineNr"> 51 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
 <span id="L53" class="LineNr"> 53 </span>
 <span id="L54" class="LineNr"> 54 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L54'>test_trace_supports_count2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L55" class="LineNr"> 55 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L56" class="LineNr"> 56 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
+<span id="L55" class="LineNr"> 55 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L56" class="LineNr"> 56 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;bar&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
 <span id="L57" class="LineNr"> 57 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
 <span id="L59" class="LineNr"> 59 </span>
 <span id="L60" class="LineNr"> 60 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L60'>test_trace_count_ignores_trailing_whitespace</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L61" class="LineNr"> 61 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
+<span id="L61" class="LineNr"> 61 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;foo</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
 <span id="L62" class="LineNr"> 62 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>trace_count<span class="Delimiter">(</span><span class="Constant">&quot;test layer 1&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;foo&quot;</span><span class="Delimiter">),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L63" class="LineNr"> 63 </span><span class="Delimiter">}</span>
 <span id="L64" class="LineNr"> 64 </span>
@@ -131,26 +131,26 @@ if ('onhashchange' in window) {
 <span id="L73" class="LineNr"> 73 </span><span class="Comment">// can't check trace because trace methods call 'split'</span>
 <span id="L74" class="LineNr"> 74 </span>
 <span id="L75" class="LineNr"> 75 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L75'>test_split_returns_at_least_one_elem</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L76" class="LineNr"> 76 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L76" class="LineNr"> 76 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L77" class="LineNr"> 77 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L78" class="LineNr"> 78 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
 <span id="L79" class="LineNr"> 79 </span><span class="Delimiter">}</span>
 <span id="L80" class="LineNr"> 80 </span>
 <span id="L81" class="LineNr"> 81 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L81'>test_split_returns_entire_input_when_no_delim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L82" class="LineNr"> 82 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L83" class="LineNr"> 83 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">1</span><span class="Delimiter">);</span>
 <span id="L84" class="LineNr"> 84 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L85" class="LineNr"> 85 </span><span class="Delimiter">}</span>
 <span id="L86" class="LineNr"> 86 </span>
 <span id="L87" class="LineNr"> 87 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L87'>test_split_works</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L88" class="LineNr"> 88 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L88" class="LineNr"> 88 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L89" class="LineNr"> 89 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">2</span><span class="Delimiter">);</span>
 <span id="L90" class="LineNr"> 90 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L91" class="LineNr"> 91 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
 <span id="L92" class="LineNr"> 92 </span><span class="Delimiter">}</span>
 <span id="L93" class="LineNr"> 93 </span>
 <span id="L94" class="LineNr"> 94 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L94'>test_split_works2</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L95" class="LineNr"> 95 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,def,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,&quot;</span><span class="Delimiter">);</span>
 <span id="L96" class="LineNr"> 96 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
 <span id="L97" class="LineNr"> 97 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L98" class="LineNr"> 98 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
@@ -158,7 +158,7 @@ if ('onhashchange' in window) {
 <span id="L100" class="LineNr">100 </span><span class="Delimiter">}</span>
 <span id="L101" class="LineNr">101 </span>
 <span id="L102" class="LineNr">102 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L102'>test_split_handles_multichar_delim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L103" class="LineNr">103 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L330'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,,def,,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,,&quot;</span><span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span>  vector&lt;string&gt; result = <a href='003trace.cc.html#L354'>split</a><span class="Delimiter">(</span><span class="Constant">&quot;abc,,def,,ghi&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;,,&quot;</span><span class="Delimiter">);</span>
 <span id="L104" class="LineNr">104 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>size<span class="Delimiter">(),</span> <span class="Constant">3</span><span class="Delimiter">);</span>
 <span id="L105" class="LineNr">105 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">),</span> <span class="Constant">&quot;abc&quot;</span><span class="Delimiter">);</span>
 <span id="L106" class="LineNr">106 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span>result<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">),</span> <span class="Constant">&quot;def&quot;</span><span class="Delimiter">);</span>
@@ -166,19 +166,19 @@ if ('onhashchange' in window) {
 <span id="L108" class="LineNr">108 </span><span class="Delimiter">}</span>
 <span id="L109" class="LineNr">109 </span>
 <span id="L110" class="LineNr">110 </span><span class="Normal">void</span> <a href='003trace.test.cc.html#L110'>test_trim</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L111" class="LineNr">111 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L112" class="LineNr">112 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L113" class="LineNr">113 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
-<span id="L114" class="LineNr">114 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L115" class="LineNr">115 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L116" class="LineNr">116 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L117" class="LineNr">117 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
-<span id="L118" class="LineNr">118 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L119" class="LineNr">119 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L120" class="LineNr">120 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
-<span id="L121" class="LineNr">121 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L122" class="LineNr">122 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
-<span id="L123" class="LineNr">123 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L354'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L111" class="LineNr">111 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L113" class="LineNr">113 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L114" class="LineNr">114 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L117" class="LineNr">117 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab&quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L119" class="LineNr">119 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L120" class="LineNr">120 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
+<span id="L121" class="LineNr">121 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot; a &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L122" class="LineNr">122 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  a  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;a&quot;</span><span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span>  <a href='002test.cc.html#L31'>CHECK_EQ</a><span class="Delimiter">(</span><a href='003trace.cc.html#L378'>trim</a><span class="Delimiter">(</span><span class="Constant">&quot;  ab  &quot;</span><span class="Delimiter">),</span> <span class="Constant">&quot;ab&quot;</span><span class="Delimiter">);</span>
 <span id="L124" class="LineNr">124 </span><span class="Delimiter">}</span>
 </pre>
 </body>
diff --git a/html/subx/010vm.cc.html b/html/subx/010vm.cc.html
new file mode 100644
index 00000000..3c1aa5f3
--- /dev/null
+++ b/html/subx/010vm.cc.html
@@ -0,0 +1,296 @@
+<!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 - subx/010vm.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.CommentedCode { color: #6c6c6c; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Core data structures for simulating the SubX VM (subset of an x86 processor)</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//:</span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//: At the lowest level (&quot;level 1&quot;) of abstraction, SubX executes x86</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//: instructions provided in the form of an array of bytes, loaded into memory</span>
+<span id="L5" class="LineNr">  5 </span><span class="Comment">//: starting at a specific address.</span>
+<span id="L6" class="LineNr">  6 </span>
+<span id="L7" class="LineNr">  7 </span><span class="SalientComment">//:: registers</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">//: assume segment registers are hard-coded to 0</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment">//: no floating-point, MMX, etc. yet</span>
+<span id="L10" class="LineNr"> 10 </span>
+<span id="L11" class="LineNr"> 11 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Normal">enum</span> <span class="Delimiter">{</span>
+<span id="L13" class="LineNr"> 13 </span>  <a href='010vm.cc.html#L13'>EAX</a><span class="Delimiter">,</span>
+<span id="L14" class="LineNr"> 14 </span>  <a href='010vm.cc.html#L14'>ECX</a><span class="Delimiter">,</span>
+<span id="L15" class="LineNr"> 15 </span>  <a href='010vm.cc.html#L15'>EDX</a><span class="Delimiter">,</span>
+<span id="L16" class="LineNr"> 16 </span>  <a href='010vm.cc.html#L16'>EBX</a><span class="Delimiter">,</span>
+<span id="L17" class="LineNr"> 17 </span>  <a href='010vm.cc.html#L17'>ESP</a><span class="Delimiter">,</span>
+<span id="L18" class="LineNr"> 18 </span>  <a href='010vm.cc.html#L18'>EBP</a><span class="Delimiter">,</span>
+<span id="L19" class="LineNr"> 19 </span>  <a href='010vm.cc.html#L19'>ESI</a><span class="Delimiter">,</span>
+<span id="L20" class="LineNr"> 20 </span>  <a href='010vm.cc.html#L20'>EDI</a><span class="Delimiter">,</span>
+<span id="L21" class="LineNr"> 21 </span>  <a href='010vm.cc.html#L21'>NUM_INT_REGISTERS</a><span class="Delimiter">,</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">};</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Normal">union</span> <a href='010vm.cc.html#L23'>reg</a> <span class="Delimiter">{</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">int32_t</span> i<span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">uint32_t</span> u<span class="Delimiter">;</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">};</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L28" class="LineNr"> 28 </span><a href='010vm.cc.html#L23'>reg</a> Reg[NUM_INT_REGISTERS] = <span class="Delimiter">{</span> <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">}</span> <span class="Delimiter">};</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Normal">uint32_t</span> <a href='010vm.cc.html#L29'>EIP</a> = <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// preserve null pointer</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L31" class="LineNr"> 31 </span>bzero<span class="Delimiter">(</span><a href='010vm.cc.html#L28'>Reg</a><span class="Delimiter">,</span> <span class="Normal">sizeof</span><span class="Delimiter">(</span><a href='010vm.cc.html#L28'>Reg</a><span class="Delimiter">));</span>
+<span id="L32" class="LineNr"> 32 </span><a href='010vm.cc.html#L29'>EIP</a> = <span class="Constant">1</span><span class="Delimiter">;</span>  <span class="Comment">// preserve null pointer</span>
+<span id="L33" class="LineNr"> 33 </span>
+<span id="L34" class="LineNr"> 34 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Contents&quot;)</span>
+<span id="L35" class="LineNr"> 35 </span>cerr &lt;&lt; <span class="Constant">&quot;  registers</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Texts&quot;)</span>
+<span id="L37" class="LineNr"> 37 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;registers&quot;</span><span class="Delimiter">,</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Constant">&quot;SubX currently supports eight 32-bit integer registers: R0 to R7.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L39" class="LineNr"> 39 </span>  <span class="Constant">&quot;R4 (ESP) contains the top of the stack.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Constant">&quot;There's also a register for the address of the currently executing</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Constant">&quot;instruction. It is modified by jumps.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">&quot;Various instructions modify one or more of three 1-bit 'flag' registers,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Constant">&quot;as a side-effect:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Constant">&quot;- the sign flag (SF): usually set if an arithmetic result is negative, or</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Constant">&quot;  <a href='000organization.cc.html#L148'>reset</a> if not.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Constant">&quot;- the zero flag (ZF): usually set if a result is zero, or <a href='000organization.cc.html#L148'>reset</a> if not.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Constant">&quot;- the overflow flag (OF): usually set if an arithmetic result overflows.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Constant">&quot;The flag bits are read by conditional jumps.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Constant">&quot;We don't support non-integer (floating-point) registers yet.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L53" class="LineNr"> 53 </span><span class="Delimiter">);</span>
+<span id="L54" class="LineNr"> 54 </span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Comment">// the subset of x86 flag registers we care about</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Normal">bool</span> SF =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// sign flag</span>
+<span id="L58" class="LineNr"> 58 </span><span class="Normal">bool</span> ZF =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// zero flag</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Normal">bool</span> <a href='010vm.cc.html#L59'>OF</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>  <span class="Comment">// overflow flag</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L61" class="LineNr"> 61 </span>SF = ZF = <a href='010vm.cc.html#L59'>OF</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L62" class="LineNr"> 62 </span>
+<span id="L63" class="LineNr"> 63 </span><span class="Comment">//: how the flag registers are updated after each instruction</span>
+<span id="L64" class="LineNr"> 64 </span>
+<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L66" class="LineNr"> 66 </span><span class="Comment">// Combine 'arg1' and 'arg2' with arithmetic operation 'op' and store the</span>
+<span id="L67" class="LineNr"> 67 </span><span class="Comment">// result in 'arg1', then update flags.</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Comment">// beware: no side-effects in args</span>
+<span id="L69" class="LineNr"> 69 </span><span class="Comment">#define BINARY_ARITHMETIC_OP(op, arg1, arg2) { \</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Comment">/*</span><span class="Comment"> arg1 and arg2 must be signed </span><span class="Comment">*/</span> \
+<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">int64_t</span> tmp = arg1 op arg2<span class="Delimiter">;</span> \
+<span id="L72" class="LineNr"> 72 </span>  arg1 = arg1 op arg2<span class="Delimiter">;</span> \
+<span id="L73" class="LineNr"> 73 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg1 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span> \
+<span id="L74" class="LineNr"> 74 </span>  SF = <span class="Delimiter">(</span>arg1 &lt; <span class="Constant">0</span><span class="Delimiter">);</span> \
+<span id="L75" class="LineNr"> 75 </span>  ZF = <span class="Delimiter">(</span>arg1 == <span class="Constant">0</span><span class="Delimiter">);</span> \
+<span id="L76" class="LineNr"> 76 </span>  <a href='010vm.cc.html#L59'>OF</a> = <span class="Delimiter">(</span>arg1 != tmp<span class="Delimiter">);</span> \
+<span id="L77" class="LineNr"> 77 </span><span class="Delimiter">}</span>
+<span id="L78" class="LineNr"> 78 </span>
+<span id="L79" class="LineNr"> 79 </span><span class="Comment">// Combine 'arg1' and 'arg2' with bitwise operation 'op' and store the result</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment">// in 'arg1', then update flags.</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Comment">#define BINARY_BITWISE_OP(op, arg1, arg2) { \</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Comment">/*</span><span class="Comment"> arg1 and arg2 must be unsigned </span><span class="Comment">*/</span> \
+<span id="L83" class="LineNr"> 83 </span>  arg1 = arg1 op arg2<span class="Delimiter">;</span> \
+<span id="L84" class="LineNr"> 84 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg1 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span> \
+<span id="L85" class="LineNr"> 85 </span>  SF = <span class="Delimiter">(</span>arg1 &gt;&gt; <span class="Constant">31</span><span class="Delimiter">);</span> \
+<span id="L86" class="LineNr"> 86 </span>  ZF = <span class="Delimiter">(</span>arg1 == <span class="Constant">0</span><span class="Delimiter">);</span> \
+<span id="L87" class="LineNr"> 87 </span>  <a href='010vm.cc.html#L59'>OF</a> =<span class="Constant"> false</span><span class="Delimiter">;</span> \
+<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">}</span>
+<span id="L89" class="LineNr"> 89 </span>
+<span id="L90" class="LineNr"> 90 </span><span class="SalientComment">//:: simulated RAM</span>
+<span id="L91" class="LineNr"> 91 </span>
+<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L93" class="LineNr"> 93 </span>vector&lt;<span class="Normal">uint8_t</span>&gt; <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">;</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Normal">uint32_t</span> <a href='010vm.cc.html#L94'>Mem_offset</a> = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span><span class="Normal">uint32_t</span> <a href='010vm.cc.html#L95'>End_of_program</a> = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">:(before &quot;End Reset&quot;)</span>
+<span id="L97" class="LineNr"> 97 </span><a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>clear<span class="Delimiter">();</span>
+<span id="L98" class="LineNr"> 98 </span><a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>resize<span class="Delimiter">(</span><span class="Constant">1024</span><span class="Delimiter">);</span>
+<span id="L99" class="LineNr"> 99 </span><a href='010vm.cc.html#L94'>Mem_offset</a> = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L100" class="LineNr">100 </span><a href='010vm.cc.html#L95'>End_of_program</a> = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(code)</span>
+<span id="L102" class="LineNr">102 </span><span class="Comment">// These helpers depend on Mem being laid out contiguously (so you can't use a</span>
+<span id="L103" class="LineNr">103 </span><span class="Comment">// map, etc.) and on the host also being little-endian.</span>
+<span id="L104" class="LineNr">104 </span><span class="Normal">inline</span> <span class="Normal">uint8_t</span> <a href='010vm.cc.html#L104'>read_mem_u8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L105" class="LineNr">105 </span>  <span class="Identifier">return</span> <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">);</span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">}</span>
+<span id="L107" class="LineNr">107 </span><span class="Normal">inline</span> <span class="Normal">int8_t</span> <a href='010vm.cc.html#L107'>read_mem_i8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Identifier">return</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">int8_t</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L109" class="LineNr">109 </span><span class="Delimiter">}</span>
+<span id="L110" class="LineNr">110 </span><span class="Normal">inline</span> <span class="Normal">uint32_t</span> <a href='010vm.cc.html#L110'>read_mem_u32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Identifier">return</span> *<span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L112" class="LineNr">112 </span><span class="Delimiter">}</span>
+<span id="L113" class="LineNr">113 </span><span class="Normal">inline</span> <span class="Normal">int32_t</span> <a href='010vm.cc.html#L113'>read_mem_i32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Identifier">return</span> *<span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">int32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L115" class="LineNr">115 </span><span class="Delimiter">}</span>
+<span id="L116" class="LineNr">116 </span>
+<span id="L117" class="LineNr">117 </span><span class="Normal">inline</span> <span class="Normal">uint8_t</span>* <a href='010vm.cc.html#L117'>mem_addr_u8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L118" class="LineNr">118 </span>  <span class="Identifier">return</span> &amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">);</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">}</span>
+<span id="L120" class="LineNr">120 </span><span class="Normal">inline</span> <span class="Normal">int8_t</span>* <a href='010vm.cc.html#L120'>mem_addr_i8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Identifier">return</span> <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">int8_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L122" class="LineNr">122 </span><span class="Delimiter">}</span>
+<span id="L123" class="LineNr">123 </span><span class="Normal">inline</span> <span class="Normal">uint32_t</span>* <a href='010vm.cc.html#L123'>mem_addr_u32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Identifier">return</span> <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
+<span id="L126" class="LineNr">126 </span><span class="Normal">inline</span> <span class="Normal">int32_t</span>* <a href='010vm.cc.html#L126'>mem_addr_i32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Identifier">return</span> <span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">int32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">));</span>
+<span id="L128" class="LineNr">128 </span><span class="Delimiter">}</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span><span class="Normal">inline</span> <span class="Normal">void</span> <a href='010vm.cc.html#L130'>write_mem_u8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L131" class="LineNr">131 </span>  <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">)</span> = val<span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span><span class="Normal">inline</span> <span class="Normal">void</span> <a href='010vm.cc.html#L133'>write_mem_i8</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">,</span> <span class="Normal">int8_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>  <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">)</span> = <span class="Normal">static_cast</span>&lt;<span class="Normal">uint8_t</span>&gt;<span class="Delimiter">(</span>val<span class="Delimiter">);</span>
+<span id="L135" class="LineNr">135 </span><span class="Delimiter">}</span>
+<span id="L136" class="LineNr">136 </span><span class="Normal">inline</span> <span class="Normal">void</span> <a href='010vm.cc.html#L136'>write_mem_u32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">,</span> <span class="Normal">uint32_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>  *<span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">uint32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">))</span> = val<span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span><span class="Normal">inline</span> <span class="Normal">void</span> <a href='010vm.cc.html#L139'>write_mem_i32</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> addr<span class="Delimiter">,</span> <span class="Normal">int32_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L140" class="LineNr">140 </span>  *<span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">int32_t</span>*&gt;<span class="Delimiter">(</span>&amp;Mem<span class="Delimiter">.</span>at<span class="Delimiter">(</span>addr-Mem_offset<span class="Delimiter">))</span> = val<span class="Delimiter">;</span>
+<span id="L141" class="LineNr">141 </span><span class="Delimiter">}</span>
+<span id="L142" class="LineNr">142 </span>
+<span id="L143" class="LineNr">143 </span><span class="SalientComment">//:: core interpreter loop</span>
+<span id="L144" class="LineNr">144 </span>
+<span id="L145" class="LineNr">145 </span><span class="Delimiter">:(code)</span>
+<span id="L146" class="LineNr">146 </span><span class="Comment">// skeleton of how x86 instructions are decoded</span>
+<span id="L147" class="LineNr">147 </span><span class="Normal">void</span> <a href='010vm.cc.html#L147'>run_one_instruction</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Normal">uint8_t</span> op=<span class="Constant">0</span><span class="Delimiter">,</span> op2=<span class="Constant">0</span><span class="Delimiter">,</span> op3=<span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;inst: 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L150" class="LineNr">150 </span><span class="CommentedCode">//?   cerr &lt;&lt; &quot;inst: 0x&quot; &lt;&lt; EIP &lt;&lt; '\n';</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>op = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Normal">case</span> <span class="Constant">0xf4</span>:  <span class="Comment">// hlt</span>
+<span id="L153" class="LineNr">153 </span>    <a href='010vm.cc.html#L29'>EIP</a> = <a href='010vm.cc.html#L95'>End_of_program</a><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Comment">// End Single-Byte Opcodes</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">case</span> <span class="Constant">0x0f</span>:
+<span id="L157" class="LineNr">157 </span>    <span class="Normal">switch</span><span class="Delimiter">(</span>op2 = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L158" class="LineNr">158 </span>    <span class="Comment">// End Two-Byte Opcodes Starting With 0f</span>
+<span id="L159" class="LineNr">159 </span>    <span class="Normal">default</span>:
+<span id="L160" class="LineNr">160 </span>      cerr &lt;&lt; <span class="Constant">&quot;unrecognized second opcode after 0f: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>op2<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L161" class="LineNr">161 </span>      <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L162" class="LineNr">162 </span>      exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L163" class="LineNr">163 </span>    <span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Normal">case</span> <span class="Constant">0xf3</span>:
+<span id="L166" class="LineNr">166 </span>    <span class="Normal">switch</span><span class="Delimiter">(</span>op2 = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>    <span class="Comment">// End Two-Byte Opcodes Starting With f3</span>
+<span id="L168" class="LineNr">168 </span>    <span class="Normal">case</span> <span class="Constant">0x0f</span>:
+<span id="L169" class="LineNr">169 </span>      <span class="Normal">switch</span><span class="Delimiter">(</span>op3 = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>      <span class="Comment">// End Three-Byte Opcodes Starting With f3 0f</span>
+<span id="L171" class="LineNr">171 </span>      <span class="Normal">default</span>:
+<span id="L172" class="LineNr">172 </span>        cerr &lt;&lt; <span class="Constant">&quot;unrecognized third opcode after f3 0f: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>op3<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span>        <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>        exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>      <span class="Delimiter">}</span>
+<span id="L176" class="LineNr">176 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span>    <span class="Normal">default</span>:
+<span id="L178" class="LineNr">178 </span>      cerr &lt;&lt; <span class="Constant">&quot;unrecognized second opcode after f3: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>op2<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span>      <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L180" class="LineNr">180 </span>      exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L181" class="LineNr">181 </span>    <span class="Delimiter">}</span>
+<span id="L182" class="LineNr">182 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L183" class="LineNr">183 </span>  <span class="Normal">default</span>:
+<span id="L184" class="LineNr">184 </span>    cerr &lt;&lt; <span class="Constant">&quot;unrecognized opcode: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L185" class="LineNr">185 </span>    <a href='003trace.cc.html#L193'>DUMP</a><span class="Delimiter">(</span><span class="Constant">&quot;&quot;</span><span class="Delimiter">);</span>
+<span id="L186" class="LineNr">186 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Delimiter">}</span>
+<span id="L188" class="LineNr">188 </span><span class="Delimiter">}</span>
+<span id="L189" class="LineNr">189 </span>
+<span id="L190" class="LineNr">190 </span><span class="Normal">inline</span> <span class="Normal">uint8_t</span> <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Identifier">return</span> <a href='010vm.cc.html#L104'>read_mem_u8</a><span class="Delimiter">(</span>EIP++<span class="Delimiter">);</span>
+<span id="L192" class="LineNr">192 </span><span class="Delimiter">}</span>
+<span id="L193" class="LineNr">193 </span>
+<span id="L194" class="LineNr">194 </span><span class="Comment">//: start tracking supported opcodes</span>
+<span id="L195" class="LineNr">195 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L196" class="LineNr">196 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> string&gt; <a href='010vm.cc.html#L196'>name</a><span class="Delimiter">;</span>
+<span id="L197" class="LineNr">197 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> string&gt; <a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">;</span>
+<span id="L198" class="LineNr">198 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> string&gt; <a href='010vm.cc.html#L198'>name_f3</a><span class="Delimiter">;</span>
+<span id="L199" class="LineNr">199 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> string&gt; <a href='010vm.cc.html#L199'>name_f3_0f</a><span class="Delimiter">;</span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L201" class="LineNr">201 </span><a href='010vm.cc.html#L203'>init_op_names</a><span class="Delimiter">();</span>
+<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(code)</span>
+<span id="L203" class="LineNr">203 </span><span class="Normal">void</span> <a href='010vm.cc.html#L203'>init_op_names</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L204" class="LineNr">204 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;f4&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;halt&quot;</span><span class="Delimiter">);</span>
+<span id="L205" class="LineNr">205 </span>  <span class="Comment">// End Initialize Op Names(name)</span>
+<span id="L206" class="LineNr">206 </span><span class="Delimiter">}</span>
+<span id="L207" class="LineNr">207 </span>
+<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Special-cases(key)&quot;)</span>
+<span id="L209" class="LineNr">209 </span><span class="Normal">if</span> <span class="Delimiter">(</span>key == <span class="Constant">&quot;opcodes&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L210" class="LineNr">210 </span>  cerr &lt;&lt; <span class="Constant">&quot;Opcodes currently supported by SubX:</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::iterator p = <a href='010vm.cc.html#L196'>name</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='010vm.cc.html#L196'>name</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L212" class="LineNr">212 </span>    cerr &lt;&lt; <span class="Constant">&quot;  &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L213" class="LineNr">213 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::iterator p = <a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L214" class="LineNr">214 </span>    cerr &lt;&lt; <span class="Constant">&quot;  0f &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::iterator p = <a href='010vm.cc.html#L198'>name_f3</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='010vm.cc.html#L198'>name_f3</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L216" class="LineNr">216 </span>    cerr &lt;&lt; <span class="Constant">&quot;  f3 &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> string&gt;::iterator p = <a href='010vm.cc.html#L199'>name_f3_0f</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='010vm.cc.html#L199'>name_f3_0f</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L218" class="LineNr">218 </span>    cerr &lt;&lt; <span class="Constant">&quot;  f3 0f &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>second &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  cerr &lt;&lt; <span class="Constant">&quot;Run `subx help instructions` for details on <a href='011run.cc.html#L109'>words</a> like 'r32' and 'disp8'.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L221" class="LineNr">221 </span><span class="Delimiter">}</span>
+<span id="L222" class="LineNr">222 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Contents&quot;)</span>
+<span id="L223" class="LineNr">223 </span>cerr &lt;&lt; <span class="Constant">&quot;  opcodes</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L224" class="LineNr">224 </span>
+<span id="L225" class="LineNr">225 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L226" class="LineNr">226 </span><span class="Comment">#include &lt;iomanip&gt;</span>
+<span id="L227" class="LineNr">227 </span><span class="Comment">#define HEXBYTE  std::hex &lt;&lt; std::setw(2) &lt;&lt; std::setfill('0')</span>
+<span id="L228" class="LineNr">228 </span><span class="Comment">#define HEXWORD  std::hex &lt;&lt; std::setw(8) &lt;&lt; std::setfill('0')</span>
+<span id="L229" class="LineNr">229 </span><span class="Comment">// ugly that iostream doesn't print uint8_t as an integer</span>
+<span id="L230" class="LineNr">230 </span><span class="Comment">#define NUM(X) static_cast&lt;int&gt;(X)</span>
+<span id="L231" class="LineNr">231 </span><span class="Comment">#include &lt;stdint.h&gt;</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/011run.cc.html b/html/subx/011run.cc.html
new file mode 100644
index 00000000..0f5aec0f
--- /dev/null
+++ b/html/subx/011run.cc.html
@@ -0,0 +1,325 @@
+<!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 - subx/011run.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Running SubX programs on the VM.</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//: (Not to be confused with the 'run' subcommand for running ELF binaries on</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//: the VM. That comes later.)</span>
+<span id="L5" class="LineNr">  5 </span>
+<span id="L6" class="LineNr">  6 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Texts&quot;)</span>
+<span id="L7" class="LineNr">  7 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;syntax&quot;</span><span class="Delimiter">,</span>
+<span id="L8" class="LineNr">  8 </span>  <span class="Constant">&quot;SubX programs consist of <a href='011run.cc.html#L95'>segments</a>, each segment in turn consisting of lines.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="Constant">&quot;Line-endings are significant; each <a href='011run.cc.html#L108'>line</a> should contain a single</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">&quot;instruction, macro or directive.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L11" class="LineNr"> 11 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L12" class="LineNr"> 12 </span>  <span class="Constant">&quot;Comments <a href='011run.cc.html#L103'>start</a> with the '#' character. It should be at the <a href='011run.cc.html#L103'>start</a> of a <a href='011run.cc.html#L113'>word</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L13" class="LineNr"> 13 </span>  <span class="Constant">&quot;(start of <a href='011run.cc.html#L108'>line</a>, or following a space).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L14" class="LineNr"> 14 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L15" class="LineNr"> 15 </span>  <span class="Constant">&quot;Each segment starts with a header <a href='011run.cc.html#L108'>line</a>: a '==' delimiter followed by the</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L16" class="LineNr"> 16 </span>  <span class="Constant">&quot;starting address for the segment.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L17" class="LineNr"> 17 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L18" class="LineNr"> 18 </span>  <span class="Constant">&quot;The starting address for a segment has some finicky requirements. But just</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Constant">&quot;start with a round number, and `subx` will try to guide you to a valid</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Constant">&quot;configuration.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Constant">&quot;A good rule of thumb is to try to <a href='011run.cc.html#L103'>start</a> the first segment at the default</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Constant">&quot;address of 0x08048000, and to <a href='011run.cc.html#L103'>start</a> each subsequent segment at least 0x1000</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Constant">&quot;(most common page size) bytes after the last.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Constant">&quot;If a segment occupies than 0x1000 bytes you'll need to push subsequent</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Constant">&quot;segments further down.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Constant">&quot;Currently only the first segment contains executable code (because it gets</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Constant">&quot;annoying to have to change addresses in later <a href='011run.cc.html#L95'>segments</a> every time an earlier</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L28" class="LineNr"> 28 </span>  <span class="Constant">&quot;one changes length; one of those finicky requirements).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L29" class="LineNr"> 29 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Constant">&quot;Lines consist of a series of words. Words can contain arbitrary metadata</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Constant">&quot;after a '/', but they can never contain whitespace. Metadata has no effect</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Constant">&quot;at runtime, but can be handy when rewriting macros.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">&quot;Check out some examples in this directory (ex*.subx)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Constant">&quot;Programming in machine code can be annoying, but let's see if we can make</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Constant">&quot;it nice enough to be able to write a compiler in it.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Delimiter">);</span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Contents&quot;)</span>
+<span id="L39" class="LineNr"> 39 </span>cerr &lt;&lt; <span class="Constant">&quot;  syntax</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L40" class="LineNr"> 40 </span>
+<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(scenario add_imm32_to_eax)</span>
+<span id="L42" class="LineNr"> 42 </span><span class="Comment"># At the lowest level, SubX programs are a series of hex bytes, each</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Comment"># (variable-length) instruction on one line.</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Comment">#</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Comment"># Later we'll make things nicer using macros. But you'll always be able to</span>
+<span id="L46" class="LineNr"> 46 </span><span class="Comment"># insert hex bytes out of instructions.</span>
+<span id="L47" class="LineNr"> 47 </span><span class="Comment">#</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Comment"># As you can see, comments start with '#' and are ignored.</span>
+<span id="L49" class="LineNr"> 49 </span>
+<span id="L50" class="LineNr"> 50 </span><span class="Comment"># Segment headers start with '==', specifying the hex address where they</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Comment"># begin. The first segment is always assumed to be code.</span>
+<span id="L52" class="LineNr"> 52 </span>== <span class="Constant">0x1</span>
+<span id="L53" class="LineNr"> 53 </span>
+<span id="L54" class="LineNr"> 54 </span><span class="Comment"># We don't show it here, but all lines can have metadata after a ':'.</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Comment"># All words can have metadata after a '/'. No spaces allowed in word metadata, of course.</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Comment"># Metadata doesn't directly form instructions, but some macros may look at it.</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Comment"># Unrecognized metadata never causes errors, so you can also use it for</span>
+<span id="L58" class="LineNr"> 58 </span><span class="Comment"># documentation.</span>
+<span id="L59" class="LineNr"> 59 </span>
+<span id="L60" class="LineNr"> 60 </span><span class="Comment"># Within the code segment, x86 instructions consist of the following parts (see cheatsheet.pdf):</span>
+<span id="L61" class="LineNr"> 61 </span><span class="Comment">#   opcode        ModR/M                    SIB                   displacement    immediate</span>
+<span id="L62" class="LineNr"> 62 </span><span class="Comment">#   instruction   mod, reg, Reg/Mem bits    scale, index, base</span>
+<span id="L63" class="LineNr"> 63 </span><span class="Comment">#   1-3 bytes     0/1 byte                  0/1 byte              0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L64" class="LineNr"> 64 </span>    <span class="PreProc">0</span><span class="Constant">5</span>                                                                            0a 0b 0c 0d  <span class="Comment"># add 0x0d0c0b0a to EAX</span>
+<span id="L65" class="LineNr"> 65 </span>
+<span id="L66" class="LineNr"> 66 </span><span class="Comment"># This program, when run, causes the following events in the trace:</span>
+<span id="L67" class="LineNr"> 67 </span><span class="traceContains">+load: 0x00000001 -&gt; 05</span>
+<span id="L68" class="LineNr"> 68 </span><span class="traceContains">+load: 0x00000002 -&gt; 0a</span>
+<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+load: 0x00000003 -&gt; 0b</span>
+<span id="L70" class="LineNr"> 70 </span><span class="traceContains">+load: 0x00000004 -&gt; 0c</span>
+<span id="L71" class="LineNr"> 71 </span><span class="traceContains">+load: 0x00000005 -&gt; 0d</span>
+<span id="L72" class="LineNr"> 72 </span><span class="traceContains">+run: add <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a to <a href='010vm.cc.html#L23'>reg</a> <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L73" class="LineNr"> 73 </span><span class="traceContains">+run: storing 0x0d0c0b0a</span>
+<span id="L74" class="LineNr"> 74 </span>
+<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">:(code)</span>
+<span id="L76" class="LineNr"> 76 </span><span class="Comment">// top-level helper for scenarios: parse the input, transform any macros, load</span>
+<span id="L77" class="LineNr"> 77 </span><span class="Comment">// the final hex bytes into memory, run it</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Normal">void</span> <a href='011run.cc.html#L78'>run</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; text_bytes<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L79" class="LineNr"> 79 </span>  <a href='011run.cc.html#L94'>program</a> p<span class="Delimiter">;</span>
+<span id="L80" class="LineNr"> 80 </span>  istringstream in<span class="Delimiter">(</span>text_bytes<span class="Delimiter">);</span>
+<span id="L81" class="LineNr"> 81 </span>  <a href='011run.cc.html#L122'>parse</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> p<span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// if any stage raises errors, stop immediately</span>
+<span id="L83" class="LineNr"> 83 </span>  transform<span class="Delimiter">(</span>p<span class="Delimiter">);</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>  <a href='011run.cc.html#L195'>load</a><span class="Delimiter">(</span>p<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='010vm.cc.html#L29'>EIP</a> &lt; <a href='010vm.cc.html#L95'>End_of_program</a><span class="Delimiter">)</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='010vm.cc.html#L147'>run_one_instruction</a><span class="Delimiter">();</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span>
+<span id="L91" class="LineNr"> 91 </span><span class="SalientComment">//:: core data structures</span>
+<span id="L92" class="LineNr"> 92 </span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Normal">struct</span> <a href='011run.cc.html#L94'>program</a> <span class="Delimiter">{</span>
+<span id="L95" class="LineNr"> 95 </span>  vector&lt;segment&gt; <a href='011run.cc.html#L95'>segments</a><span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Comment">// random ideas for other things we may eventually need</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Comment">//map&lt;name, address&gt; globals;</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Comment">//vector&lt;recipe&gt; recipes;</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="Comment">//map&lt;string, type_info&gt; types;</span>
+<span id="L100" class="LineNr">100 </span><span class="Delimiter">};</span>
+<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(before &quot;struct program&quot;)</span>
+<span id="L102" class="LineNr">102 </span><span class="Normal">struct</span> segment <span class="Delimiter">{</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Normal">uint32_t</span> <a href='011run.cc.html#L103'>start</a><span class="Delimiter">;</span>
+<span id="L104" class="LineNr">104 </span>  vector&lt;line&gt; <a href='011run.cc.html#L104'>lines</a><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span>  segment<span class="Delimiter">()</span> :<a href='011run.cc.html#L103'>start</a><span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{}</span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">};</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(before &quot;struct segment&quot;)</span>
+<span id="L108" class="LineNr">108 </span><span class="Normal">struct</span> <a href='011run.cc.html#L108'>line</a> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>  vector&lt;word&gt; <a href='011run.cc.html#L109'>words</a><span class="Delimiter">;</span>
+<span id="L110" class="LineNr">110 </span>  vector&lt;string&gt; metadata<span class="Delimiter">;</span>
+<span id="L111" class="LineNr">111 </span><span class="Delimiter">};</span>
+<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;struct line&quot;)</span>
+<span id="L113" class="LineNr">113 </span><span class="Normal">struct</span> <a href='011run.cc.html#L113'>word</a> <span class="Delimiter">{</span>
+<span id="L114" class="LineNr">114 </span>  string <a href='011run.cc.html#L114'>original</a><span class="Delimiter">;</span>
+<span id="L115" class="LineNr">115 </span>  string <a href='011run.cc.html#L115'>data</a><span class="Delimiter">;</span>
+<span id="L116" class="LineNr">116 </span>  vector&lt;string&gt; metadata<span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">};</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span><span class="SalientComment">//:: parse</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(code)</span>
+<span id="L122" class="LineNr">122 </span><span class="Normal">void</span> <a href='011run.cc.html#L122'>parse</a><span class="Delimiter">(</span>istream&amp; fin<span class="Delimiter">,</span> program&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L123" class="LineNr">123 </span>  vector&lt;line&gt; l<span class="Delimiter">;</span>
+<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;begin&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L260'>has_data</a><span class="Delimiter">(</span>fin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L126" class="LineNr">126 </span>    string line_data<span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </span>    getline<span class="Delimiter">(</span>fin<span class="Delimiter">,</span> line_data<span class="Delimiter">);</span>
+<span id="L128" class="LineNr">128 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;line: &quot;</span> &lt;&lt; line_data &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L129" class="LineNr">129 </span>    istringstream lin<span class="Delimiter">(</span>line_data<span class="Delimiter">);</span>
+<span id="L130" class="LineNr">130 </span>    vector&lt;word&gt; w<span class="Delimiter">;</span>
+<span id="L131" class="LineNr">131 </span>    <span class="Normal">while</span> <span class="Delimiter">(</span><a href='001help.cc.html#L260'>has_data</a><span class="Delimiter">(</span>lin<span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L132" class="LineNr">132 </span>      string word_data<span class="Delimiter">;</span>
+<span id="L133" class="LineNr">133 </span>      lin &gt;&gt; word_data<span class="Delimiter">;</span>
+<span id="L134" class="LineNr">134 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>word_data<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>word_data == <span class="Constant">&quot;==&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L136" class="LineNr">136 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>!l<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L137" class="LineNr">137 </span>          assert<span class="Delimiter">(</span>!out<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L138" class="LineNr">138 </span>          <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;flushing to segment&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L139" class="LineNr">139 </span>          out<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>swap<span class="Delimiter">(</span>l<span class="Delimiter">);</span>
+<span id="L140" class="LineNr">140 </span>        <span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>        segment s<span class="Delimiter">;</span>
+<span id="L142" class="LineNr">142 </span>        lin &gt;&gt; std::hex &gt;&gt; s<span class="Delimiter">.</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">;</span>
+<span id="L143" class="LineNr">143 </span>        <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new segment from &quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; s<span class="Delimiter">.</span><a href='011run.cc.html#L103'>start</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L144" class="LineNr">144 </span>        out<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L145" class="LineNr">145 </span>        <span class="Comment">// todo?</span>
+<span id="L146" class="LineNr">146 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>  <span class="Comment">// skip rest of line</span>
+<span id="L147" class="LineNr">147 </span>      <span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>word_data[<span class="Constant">0</span>] == <span class="Constant">':'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L149" class="LineNr">149 </span>        <span class="Comment">// todo: line metadata</span>
+<span id="L150" class="LineNr">150 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L151" class="LineNr">151 </span>      <span class="Delimiter">}</span>
+<span id="L152" class="LineNr">152 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>word_data[<span class="Constant">0</span>] == <span class="Constant">'#'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L153" class="LineNr">153 </span>        <span class="Comment">// comment</span>
+<span id="L154" class="LineNr">154 </span>        <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L155" class="LineNr">155 </span>      <span class="Delimiter">}</span>
+<span id="L156" class="LineNr">156 </span>      w<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='011run.cc.html#L113'>word</a><span class="Delimiter">());</span>
+<span id="L157" class="LineNr">157 </span>      w<span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L114'>original</a> = word_data<span class="Delimiter">;</span>
+<span id="L158" class="LineNr">158 </span>      istringstream win<span class="Delimiter">(</span>word_data<span class="Delimiter">);</span>
+<span id="L159" class="LineNr">159 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>getline<span class="Delimiter">(</span>win<span class="Delimiter">,</span> w<span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L160" class="LineNr">160 </span>        string m<span class="Delimiter">;</span>
+<span id="L161" class="LineNr">161 </span>        <span class="Normal">while</span> <span class="Delimiter">(</span>getline<span class="Delimiter">(</span>win<span class="Delimiter">,</span> m<span class="Delimiter">,</span> <span class="Constant">'/'</span><span class="Delimiter">))</span>
+<span id="L162" class="LineNr">162 </span>          w<span class="Delimiter">.</span>back<span class="Delimiter">().</span>metadata<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>m<span class="Delimiter">);</span>
+<span id="L163" class="LineNr">163 </span>      <span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span>      <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;new <a href='011run.cc.html#L113'>word</a>: &quot;</span> &lt;&lt; w<span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L115'>data</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L165" class="LineNr">165 </span>    <span class="Delimiter">}</span>
+<span id="L166" class="LineNr">166 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!w<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>      l<span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='011run.cc.html#L108'>line</a><span class="Delimiter">());</span>
+<span id="L168" class="LineNr">168 </span>      l<span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>swap<span class="Delimiter">(</span>w<span class="Delimiter">);</span>
+<span id="L169" class="LineNr">169 </span>    <span class="Delimiter">}</span>
+<span id="L170" class="LineNr">170 </span>  <span class="Delimiter">}</span>
+<span id="L171" class="LineNr">171 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!l<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L172" class="LineNr">172 </span>    assert<span class="Delimiter">(</span>!out<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">());</span>
+<span id="L173" class="LineNr">173 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;flushing to segment&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L174" class="LineNr">174 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>back<span class="Delimiter">().</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>swap<span class="Delimiter">(</span>l<span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Delimiter">}</span>
+<span id="L176" class="LineNr">176 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;parse&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;done&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">}</span>
+<span id="L178" class="LineNr">178 </span>
+<span id="L179" class="LineNr">179 </span><span class="SalientComment">//:: transform</span>
+<span id="L180" class="LineNr">180 </span>
+<span id="L181" class="LineNr">181 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L182" class="LineNr">182 </span><span class="Normal">typedef</span> <span class="Normal">void</span> <span class="Delimiter">(</span>*transform_fn<span class="Delimiter">)(</span>program&amp;<span class="Delimiter">);</span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L184" class="LineNr">184 </span>vector&lt;transform_fn&gt; <a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">;</span>
+<span id="L185" class="LineNr">185 </span>
+<span id="L186" class="LineNr">186 </span><span class="Normal">void</span> transform<span class="Delimiter">(</span>program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L187" class="LineNr">187 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;begin&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L188" class="LineNr">188 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> t = <span class="Constant">0</span><span class="Delimiter">;</span>  t &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">);</span>  ++t<span class="Delimiter">)</span>
+<span id="L189" class="LineNr">189 </span>    <span class="Delimiter">(</span>*Transform<span class="Delimiter">.</span>at<span class="Delimiter">(</span>t<span class="Delimiter">))(</span>p<span class="Delimiter">);</span>
+<span id="L190" class="LineNr">190 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;done&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
+<span id="L192" class="LineNr">192 </span>
+<span id="L193" class="LineNr">193 </span><span class="SalientComment">//:: load</span>
+<span id="L194" class="LineNr">194 </span>
+<span id="L195" class="LineNr">195 </span><span class="Normal">void</span> <a href='011run.cc.html#L195'>load</a><span class="Delimiter">(</span><span class="Normal">const</span> program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L196" class="LineNr">196 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;begin&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L197" class="LineNr">197 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L198" class="LineNr">198 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;no code to <a href='011run.cc.html#L78'>run</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L199" class="LineNr">199 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L200" class="LineNr">200 </span>  <span class="Delimiter">}</span>
+<span id="L201" class="LineNr">201 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>   i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L202" class="LineNr">202 </span>    <span class="Normal">const</span> segment&amp; seg = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L203" class="LineNr">203 </span>    <span class="Normal">uint32_t</span> addr = seg<span class="Delimiter">.</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">;</span>
+<span id="L204" class="LineNr">204 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;loading segment &quot;</span> &lt;&lt; i &lt;&lt; <span class="Constant">&quot; from &quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; addr &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L205" class="LineNr">205 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>seg<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L206" class="LineNr">206 </span>      <span class="Normal">const</span> line&amp; l = seg<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L207" class="LineNr">207 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> k = <span class="Constant">0</span><span class="Delimiter">;</span>  k &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>l<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++k<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L208" class="LineNr">208 </span>        <span class="Normal">const</span> word&amp; w = l<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>k<span class="Delimiter">);</span>
+<span id="L209" class="LineNr">209 </span>        <span class="Normal">uint8_t</span> val = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L211" class="LineNr">211 </span>        <a href='010vm.cc.html#L130'>write_mem_u8</a><span class="Delimiter">(</span>addr<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
+<span id="L212" class="LineNr">212 </span>        <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; -&gt; &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span><a href='010vm.cc.html#L104'>read_mem_u8</a><span class="Delimiter">(</span>addr<span class="Delimiter">))</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>        ++addr<span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>      <span class="Delimiter">}</span>
+<span id="L215" class="LineNr">215 </span>    <span class="Delimiter">}</span>
+<span id="L216" class="LineNr">216 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i == <span class="Constant">0</span><span class="Delimiter">)</span> <a href='010vm.cc.html#L95'>End_of_program</a> = addr<span class="Delimiter">;</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Delimiter">}</span>
+<span id="L218" class="LineNr">218 </span>  <a href='010vm.cc.html#L29'>EIP</a> = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;load&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;done&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">}</span>
+<span id="L221" class="LineNr">221 </span>
+<span id="L222" class="LineNr">222 </span><span class="Normal">uint8_t</span> <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L223" class="LineNr">223 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L224" class="LineNr">224 </span>  <span class="Normal">int</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L225" class="LineNr">225 </span>  in &gt;&gt; std::hex &gt;&gt; result<span class="Delimiter">;</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L227" class="LineNr">227 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid hex &quot;</span> &lt;&lt; s &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L228" class="LineNr">228 </span>    <span class="Identifier">return</span> <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Delimiter">}</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>result &gt; <span class="Constant">0xff</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L231" class="LineNr">231 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid hex byte &quot;</span> &lt;&lt; std::hex &lt;&lt; result &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L232" class="LineNr">232 </span>    <span class="Identifier">return</span> <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Delimiter">}</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Identifier">return</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">uint8_t</span>&gt;<span class="Delimiter">(</span>result<span class="Delimiter">);</span>
+<span id="L235" class="LineNr">235 </span><span class="Delimiter">}</span>
+<span id="L236" class="LineNr">236 </span>
+<span id="L237" class="LineNr">237 </span><span class="SalientComment">//:: run</span>
+<span id="L238" class="LineNr">238 </span>
+<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L240" class="LineNr">240 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;05&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;add <a href='011run.cc.html#L253'>imm32</a> to R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L241" class="LineNr">241 </span>
+<span id="L242" class="LineNr">242 </span><span class="Comment">//: our first opcode</span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L244" class="LineNr">244 </span><span class="Normal">case</span> <span class="Constant">0x05</span>: <span class="Delimiter">{</span>  <span class="Comment">// add imm32 to EAX</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L246" class="LineNr">246 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;add <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; to <a href='010vm.cc.html#L23'>reg</a> EAX&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L247" class="LineNr">247 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>+<span class="Delimiter">,</span> Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L248" class="LineNr">248 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L249" class="LineNr">249 </span><span class="Delimiter">}</span>
+<span id="L250" class="LineNr">250 </span>
+<span id="L251" class="LineNr">251 </span><span class="Delimiter">:(code)</span>
+<span id="L252" class="LineNr">252 </span><span class="Comment">// read a 32-bit immediate in little-endian order from the instruction stream</span>
+<span id="L253" class="LineNr">253 </span><span class="Normal">int32_t</span> <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L254" class="LineNr">254 </span>  <span class="Normal">int32_t</span> result = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L255" class="LineNr">255 </span>  result |= <span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">()</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
+<span id="L256" class="LineNr">256 </span>  result |= <span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">()</span>&lt;&lt;<span class="Constant">16</span><span class="Delimiter">);</span>
+<span id="L257" class="LineNr">257 </span>  result |= <span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">()</span>&lt;&lt;<span class="Constant">24</span><span class="Delimiter">);</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/012direct_addressing.cc.html b/html/subx/012direct_addressing.cc.html
new file mode 100644
index 00000000..2ec9add6
--- /dev/null
+++ b/html/subx/012direct_addressing.cc.html
@@ -0,0 +1,464 @@
+<!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 - subx/012direct_addressing.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.Error { color: #ffffff; background-color: #ff6060; padding-bottom: 1px; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: operating directly on a register</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L4" class="LineNr">  4 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;01&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;add r32 to rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L5" class="LineNr">  5 </span>
+<span id="L6" class="LineNr">  6 </span><span class="Delimiter">:(scenario add_r32_to_r32)</span>
+<span id="L7" class="LineNr">  7 </span><span class="Special">% Reg[EAX].i = 0x10;</span>
+<span id="L8" class="LineNr">  8 </span><span class="Special">% Reg[EBX].i = 1;</span>
+<span id="L9" class="LineNr">  9 </span>== <span class="Constant">0x1</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L11" class="LineNr"> 11 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  d8                                      <span class="Comment"># add EBX to EAX</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L16" class="LineNr"> 16 </span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Normal">case</span> <span class="Constant">0x01</span>: <span class="Delimiter">{</span>  <span class="Comment">// add r32 to r/m32</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Normal">uint8_t</span> arg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;add &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L23" class="LineNr"> 23 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>+<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> Reg[arg2]<span class="Delimiter">.</span>i<span class="Delimiter">);</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
+<span id="L26" class="LineNr"> 26 </span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(code)</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Comment">// Implement tables 2-2 and 2-3 in the Intel manual, Volume 2.</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Comment">// We return a pointer so that instructions can write to multiple bytes in</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Comment">// 'Mem' at once.</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Normal">int32_t</span>* <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span> modrm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Normal">uint8_t</span> mod = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">6</span><span class="Delimiter">);</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Comment">// ignore middle 3 'reg opcode' bits</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Normal">uint8_t</span> rm = modrm &amp; <span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Normal">uint32_t</span> addr = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>mod<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">case</span> <span class="Constant">3</span>:
+<span id="L38" class="LineNr"> 38 </span>    <span class="Comment">// mod 3 is just register direct addressing</span>
+<span id="L39" class="LineNr"> 39 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;r/m32 is &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>    <span class="Identifier">return</span> &amp;Reg[rm]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Comment">// End Mod Special-cases(addr)</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Normal">default</span>:
+<span id="L43" class="LineNr"> 43 </span>    cerr &lt;&lt; <span class="Constant">&quot;unrecognized mod bits: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>mod<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L44" class="LineNr"> 44 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Comment">//: other mods are indirect, and they'll set addr appropriately</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Identifier">return</span> <a href='010vm.cc.html#L126'>mem_addr_i32</a><span class="Delimiter">(</span>addr<span class="Delimiter">);</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Delimiter">}</span>
+<span id="L49" class="LineNr"> 49 </span>
+<span id="L50" class="LineNr"> 50 </span>string <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span> r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>r<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">case</span> <span class="Constant">0</span>: <span class="Identifier">return</span> <span class="Constant">&quot;EAX&quot;</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Normal">case</span> <span class="Constant">1</span>: <span class="Identifier">return</span> <span class="Constant">&quot;ECX&quot;</span><span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">case</span> <span class="Constant">2</span>: <span class="Identifier">return</span> <span class="Constant">&quot;EDX&quot;</span><span class="Delimiter">;</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="Normal">case</span> <span class="Constant">3</span>: <span class="Identifier">return</span> <span class="Constant">&quot;EBX&quot;</span><span class="Delimiter">;</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Normal">case</span> <span class="Constant">4</span>: <span class="Identifier">return</span> <span class="Constant">&quot;ESP&quot;</span><span class="Delimiter">;</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Normal">case</span> <span class="Constant">5</span>: <span class="Identifier">return</span> <span class="Constant">&quot;EBP&quot;</span><span class="Delimiter">;</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Normal">case</span> <span class="Constant">6</span>: <span class="Identifier">return</span> <span class="Constant">&quot;ESI&quot;</span><span class="Delimiter">;</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="Normal">case</span> <span class="Constant">7</span>: <span class="Identifier">return</span> <span class="Constant">&quot;EDI&quot;</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr"> 60 </span>  <span class="Normal">default</span>: <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;invalid register &quot;</span> &lt;&lt; r &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">}</span>
+<span id="L63" class="LineNr"> 63 </span>
+<span id="L64" class="LineNr"> 64 </span><span class="SalientComment">//:: subtract</span>
+<span id="L65" class="LineNr"> 65 </span>
+<span id="L66" class="LineNr"> 66 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L67" class="LineNr"> 67 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;29&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;subtract r32 from rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L68" class="LineNr"> 68 </span>
+<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">:(scenario subtract_r32_from_r32)</span>
+<span id="L70" class="LineNr"> 70 </span><span class="Special">% Reg[EAX].i = 10;</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Special">% Reg[EBX].i = 1;</span>
+<span id="L72" class="LineNr"> 72 </span>== <span class="Constant">0x1</span>
+<span id="L73" class="LineNr"> 73 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L74" class="LineNr"> 74 </span>  <span class="Constant">29</span>  d8                                      <span class="Comment"># subtract EBX from EAX</span>
+<span id="L75" class="LineNr"> 75 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L76" class="LineNr"> 76 </span><span class="traceContains">+run: subtract <a href='010vm.cc.html#L16'>EBX</a> from r/m32</span>
+<span id="L77" class="LineNr"> 77 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L78" class="LineNr"> 78 </span><span class="traceContains">+run: storing 0x00000009</span>
+<span id="L79" class="LineNr"> 79 </span>
+<span id="L80" class="LineNr"> 80 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L81" class="LineNr"> 81 </span><span class="Normal">case</span> <span class="Constant">0x29</span>: <span class="Delimiter">{</span>  <span class="Comment">// subtract r32 from r/m32</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">uint8_t</span> arg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L84" class="LineNr"> 84 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subtract &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; from r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>-<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> Reg[arg2]<span class="Delimiter">.</span>i<span class="Delimiter">);</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">}</span>
+<span id="L89" class="LineNr"> 89 </span>
+<span id="L90" class="LineNr"> 90 </span><span class="SalientComment">//:: and</span>
+<span id="L91" class="LineNr"> 91 </span>
+<span id="L92" class="LineNr"> 92 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L93" class="LineNr"> 93 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;21&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;rm32 = bitwise AND of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>
+<span id="L95" class="LineNr"> 95 </span><span class="Delimiter">:(scenario and_r32_with_r32)</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c0d;</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Special">% Reg[EBX].i = 0x000000ff;</span>
+<span id="L98" class="LineNr"> 98 </span>== <span class="Constant">0x1</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Constant">21</span>  d8                                      <span class="Comment"># and EBX with destination EAX</span>
+<span id="L101" class="LineNr">101 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L102" class="LineNr">102 </span><span class="traceContains">+run: and <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L103" class="LineNr">103 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L104" class="LineNr">104 </span><span class="traceContains">+run: storing 0x0000000d</span>
+<span id="L105" class="LineNr">105 </span>
+<span id="L106" class="LineNr">106 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L107" class="LineNr">107 </span><span class="Normal">case</span> <span class="Constant">0x21</span>: <span class="Delimiter">{</span>  <span class="Comment">// and r32 with r/m32</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L109" class="LineNr">109 </span>  <span class="Normal">uint8_t</span> arg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L110" class="LineNr">110 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;and &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L111" class="LineNr">111 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>&amp;<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> Reg[arg2]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Identifier">break</span><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="SalientComment">//:: or</span>
+<span id="L117" class="LineNr">117 </span>
+<span id="L118" class="LineNr">118 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L119" class="LineNr">119 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;09&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;rm32 = bitwise OR of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(scenario or_r32_with_r32)</span>
+<span id="L122" class="LineNr">122 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c0d;</span>
+<span id="L123" class="LineNr">123 </span><span class="Special">% Reg[EBX].i = 0xa0b0c0d0;</span>
+<span id="L124" class="LineNr">124 </span>== <span class="Constant">0x1</span>
+<span id="L125" class="LineNr">125 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Error">09</span>  d8                                      <span class="Comment"># or EBX with destination EAX</span>
+<span id="L127" class="LineNr">127 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L128" class="LineNr">128 </span><span class="traceContains">+run: or <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L129" class="LineNr">129 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L130" class="LineNr">130 </span><span class="traceContains">+run: storing 0xaabbccdd</span>
+<span id="L131" class="LineNr">131 </span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L133" class="LineNr">133 </span><span class="Normal">case</span> <span class="Constant">0x09</span>: <span class="Delimiter">{</span>  <span class="Comment">// or r32 with r/m32</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">uint8_t</span> arg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;or &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L138" class="LineNr">138 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> Reg[arg2]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>
+<span id="L142" class="LineNr">142 </span><span class="SalientComment">//:: xor</span>
+<span id="L143" class="LineNr">143 </span>
+<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L145" class="LineNr">145 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;31&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;rm32 = bitwise XOR of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L146" class="LineNr">146 </span>
+<span id="L147" class="LineNr">147 </span><span class="Delimiter">:(scenario xor_r32_with_r32)</span>
+<span id="L148" class="LineNr">148 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c0d;</span>
+<span id="L149" class="LineNr">149 </span><span class="Special">% Reg[EBX].i = 0xaabbc0d0;</span>
+<span id="L150" class="LineNr">150 </span>== <span class="Constant">0x1</span>
+<span id="L151" class="LineNr">151 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L152" class="LineNr">152 </span>  <span class="Constant">31</span>  d8                                      <span class="Comment"># xor EBX with destination EAX</span>
+<span id="L153" class="LineNr">153 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L154" class="LineNr">154 </span><span class="traceContains">+run: xor <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L155" class="LineNr">155 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L156" class="LineNr">156 </span><span class="traceContains">+run: storing 0xa0b0ccdd</span>
+<span id="L157" class="LineNr">157 </span>
+<span id="L158" class="LineNr">158 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L159" class="LineNr">159 </span><span class="Normal">case</span> <span class="Constant">0x31</span>: <span class="Delimiter">{</span>  <span class="Comment">// xor r32 with r/m32</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L161" class="LineNr">161 </span>  <span class="Normal">uint8_t</span> arg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L162" class="LineNr">162 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;xor &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L164" class="LineNr">164 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>^<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> Reg[arg2]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L165" class="LineNr">165 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">}</span>
+<span id="L167" class="LineNr">167 </span>
+<span id="L168" class="LineNr">168 </span><span class="SalientComment">//:: not</span>
+<span id="L169" class="LineNr">169 </span>
+<span id="L170" class="LineNr">170 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L171" class="LineNr">171 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;f7&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;bitwise complement of rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L172" class="LineNr">172 </span>
+<span id="L173" class="LineNr">173 </span><span class="Delimiter">:(scenario not_r32)</span>
+<span id="L174" class="LineNr">174 </span><span class="Special">% Reg[EBX].i = 0x0f0f00ff;</span>
+<span id="L175" class="LineNr">175 </span>== <span class="Constant">0x1</span>
+<span id="L176" class="LineNr">176 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L177" class="LineNr">177 </span>  f7  c3                                      <span class="Comment"># not EBX</span>
+<span id="L178" class="LineNr">178 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 000 (unused) 011 (dest EBX)</span>
+<span id="L179" class="LineNr">179 </span><span class="traceContains">+run: 'not' of r/m32</span>
+<span id="L180" class="LineNr">180 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L181" class="LineNr">181 </span><span class="traceContains">+run: storing 0xf0f0ff00</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L184" class="LineNr">184 </span><span class="Normal">case</span> <span class="Constant">0xf7</span>: <span class="Delimiter">{</span>  <span class="Comment">// xor r32 with r/m32</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L186" class="LineNr">186 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'not' of r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L188" class="LineNr">188 </span>  *arg1 = ~<span class="Delimiter">(</span>*arg1<span class="Delimiter">);</span>
+<span id="L189" class="LineNr">189 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; *arg1 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L190" class="LineNr">190 </span>  SF = <span class="Delimiter">(</span>*arg1 &gt;&gt; <span class="Constant">31</span><span class="Delimiter">);</span>
+<span id="L191" class="LineNr">191 </span>  ZF = <span class="Delimiter">(</span>*arg1 == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L192" class="LineNr">192 </span>  <a href='010vm.cc.html#L59'>OF</a> =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L193" class="LineNr">193 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">}</span>
+<span id="L195" class="LineNr">195 </span>
+<span id="L196" class="LineNr">196 </span><span class="SalientComment">//:: compare (cmp)</span>
+<span id="L197" class="LineNr">197 </span>
+<span id="L198" class="LineNr">198 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L199" class="LineNr">199 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;39&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;set SF if rm32 &lt; r32&quot;</span><span class="Delimiter">);</span>
+<span id="L200" class="LineNr">200 </span>
+<span id="L201" class="LineNr">201 </span><span class="Delimiter">:(scenario compare_r32_with_r32_greater)</span>
+<span id="L202" class="LineNr">202 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c0d;</span>
+<span id="L203" class="LineNr">203 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c07;</span>
+<span id="L204" class="LineNr">204 </span>== <span class="Constant">0x1</span>
+<span id="L205" class="LineNr">205 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Constant">39</span>  d8                                      <span class="Comment"># compare EBX with EAX</span>
+<span id="L207" class="LineNr">207 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L208" class="LineNr">208 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L209" class="LineNr">209 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L210" class="LineNr">210 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L211" class="LineNr">211 </span>
+<span id="L212" class="LineNr">212 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L213" class="LineNr">213 </span><span class="Normal">case</span> <span class="Constant">0x39</span>: <span class="Delimiter">{</span>  <span class="Comment">// set SF if r/m32 &lt; r32</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Normal">uint8_t</span> reg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compare &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L218" class="LineNr">218 </span>  <span class="Normal">int32_t</span> arg2 = Reg[reg2]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L219" class="LineNr">219 </span>  <span class="Normal">int32_t</span> tmp1 = *arg1 - arg2<span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span>  SF = <span class="Delimiter">(</span>tmp1 &lt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L221" class="LineNr">221 </span>  ZF = <span class="Delimiter">(</span>tmp1 == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L222" class="LineNr">222 </span>  <span class="Normal">int64_t</span> tmp2 = *arg1 - arg2<span class="Delimiter">;</span>
+<span id="L223" class="LineNr">223 </span>  <a href='010vm.cc.html#L59'>OF</a> = <span class="Delimiter">(</span>tmp1 != tmp2<span class="Delimiter">);</span>
+<span id="L224" class="LineNr">224 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;SF=&quot;</span> &lt;&lt; SF &lt;&lt; <span class="Constant">&quot;; ZF=&quot;</span> &lt;&lt; ZF &lt;&lt; <span class="Constant">&quot;; OF=&quot;</span> &lt;&lt; <a href='010vm.cc.html#L59'>OF</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L226" class="LineNr">226 </span><span class="Delimiter">}</span>
+<span id="L227" class="LineNr">227 </span>
+<span id="L228" class="LineNr">228 </span><span class="Delimiter">:(scenario compare_r32_with_r32_lesser)</span>
+<span id="L229" class="LineNr">229 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c07;</span>
+<span id="L230" class="LineNr">230 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L231" class="LineNr">231 </span>== <span class="Constant">0x1</span>
+<span id="L232" class="LineNr">232 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Constant">39</span>  d8                                      <span class="Comment"># compare EBX with EAX</span>
+<span id="L234" class="LineNr">234 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L235" class="LineNr">235 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L236" class="LineNr">236 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L237" class="LineNr">237 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L238" class="LineNr">238 </span>
+<span id="L239" class="LineNr">239 </span><span class="Delimiter">:(scenario compare_r32_with_r32_equal)</span>
+<span id="L240" class="LineNr">240 </span><span class="Special">% Reg[EAX].i = 0x0a0b0c0d;</span>
+<span id="L241" class="LineNr">241 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L242" class="LineNr">242 </span>== <span class="Constant">0x1</span>
+<span id="L243" class="LineNr">243 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L244" class="LineNr">244 </span>  <span class="Constant">39</span>  d8                                      <span class="Comment"># compare EBX with EAX</span>
+<span id="L245" class="LineNr">245 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L246" class="LineNr">246 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L247" class="LineNr">247 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L248" class="LineNr">248 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L249" class="LineNr">249 </span>
+<span id="L250" class="LineNr">250 </span><span class="SalientComment">//:: copy (mov)</span>
+<span id="L251" class="LineNr">251 </span>
+<span id="L252" class="LineNr">252 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L253" class="LineNr">253 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;89&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy r32 to rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L254" class="LineNr">254 </span>
+<span id="L255" class="LineNr">255 </span><span class="Delimiter">:(scenario copy_r32_to_r32)</span>
+<span id="L256" class="LineNr">256 </span><span class="Special">% Reg[EBX].i = 0xaf;</span>
+<span id="L257" class="LineNr">257 </span>== <span class="Constant">0x1</span>
+<span id="L258" class="LineNr">258 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L259" class="LineNr">259 </span>  <span class="Constant">89</span>  d8                                      <span class="Comment"># copy EBX to EAX</span>
+<span id="L260" class="LineNr">260 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L261" class="LineNr">261 </span><span class="traceContains">+run: copy <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L262" class="LineNr">262 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L263" class="LineNr">263 </span><span class="traceContains">+run: storing 0x000000af</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L266" class="LineNr">266 </span><span class="Normal">case</span> <span class="Constant">0x89</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy r32 to r/m32</span>
+<span id="L267" class="LineNr">267 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">uint8_t</span> reg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L269" class="LineNr">269 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; to r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L271" class="LineNr">271 </span>  *arg1 = Reg[reg2]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L272" class="LineNr">272 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; *arg1 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L274" class="LineNr">274 </span><span class="Delimiter">}</span>
+<span id="L275" class="LineNr">275 </span>
+<span id="L276" class="LineNr">276 </span><span class="SalientComment">//:: xchg</span>
+<span id="L277" class="LineNr">277 </span>
+<span id="L278" class="LineNr">278 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L279" class="LineNr">279 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;87&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;swap the <a href='003trace.cc.html#L74'>contents</a> of r32 and rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L280" class="LineNr">280 </span>
+<span id="L281" class="LineNr">281 </span><span class="Delimiter">:(scenario xchg_r32_with_r32)</span>
+<span id="L282" class="LineNr">282 </span><span class="Special">% Reg[EBX].i = 0xaf;</span>
+<span id="L283" class="LineNr">283 </span><span class="Special">% Reg[EAX].i = 0x2e;</span>
+<span id="L284" class="LineNr">284 </span>== <span class="Constant">0x1</span>
+<span id="L285" class="LineNr">285 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L286" class="LineNr">286 </span>  <span class="Constant">87</span>  d8                                      <span class="Comment"># exchange EBX with EAX</span>
+<span id="L287" class="LineNr">287 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L288" class="LineNr">288 </span><span class="traceContains">+run: exchange <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L289" class="LineNr">289 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L290" class="LineNr">290 </span><span class="traceContains">+run: storing 0x000000af in r/m32</span>
+<span id="L291" class="LineNr">291 </span><span class="traceContains">+run: storing 0x0000002e in <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L292" class="LineNr">292 </span>
+<span id="L293" class="LineNr">293 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L294" class="LineNr">294 </span><span class="Normal">case</span> <span class="Constant">0x87</span>: <span class="Delimiter">{</span>  <span class="Comment">// exchange r32 with r/m32</span>
+<span id="L295" class="LineNr">295 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L296" class="LineNr">296 </span>  <span class="Normal">uint8_t</span> reg2 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L297" class="LineNr">297 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;exchange &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">int32_t</span> tmp = *arg1<span class="Delimiter">;</span>
+<span id="L300" class="LineNr">300 </span>  *arg1 = Reg[reg2]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L301" class="LineNr">301 </span>  Reg[reg2]<span class="Delimiter">.</span>i = tmp<span class="Delimiter">;</span>
+<span id="L302" class="LineNr">302 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; *arg1 &lt;&lt; <span class="Constant">&quot; in r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L303" class="LineNr">303 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; Reg[reg2]<span class="Delimiter">.</span>i &lt;&lt; <span class="Constant">&quot; in &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg2<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L305" class="LineNr">305 </span><span class="Delimiter">}</span>
+<span id="L306" class="LineNr">306 </span>
+<span id="L307" class="LineNr">307 </span><span class="SalientComment">//:: push</span>
+<span id="L308" class="LineNr">308 </span>
+<span id="L309" class="LineNr">309 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L310" class="LineNr">310 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;50&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R0 (EAX) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L311" class="LineNr">311 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;51&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R1 (ECX) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L312" class="LineNr">312 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;52&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R2 (EDX) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L313" class="LineNr">313 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;53&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R3 (EBX) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L314" class="LineNr">314 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;54&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R4 (ESP) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L315" class="LineNr">315 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;55&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R5 (EBP) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L316" class="LineNr">316 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;56&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R6 (ESI) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L317" class="LineNr">317 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;57&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push R7 (EDI) to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L318" class="LineNr">318 </span>
+<span id="L319" class="LineNr">319 </span><span class="Delimiter">:(scenario push_r32)</span>
+<span id="L320" class="LineNr">320 </span><span class="Special">% Reg[ESP].u = 0x64;</span>
+<span id="L321" class="LineNr">321 </span><span class="Special">% Reg[EBX].i = 0x0000000a;</span>
+<span id="L322" class="LineNr">322 </span>== <span class="Constant">0x1</span>
+<span id="L323" class="LineNr">323 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L324" class="LineNr">324 </span>  <span class="Constant">53</span>                                          <span class="Comment"># push EBX to stack</span>
+<span id="L325" class="LineNr">325 </span><span class="traceContains">+run: <a href='012direct_addressing.cc.html#L344'>push</a> <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L326" class="LineNr">326 </span><span class="traceContains">+run: decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000060</span>
+<span id="L327" class="LineNr">327 </span><span class="traceContains">+run: pushing value 0x0000000a</span>
+<span id="L328" class="LineNr">328 </span>
+<span id="L329" class="LineNr">329 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L330" class="LineNr">330 </span><span class="Normal">case</span> <span class="Constant">0x50</span>:
+<span id="L331" class="LineNr">331 </span><span class="Normal">case</span> <span class="Constant">0x51</span>:
+<span id="L332" class="LineNr">332 </span><span class="Normal">case</span> <span class="Constant">0x52</span>:
+<span id="L333" class="LineNr">333 </span><span class="Normal">case</span> <span class="Constant">0x53</span>:
+<span id="L334" class="LineNr">334 </span><span class="Normal">case</span> <span class="Constant">0x54</span>:
+<span id="L335" class="LineNr">335 </span><span class="Normal">case</span> <span class="Constant">0x55</span>:
+<span id="L336" class="LineNr">336 </span><span class="Normal">case</span> <span class="Constant">0x56</span>:
+<span id="L337" class="LineNr">337 </span><span class="Normal">case</span> <span class="Constant">0x57</span>: <span class="Delimiter">{</span>  <span class="Comment">// push r32 to stack</span>
+<span id="L338" class="LineNr">338 </span>  <span class="Normal">uint8_t</span> <a href='010vm.cc.html#L23'>reg</a> = op &amp; <span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L339" class="LineNr">339 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span><a href='010vm.cc.html#L23'>reg</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L340" class="LineNr">340 </span>  <a href='012direct_addressing.cc.html#L344'>push</a><span class="Delimiter">(</span>Reg[reg]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L341" class="LineNr">341 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span><span class="Delimiter">:(code)</span>
+<span id="L344" class="LineNr">344 </span><span class="Normal">void</span> <a href='012direct_addressing.cc.html#L344'>push</a><span class="Delimiter">(</span><span class="Normal">uint32_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L345" class="LineNr">345 </span>  Reg[ESP]<span class="Delimiter">.</span>u -= <span class="Constant">4</span><span class="Delimiter">;</span>
+<span id="L346" class="LineNr">346 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; Reg[ESP]<span class="Delimiter">.</span>u &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L347" class="LineNr">347 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;pushing value 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; val &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L348" class="LineNr">348 </span>  <a href='010vm.cc.html#L136'>write_mem_u32</a><span class="Delimiter">(</span>Reg[ESP]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
+<span id="L349" class="LineNr">349 </span><span class="Delimiter">}</span>
+<span id="L350" class="LineNr">350 </span>
+<span id="L351" class="LineNr">351 </span><span class="SalientComment">//:: pop</span>
+<span id="L352" class="LineNr">352 </span>
+<span id="L353" class="LineNr">353 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L354" class="LineNr">354 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;58&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L355" class="LineNr">355 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;59&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R1 (ECX)&quot;</span><span class="Delimiter">);</span>
+<span id="L356" class="LineNr">356 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5a&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R2 (EDX)&quot;</span><span class="Delimiter">);</span>
+<span id="L357" class="LineNr">357 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5b&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R3 (EBX)&quot;</span><span class="Delimiter">);</span>
+<span id="L358" class="LineNr">358 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5c&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R4 (ESP)&quot;</span><span class="Delimiter">);</span>
+<span id="L359" class="LineNr">359 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R5 (EBP)&quot;</span><span class="Delimiter">);</span>
+<span id="L360" class="LineNr">360 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5e&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R6 (ESI)&quot;</span><span class="Delimiter">);</span>
+<span id="L361" class="LineNr">361 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;5f&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to R7 (EDI)&quot;</span><span class="Delimiter">);</span>
+<span id="L362" class="LineNr">362 </span>
+<span id="L363" class="LineNr">363 </span><span class="Delimiter">:(scenario pop_r32)</span>
+<span id="L364" class="LineNr">364 </span><span class="Special">% Reg[ESP].u = 0x60;</span>
+<span id="L365" class="LineNr">365 </span><span class="Special">% write_mem_i32(0x60, 0x0000000a);</span>
+<span id="L366" class="LineNr">366 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L367" class="LineNr">367 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L368" class="LineNr">368 </span>  5b                                          <span class="Comment"># pop stack to EBX</span>
+<span id="L369" class="LineNr">369 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L370" class="LineNr">370 </span>0a <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0x0a</span>
+<span id="L371" class="LineNr">371 </span><span class="traceContains">+run: <a href='012direct_addressing.cc.html#L390'>pop</a> into <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L372" class="LineNr">372 </span><span class="traceContains">+run: popping value 0x0000000a</span>
+<span id="L373" class="LineNr">373 </span><span class="traceContains">+run: incrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000064</span>
+<span id="L374" class="LineNr">374 </span>
+<span id="L375" class="LineNr">375 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L376" class="LineNr">376 </span><span class="Normal">case</span> <span class="Constant">0x58</span>:
+<span id="L377" class="LineNr">377 </span><span class="Normal">case</span> <span class="Constant">0x59</span>:
+<span id="L378" class="LineNr">378 </span><span class="Normal">case</span> <span class="Constant">0x5a</span>:
+<span id="L379" class="LineNr">379 </span><span class="Normal">case</span> <span class="Constant">0x5b</span>:
+<span id="L380" class="LineNr">380 </span><span class="Normal">case</span> <span class="Constant">0x5c</span>:
+<span id="L381" class="LineNr">381 </span><span class="Normal">case</span> <span class="Constant">0x5d</span>:
+<span id="L382" class="LineNr">382 </span><span class="Normal">case</span> <span class="Constant">0x5e</span>:
+<span id="L383" class="LineNr">383 </span><span class="Normal">case</span> <span class="Constant">0x5f</span>: <span class="Delimiter">{</span>  <span class="Comment">// pop stack into r32</span>
+<span id="L384" class="LineNr">384 </span>  <span class="Normal">uint8_t</span> <a href='010vm.cc.html#L23'>reg</a> = op &amp; <span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L385" class="LineNr">385 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;pop into &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span><a href='010vm.cc.html#L23'>reg</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L386" class="LineNr">386 </span>  Reg[reg]<span class="Delimiter">.</span>u = <a href='012direct_addressing.cc.html#L390'>pop</a><span class="Delimiter">();</span>
+<span id="L387" class="LineNr">387 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L388" class="LineNr">388 </span><span class="Delimiter">}</span>
+<span id="L389" class="LineNr">389 </span><span class="Delimiter">:(code)</span>
+<span id="L390" class="LineNr">390 </span><span class="Normal">uint32_t</span> <a href='012direct_addressing.cc.html#L390'>pop</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L391" class="LineNr">391 </span>  <span class="Normal">uint32_t</span> result = <a href='010vm.cc.html#L110'>read_mem_u32</a><span class="Delimiter">(</span>Reg[ESP]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L392" class="LineNr">392 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;popping value 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; result &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L393" class="LineNr">393 </span>  Reg[ESP]<span class="Delimiter">.</span>u += <span class="Constant">4</span><span class="Delimiter">;</span>
+<span id="L394" class="LineNr">394 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;incrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; Reg[ESP]<span class="Delimiter">.</span>u &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L395" class="LineNr">395 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L396" class="LineNr">396 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/013indirect_addressing.cc.html b/html/subx/013indirect_addressing.cc.html
new file mode 100644
index 00000000..bbf7c550
--- /dev/null
+++ b/html/subx/013indirect_addressing.cc.html
@@ -0,0 +1,657 @@
+<!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 - subx/013indirect_addressing.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.traceAbsent { color: #c00000; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.Error { color: #ffffff; background-color: #ff6060; padding-bottom: 1px; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: operating on memory at the address provided by some register</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: we'll now start providing data in a separate segment</span>
+<span id="L3" class="LineNr">  3 </span>
+<span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32)</span>
+<span id="L5" class="LineNr">  5 </span><span class="Special">% Reg[EBX].i = 0x10;</span>
+<span id="L6" class="LineNr">  6 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L7" class="LineNr">  7 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L9" class="LineNr">  9 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  <span class="Constant">18</span>                                     <span class="Comment"># add EBX to *EAX</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L11" class="LineNr"> 11 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L12" class="LineNr"> 12 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L16" class="LineNr"> 16 </span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(before &quot;End Mod Special-cases(addr)&quot;)</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Normal">case</span> <span class="Constant">0</span>:  <span class="Comment">// indirect addressing</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Normal">default</span>:  <span class="Comment">// address in register</span>
+<span id="L21" class="LineNr"> 21 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; Reg[rm]<span class="Delimiter">.</span>u &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
+<span id="L23" class="LineNr"> 23 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Comment">// End Mod 0 Special-cases(addr)</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Delimiter">}</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span>
+<span id="L28" class="LineNr"> 28 </span><span class="Comment">//:</span>
+<span id="L29" class="LineNr"> 29 </span>
+<span id="L30" class="LineNr"> 30 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L31" class="LineNr"> 31 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;03&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;add rm32 to r32&quot;</span><span class="Delimiter">);</span>
+<span id="L32" class="LineNr"> 32 </span>
+<span id="L33" class="LineNr"> 33 </span><span class="Delimiter">:(scenario add_mem_at_r32_to_r32)</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Special">% Reg[EBX].i = 0x10;</span>
+<span id="L36" class="LineNr"> 36 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L37" class="LineNr"> 37 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="PreProc">0</span><span class="Constant">3</span>  <span class="Constant">18</span>                                      <span class="Comment"># add *EAX to EBX</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L40" class="LineNr"> 40 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L41" class="LineNr"> 41 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L42" class="LineNr"> 42 </span><span class="traceContains">+run: add r/m32 to <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L43" class="LineNr"> 43 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L44" class="LineNr"> 44 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L45" class="LineNr"> 45 </span>
+<span id="L46" class="LineNr"> 46 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L47" class="LineNr"> 47 </span><span class="Normal">case</span> <span class="Constant">0x03</span>: <span class="Delimiter">{</span>  <span class="Comment">// add r/m32 to r32</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L50" class="LineNr"> 50 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;add r/m32 to &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L52" class="LineNr"> 52 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>+<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">}</span>
+<span id="L55" class="LineNr"> 55 </span>
+<span id="L56" class="LineNr"> 56 </span><span class="SalientComment">//:: subtract</span>
+<span id="L57" class="LineNr"> 57 </span>
+<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">:(scenario subtract_r32_from_mem_at_r32)</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Special">% Reg[EBX].i = 1;</span>
+<span id="L61" class="LineNr"> 61 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L62" class="LineNr"> 62 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Constant">29</span>  <span class="Constant">18</span>                                      <span class="Comment"># subtract EBX from *EAX</span>
+<span id="L64" class="LineNr"> 64 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L65" class="LineNr"> 65 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L66" class="LineNr"> 66 </span>0a <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 10</span>
+<span id="L67" class="LineNr"> 67 </span><span class="traceContains">+run: subtract <a href='010vm.cc.html#L16'>EBX</a> from r/m32</span>
+<span id="L68" class="LineNr"> 68 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+run: storing 0x00000009</span>
+<span id="L70" class="LineNr"> 70 </span>
+<span id="L71" class="LineNr"> 71 </span><span class="Comment">//:</span>
+<span id="L72" class="LineNr"> 72 </span>
+<span id="L73" class="LineNr"> 73 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L74" class="LineNr"> 74 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;2b&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;subtract rm32 from r32&quot;</span><span class="Delimiter">);</span>
+<span id="L75" class="LineNr"> 75 </span>
+<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(scenario subtract_mem_at_r32_from_r32)</span>
+<span id="L77" class="LineNr"> 77 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Special">% Reg[EBX].i = 10;</span>
+<span id="L79" class="LineNr"> 79 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L81" class="LineNr"> 81 </span>  2b  <span class="Constant">18</span>                                      <span class="Comment"># subtract *EAX from EBX</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L83" class="LineNr"> 83 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L84" class="LineNr"> 84 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L85" class="LineNr"> 85 </span><span class="traceContains">+run: subtract r/m32 from <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L86" class="LineNr"> 86 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L87" class="LineNr"> 87 </span><span class="traceContains">+run: storing 0x00000009</span>
+<span id="L88" class="LineNr"> 88 </span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> <span class="Constant">0x2b</span>: <span class="Delimiter">{</span>  <span class="Comment">// subtract r/m32 from r32</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subtract r/m32 from &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>-<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
+<span id="L98" class="LineNr"> 98 </span>
+<span id="L99" class="LineNr"> 99 </span><span class="SalientComment">//:: and</span>
+<span id="L100" class="LineNr">100 </span>
+<span id="L101" class="LineNr">101 </span><span class="Delimiter">:(scenario and_r32_with_mem_at_r32)</span>
+<span id="L102" class="LineNr">102 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L103" class="LineNr">103 </span><span class="Special">% Reg[EBX].i = 0xff;</span>
+<span id="L104" class="LineNr">104 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L105" class="LineNr">105 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Constant">21</span>  <span class="Constant">18</span>                                      <span class="Comment"># and EBX with *EAX</span>
+<span id="L107" class="LineNr">107 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L108" class="LineNr">108 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L109" class="LineNr">109 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L110" class="LineNr">110 </span><span class="traceContains">+run: and <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L111" class="LineNr">111 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L112" class="LineNr">112 </span><span class="traceContains">+run: storing 0x0000000d</span>
+<span id="L113" class="LineNr">113 </span>
+<span id="L114" class="LineNr">114 </span><span class="Comment">//:</span>
+<span id="L115" class="LineNr">115 </span>
+<span id="L116" class="LineNr">116 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L117" class="LineNr">117 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;r32 = bitwise AND of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(scenario and_mem_at_r32_with_r32)</span>
+<span id="L120" class="LineNr">120 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L121" class="LineNr">121 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L122" class="LineNr">122 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L123" class="LineNr">123 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Constant">23</span>  <span class="Constant">18</span>                                      <span class="Comment"># and *EAX with EBX</span>
+<span id="L125" class="LineNr">125 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L126" class="LineNr">126 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L127" class="LineNr">127 </span>ff <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0xff</span>
+<span id="L128" class="LineNr">128 </span><span class="traceContains">+run: and r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L129" class="LineNr">129 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L130" class="LineNr">130 </span><span class="traceContains">+run: storing 0x0000000d</span>
+<span id="L131" class="LineNr">131 </span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L133" class="LineNr">133 </span><span class="Normal">case</span> <span class="Constant">0x23</span>: <span class="Delimiter">{</span>  <span class="Comment">// and r/m32 with r32</span>
+<span id="L134" class="LineNr">134 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;and r/m32 with &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L138" class="LineNr">138 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>&amp;<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">}</span>
+<span id="L141" class="LineNr">141 </span>
+<span id="L142" class="LineNr">142 </span><span class="SalientComment">//:: or</span>
+<span id="L143" class="LineNr">143 </span>
+<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(scenario or_r32_with_mem_at_r32)</span>
+<span id="L145" class="LineNr">145 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L146" class="LineNr">146 </span><span class="Special">% Reg[EBX].i = 0xa0b0c0d0;</span>
+<span id="L147" class="LineNr">147 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L148" class="LineNr">148 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L149" class="LineNr">149 </span>  <span class="Error">09</span>  <span class="Constant">18</span>                                      <span class="Comment"># or EBX with *EAX</span>
+<span id="L150" class="LineNr">150 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L151" class="LineNr">151 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L152" class="LineNr">152 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L153" class="LineNr">153 </span><span class="traceContains">+run: or <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L154" class="LineNr">154 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L155" class="LineNr">155 </span><span class="traceContains">+run: storing 0xaabbccdd</span>
+<span id="L156" class="LineNr">156 </span>
+<span id="L157" class="LineNr">157 </span><span class="Comment">//:</span>
+<span id="L158" class="LineNr">158 </span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L160" class="LineNr">160 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;0b&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;r32 = bitwise OR of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L161" class="LineNr">161 </span>
+<span id="L162" class="LineNr">162 </span><span class="Delimiter">:(scenario or_mem_at_r32_with_r32)</span>
+<span id="L163" class="LineNr">163 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L164" class="LineNr">164 </span><span class="Special">% Reg[EBX].i = 0xa0b0c0d0;</span>
+<span id="L165" class="LineNr">165 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L166" class="LineNr">166 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L167" class="LineNr">167 </span>  0b  <span class="Constant">18</span>                                      <span class="Comment"># or *EAX with EBX</span>
+<span id="L168" class="LineNr">168 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L169" class="LineNr">169 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L170" class="LineNr">170 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L171" class="LineNr">171 </span><span class="traceContains">+run: or r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L172" class="LineNr">172 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L173" class="LineNr">173 </span><span class="traceContains">+run: storing 0xaabbccdd</span>
+<span id="L174" class="LineNr">174 </span>
+<span id="L175" class="LineNr">175 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L176" class="LineNr">176 </span><span class="Normal">case</span> <span class="Constant">0x0b</span>: <span class="Delimiter">{</span>  <span class="Comment">// or r/m32 with r32</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;or r/m32 with &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L181" class="LineNr">181 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">}</span>
+<span id="L184" class="LineNr">184 </span>
+<span id="L185" class="LineNr">185 </span><span class="SalientComment">//:: xor</span>
+<span id="L186" class="LineNr">186 </span>
+<span id="L187" class="LineNr">187 </span><span class="Delimiter">:(scenario xor_r32_with_mem_at_r32)</span>
+<span id="L188" class="LineNr">188 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L189" class="LineNr">189 </span><span class="Special">% Reg[EBX].i = 0xa0b0c0d0;</span>
+<span id="L190" class="LineNr">190 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L191" class="LineNr">191 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L192" class="LineNr">192 </span>  <span class="Constant">31</span>  <span class="Constant">18</span>                                      <span class="Comment"># xor EBX with *EAX</span>
+<span id="L193" class="LineNr">193 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L194" class="LineNr">194 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L195" class="LineNr">195 </span>0d 0c bb aa  <span class="Comment"># 0xaabb0c0d</span>
+<span id="L196" class="LineNr">196 </span><span class="traceContains">+run: xor <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L197" class="LineNr">197 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L198" class="LineNr">198 </span><span class="traceContains">+run: storing 0x0a0bccdd</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Comment">//:</span>
+<span id="L201" class="LineNr">201 </span>
+<span id="L202" class="LineNr">202 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L203" class="LineNr">203 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;33&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;r32 = bitwise XOR of r32 with rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L204" class="LineNr">204 </span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">:(scenario xor_mem_at_r32_with_r32)</span>
+<span id="L206" class="LineNr">206 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L207" class="LineNr">207 </span><span class="Special">% Reg[EBX].i = 0xa0b0c0d0;</span>
+<span id="L208" class="LineNr">208 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L209" class="LineNr">209 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Constant">33</span>  <span class="Constant">18</span>                                      <span class="Comment"># xor *EAX with EBX</span>
+<span id="L211" class="LineNr">211 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L212" class="LineNr">212 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L213" class="LineNr">213 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L214" class="LineNr">214 </span><span class="traceContains">+run: xor r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L215" class="LineNr">215 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L216" class="LineNr">216 </span><span class="traceContains">+run: storing 0xaabbccdd</span>
+<span id="L217" class="LineNr">217 </span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L219" class="LineNr">219 </span><span class="Normal">case</span> <span class="Constant">0x33</span>: <span class="Delimiter">{</span>  <span class="Comment">// xor r/m32 with r32</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Normal">uint8_t</span> arg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L222" class="LineNr">222 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;xor r/m32 with &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>arg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L224" class="LineNr">224 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> Reg[arg1]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> *arg2<span class="Delimiter">);</span>
+<span id="L225" class="LineNr">225 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L226" class="LineNr">226 </span><span class="Delimiter">}</span>
+<span id="L227" class="LineNr">227 </span>
+<span id="L228" class="LineNr">228 </span><span class="SalientComment">//:: not</span>
+<span id="L229" class="LineNr">229 </span>
+<span id="L230" class="LineNr">230 </span><span class="Delimiter">:(scenario not_r32_with_mem_at_r32)</span>
+<span id="L231" class="LineNr">231 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L232" class="LineNr">232 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L233" class="LineNr">233 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L234" class="LineNr">234 </span>  f7  <span class="PreProc">0</span><span class="Constant">3</span>                                      <span class="Comment"># negate *EBX</span>
+<span id="L235" class="LineNr">235 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 000 (unused) 011 (dest EBX)</span>
+<span id="L236" class="LineNr">236 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L237" class="LineNr">237 </span>ff <span class="PreProc">0</span><span class="Constant">0</span> <span class="Constant">0f</span> <span class="Constant">0f</span>  <span class="Comment"># 0x0f0f00ff</span>
+<span id="L238" class="LineNr">238 </span><span class="traceContains">+run: 'not' of r/m32</span>
+<span id="L239" class="LineNr">239 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L240" class="LineNr">240 </span><span class="traceContains">+run: storing 0xf0f0ff00</span>
+<span id="L241" class="LineNr">241 </span>
+<span id="L242" class="LineNr">242 </span><span class="SalientComment">//:: compare (cmp)</span>
+<span id="L243" class="LineNr">243 </span>
+<span id="L244" class="LineNr">244 </span><span class="Delimiter">:(scenario compare_mem_at_r32_with_r32_greater)</span>
+<span id="L245" class="LineNr">245 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L246" class="LineNr">246 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c07;</span>
+<span id="L247" class="LineNr">247 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L248" class="LineNr">248 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L249" class="LineNr">249 </span>  <span class="Constant">39</span>  <span class="Constant">18</span>                                      <span class="Comment"># compare EBX with *EAX</span>
+<span id="L250" class="LineNr">250 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L251" class="LineNr">251 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L252" class="LineNr">252 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L253" class="LineNr">253 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L254" class="LineNr">254 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L255" class="LineNr">255 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L256" class="LineNr">256 </span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(scenario compare_mem_at_r32_with_r32_lesser)</span>
+<span id="L258" class="LineNr">258 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L259" class="LineNr">259 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L260" class="LineNr">260 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L261" class="LineNr">261 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L262" class="LineNr">262 </span>  <span class="Constant">39</span>  <span class="Constant">18</span>                                      <span class="Comment"># compare EBX with *EAX</span>
+<span id="L263" class="LineNr">263 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L264" class="LineNr">264 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L265" class="LineNr">265 </span><span class="PreProc">0</span><span class="Constant">7</span> 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L266" class="LineNr">266 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L267" class="LineNr">267 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L268" class="LineNr">268 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L269" class="LineNr">269 </span>
+<span id="L270" class="LineNr">270 </span><span class="Delimiter">:(scenario compare_mem_at_r32_with_r32_equal)</span>
+<span id="L271" class="LineNr">271 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L272" class="LineNr">272 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L273" class="LineNr">273 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L274" class="LineNr">274 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L275" class="LineNr">275 </span>  <span class="Constant">39</span>  <span class="Constant">18</span>                                      <span class="Comment"># compare EBX with *EAX</span>
+<span id="L276" class="LineNr">276 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L277" class="LineNr">277 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L278" class="LineNr">278 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L279" class="LineNr">279 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L16'>EBX</a> with r/m32</span>
+<span id="L280" class="LineNr">280 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L281" class="LineNr">281 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L282" class="LineNr">282 </span>
+<span id="L283" class="LineNr">283 </span><span class="Comment">//:</span>
+<span id="L284" class="LineNr">284 </span>
+<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L286" class="LineNr">286 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;3b&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;set SF if rm32 &gt; r32&quot;</span><span class="Delimiter">);</span>
+<span id="L287" class="LineNr">287 </span>
+<span id="L288" class="LineNr">288 </span><span class="Delimiter">:(scenario compare_r32_with_mem_at_r32_greater)</span>
+<span id="L289" class="LineNr">289 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L290" class="LineNr">290 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L291" class="LineNr">291 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L292" class="LineNr">292 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L293" class="LineNr">293 </span>  3b  <span class="Constant">18</span>                                      <span class="Comment"># compare *EAX with EBX</span>
+<span id="L294" class="LineNr">294 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L295" class="LineNr">295 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L296" class="LineNr">296 </span><span class="PreProc">0</span><span class="Constant">7</span> 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L297" class="LineNr">297 </span><span class="traceContains">+run: compare r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L298" class="LineNr">298 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L299" class="LineNr">299 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L300" class="LineNr">300 </span>
+<span id="L301" class="LineNr">301 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L302" class="LineNr">302 </span><span class="Normal">case</span> <span class="Constant">0x3b</span>: <span class="Delimiter">{</span>  <span class="Comment">// set SF if r32 &lt; r/m32</span>
+<span id="L303" class="LineNr">303 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Normal">uint8_t</span> reg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L305" class="LineNr">305 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compare r/m32 with &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Normal">int32_t</span> arg1 = Reg[reg1]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L307" class="LineNr">307 </span>  <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Normal">int32_t</span> tmp1 = arg1 - *arg2<span class="Delimiter">;</span>
+<span id="L309" class="LineNr">309 </span>  SF = <span class="Delimiter">(</span>tmp1 &lt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L310" class="LineNr">310 </span>  ZF = <span class="Delimiter">(</span>tmp1 == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L311" class="LineNr">311 </span>  <span class="Normal">int64_t</span> tmp2 = arg1 - *arg2<span class="Delimiter">;</span>
+<span id="L312" class="LineNr">312 </span>  <a href='010vm.cc.html#L59'>OF</a> = <span class="Delimiter">(</span>tmp1 != tmp2<span class="Delimiter">);</span>
+<span id="L313" class="LineNr">313 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;SF=&quot;</span> &lt;&lt; SF &lt;&lt; <span class="Constant">&quot;; ZF=&quot;</span> &lt;&lt; ZF &lt;&lt; <span class="Constant">&quot;; OF=&quot;</span> &lt;&lt; <a href='010vm.cc.html#L59'>OF</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span><span class="Delimiter">}</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(scenario compare_r32_with_mem_at_r32_lesser)</span>
+<span id="L318" class="LineNr">318 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L319" class="LineNr">319 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c07;</span>
+<span id="L320" class="LineNr">320 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L321" class="LineNr">321 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L322" class="LineNr">322 </span>  3b  <span class="Constant">18</span>                                      <span class="Comment"># compare *EAX with EBX</span>
+<span id="L323" class="LineNr">323 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L324" class="LineNr">324 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L325" class="LineNr">325 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L326" class="LineNr">326 </span><span class="traceContains">+run: compare r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L327" class="LineNr">327 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L328" class="LineNr">328 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L329" class="LineNr">329 </span>
+<span id="L330" class="LineNr">330 </span><span class="Delimiter">:(scenario compare_r32_with_mem_at_r32_equal)</span>
+<span id="L331" class="LineNr">331 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L332" class="LineNr">332 </span><span class="Special">% Reg[EBX].i = 0x0a0b0c0d;</span>
+<span id="L333" class="LineNr">333 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L334" class="LineNr">334 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L335" class="LineNr">335 </span>  3b  <span class="Constant">18</span>                                      <span class="Comment"># compare *EAX with EBX</span>
+<span id="L336" class="LineNr">336 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L337" class="LineNr">337 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L338" class="LineNr">338 </span>0d 0c 0b 0a  <span class="Comment"># 0x0a0b0c0d</span>
+<span id="L339" class="LineNr">339 </span><span class="traceContains">+run: compare r/m32 with <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L340" class="LineNr">340 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L341" class="LineNr">341 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L342" class="LineNr">342 </span>
+<span id="L343" class="LineNr">343 </span><span class="SalientComment">//:: copy (mov)</span>
+<span id="L344" class="LineNr">344 </span>
+<span id="L345" class="LineNr">345 </span><span class="Delimiter">:(scenario copy_r32_to_mem_at_r32)</span>
+<span id="L346" class="LineNr">346 </span><span class="Special">% Reg[EBX].i = 0xaf;</span>
+<span id="L347" class="LineNr">347 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L348" class="LineNr">348 </span>== <span class="Constant">0x1</span>
+<span id="L349" class="LineNr">349 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L350" class="LineNr">350 </span>  <span class="Constant">89</span>  <span class="Constant">18</span>                                      <span class="Comment"># copy EBX to *EAX</span>
+<span id="L351" class="LineNr">351 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L352" class="LineNr">352 </span><span class="traceContains">+run: copy <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L353" class="LineNr">353 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L354" class="LineNr">354 </span><span class="traceContains">+run: storing 0x000000af</span>
+<span id="L355" class="LineNr">355 </span>
+<span id="L356" class="LineNr">356 </span><span class="Comment">//:</span>
+<span id="L357" class="LineNr">357 </span>
+<span id="L358" class="LineNr">358 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L359" class="LineNr">359 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;8b&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy rm32 to r32&quot;</span><span class="Delimiter">);</span>
+<span id="L360" class="LineNr">360 </span>
+<span id="L361" class="LineNr">361 </span><span class="Delimiter">:(scenario copy_mem_at_r32_to_r32)</span>
+<span id="L362" class="LineNr">362 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L363" class="LineNr">363 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L364" class="LineNr">364 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L365" class="LineNr">365 </span>  8b  <span class="Constant">18</span>                                      <span class="Comment"># copy *EAX to EBX</span>
+<span id="L366" class="LineNr">366 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EAX) 000 (dest EAX)</span>
+<span id="L367" class="LineNr">367 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L368" class="LineNr">368 </span>af <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0xaf</span>
+<span id="L369" class="LineNr">369 </span><span class="traceContains">+run: copy r/m32 to <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L370" class="LineNr">370 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L371" class="LineNr">371 </span><span class="traceContains">+run: storing 0x000000af</span>
+<span id="L372" class="LineNr">372 </span>
+<span id="L373" class="LineNr">373 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L374" class="LineNr">374 </span><span class="Normal">case</span> <span class="Constant">0x8b</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy r32 to r/m32</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L376" class="LineNr">376 </span>  <span class="Normal">uint8_t</span> reg1 = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L377" class="LineNr">377 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy r/m32 to &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L378" class="LineNr">378 </span>  <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L379" class="LineNr">379 </span>  Reg[reg1]<span class="Delimiter">.</span>i = *arg2<span class="Delimiter">;</span>
+<span id="L380" class="LineNr">380 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;storing 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; *arg2 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L381" class="LineNr">381 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L382" class="LineNr">382 </span><span class="Delimiter">}</span>
+<span id="L383" class="LineNr">383 </span>
+<span id="L384" class="LineNr">384 </span><span class="SalientComment">//:: jump</span>
+<span id="L385" class="LineNr">385 </span>
+<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L387" class="LineNr">387 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;ff&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump/push/call rm32 based on subop&quot;</span><span class="Delimiter">);</span>
+<span id="L388" class="LineNr">388 </span>
+<span id="L389" class="LineNr">389 </span><span class="Delimiter">:(scenario jump_mem_at_r32)</span>
+<span id="L390" class="LineNr">390 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L391" class="LineNr">391 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L392" class="LineNr">392 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L393" class="LineNr">393 </span>  ff  <span class="Constant">20</span>                                      <span class="Comment"># jump to *EAX</span>
+<span id="L394" class="LineNr">394 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 100 (jump to r/m32) 000 (src EAX)</span>
+<span id="L395" class="LineNr">395 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L396" class="LineNr">396 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L397" class="LineNr">397 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L398" class="LineNr">398 </span><span class="Error">08</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 8</span>
+<span id="L399" class="LineNr">399 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L400" class="LineNr">400 </span><span class="traceContains">+run: jump to r/m32</span>
+<span id="L401" class="LineNr">401 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L402" class="LineNr">402 </span><span class="traceContains">+run: jumping to 0x00000008</span>
+<span id="L403" class="LineNr">403 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L404" class="LineNr">404 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L405" class="LineNr">405 </span>
+<span id="L406" class="LineNr">406 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L407" class="LineNr">407 </span><span class="Normal">case</span> <span class="Constant">0xff</span>: <span class="Delimiter">{</span>
+<span id="L408" class="LineNr">408 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L409" class="LineNr">409 </span>  <span class="Normal">uint8_t</span> subop = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>  <span class="Comment">// middle 3 'reg opcode' bits</span>
+<span id="L410" class="LineNr">410 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>subop<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L411" class="LineNr">411 </span>    <span class="Normal">case</span> <span class="Constant">4</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump to r/m32</span>
+<span id="L412" class="LineNr">412 </span>      <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump to r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L413" class="LineNr">413 </span>      <span class="Normal">int32_t</span>* arg2 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L414" class="LineNr">414 </span>      <a href='010vm.cc.html#L29'>EIP</a> = *arg2<span class="Delimiter">;</span>
+<span id="L415" class="LineNr">415 </span>      <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L416" class="LineNr">416 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L417" class="LineNr">417 </span>    <span class="Delimiter">}</span>
+<span id="L418" class="LineNr">418 </span>    <span class="Comment">// End Op ff Subops</span>
+<span id="L419" class="LineNr">419 </span>  <span class="Delimiter">}</span>
+<span id="L420" class="LineNr">420 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L421" class="LineNr">421 </span><span class="Delimiter">}</span>
+<span id="L422" class="LineNr">422 </span>
+<span id="L423" class="LineNr">423 </span><span class="SalientComment">//:: push</span>
+<span id="L424" class="LineNr">424 </span>
+<span id="L425" class="LineNr">425 </span><span class="Delimiter">:(scenario push_mem_at_r32)</span>
+<span id="L426" class="LineNr">426 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L427" class="LineNr">427 </span><span class="Special">% Reg[ESP].u = 0x14;</span>
+<span id="L428" class="LineNr">428 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L429" class="LineNr">429 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L430" class="LineNr">430 </span>  ff  <span class="Constant">30</span>                                      <span class="Comment"># push *EAX to stack</span>
+<span id="L431" class="LineNr">431 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 110 (push r/m32) 000 (src EAX)</span>
+<span id="L432" class="LineNr">432 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L433" class="LineNr">433 </span>af <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0xaf</span>
+<span id="L434" class="LineNr">434 </span><span class="traceContains">+run: <a href='012direct_addressing.cc.html#L344'>push</a> r/m32</span>
+<span id="L435" class="LineNr">435 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L436" class="LineNr">436 </span><span class="traceContains">+run: decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000010</span>
+<span id="L437" class="LineNr">437 </span><span class="traceContains">+run: pushing value 0x000000af</span>
+<span id="L438" class="LineNr">438 </span>
+<span id="L439" class="LineNr">439 </span><span class="Delimiter">:(before &quot;End Op ff Subops&quot;)</span>
+<span id="L440" class="LineNr">440 </span><span class="Normal">case</span> <span class="Constant">6</span>: <span class="Delimiter">{</span>  <span class="Comment">// push r/m32 to stack</span>
+<span id="L441" class="LineNr">441 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L442" class="LineNr">442 </span>  <span class="Normal">const</span> <span class="Normal">int32_t</span>* val = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L443" class="LineNr">443 </span>  <a href='012direct_addressing.cc.html#L344'>push</a><span class="Delimiter">(</span>*val<span class="Delimiter">);</span>
+<span id="L444" class="LineNr">444 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L445" class="LineNr">445 </span><span class="Delimiter">}</span>
+<span id="L446" class="LineNr">446 </span>
+<span id="L447" class="LineNr">447 </span><span class="SalientComment">//:: pop</span>
+<span id="L448" class="LineNr">448 </span>
+<span id="L449" class="LineNr">449 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L450" class="LineNr">450 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;8f&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;pop top of stack to rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L451" class="LineNr">451 </span>
+<span id="L452" class="LineNr">452 </span><span class="Delimiter">:(scenario pop_mem_at_r32)</span>
+<span id="L453" class="LineNr">453 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L454" class="LineNr">454 </span><span class="Special">% Reg[ESP].u = 0x10;</span>
+<span id="L455" class="LineNr">455 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L456" class="LineNr">456 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L457" class="LineNr">457 </span>  <span class="Constant">8f</span>  <span class="PreProc">0</span><span class="Constant">0</span>                                      <span class="Comment"># pop stack into *EAX</span>
+<span id="L458" class="LineNr">458 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 000 (pop r/m32) 000 (dest EAX)</span>
+<span id="L459" class="LineNr">459 </span>== <span class="Constant">0x10</span>  <span class="Comment"># data segment</span>
+<span id="L460" class="LineNr">460 </span><span class="Constant">30</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0x30</span>
+<span id="L461" class="LineNr">461 </span><span class="traceContains">+run: <a href='012direct_addressing.cc.html#L390'>pop</a> into r/m32</span>
+<span id="L462" class="LineNr">462 </span><span class="traceContains">+run: effective address is 0x60 (EAX)</span>
+<span id="L463" class="LineNr">463 </span><span class="traceContains">+run: popping value 0x00000030</span>
+<span id="L464" class="LineNr">464 </span><span class="traceContains">+run: incrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000014</span>
+<span id="L465" class="LineNr">465 </span>
+<span id="L466" class="LineNr">466 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L467" class="LineNr">467 </span><span class="Normal">case</span> <span class="Constant">0x8f</span>: <span class="Delimiter">{</span>  <span class="Comment">// pop stack into r/m32</span>
+<span id="L468" class="LineNr">468 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L469" class="LineNr">469 </span>  <span class="Normal">uint8_t</span> subop = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L470" class="LineNr">470 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>subop<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L471" class="LineNr">471 </span>    <span class="Normal">case</span> <span class="Constant">0</span>: <span class="Delimiter">{</span>
+<span id="L472" class="LineNr">472 </span>      <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;pop into r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L473" class="LineNr">473 </span>      <span class="Normal">int32_t</span>* dest = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L474" class="LineNr">474 </span>      *dest = <a href='012direct_addressing.cc.html#L390'>pop</a><span class="Delimiter">();</span>
+<span id="L475" class="LineNr">475 </span>      <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L476" class="LineNr">476 </span>    <span class="Delimiter">}</span>
+<span id="L477" class="LineNr">477 </span>  <span class="Delimiter">}</span>
+<span id="L478" class="LineNr">478 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L479" class="LineNr">479 </span><span class="Delimiter">}</span>
+<span id="L480" class="LineNr">480 </span>
+<span id="L481" class="LineNr">481 </span><span class="SalientComment">//:: special-case for loading address from disp32 rather than register</span>
+<span id="L482" class="LineNr">482 </span>
+<span id="L483" class="LineNr">483 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_displacement)</span>
+<span id="L484" class="LineNr">484 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L485" class="LineNr">485 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L486" class="LineNr">486 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L487" class="LineNr">487 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  1d            <span class="Constant">60</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>              <span class="Comment"># add EBX to *0x60</span>
+<span id="L488" class="LineNr">488 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EBX) 101 (dest in disp32)</span>
+<span id="L489" class="LineNr">489 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L490" class="LineNr">490 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L491" class="LineNr">491 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L492" class="LineNr">492 </span><span class="traceContains">+run: effective address is 0x60 (disp32)</span>
+<span id="L493" class="LineNr">493 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L494" class="LineNr">494 </span>
+<span id="L495" class="LineNr">495 </span><span class="Delimiter">:(before &quot;End Mod 0 Special-cases(addr)&quot;)</span>
+<span id="L496" class="LineNr">496 </span><span class="Normal">case</span> <span class="Constant">5</span>:  <span class="Comment">// exception: mod 0b00 rm 0b101 =&gt; incoming disp32</span>
+<span id="L497" class="LineNr">497 </span>  addr = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L498" class="LineNr">498 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (disp32)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L499" class="LineNr">499 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L500" class="LineNr">500 </span>
+<span id="L501" class="LineNr">501 </span><span class="Comment">//:</span>
+<span id="L502" class="LineNr">502 </span>
+<span id="L503" class="LineNr">503 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32_plus_disp8)</span>
+<span id="L504" class="LineNr">504 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L505" class="LineNr">505 </span><span class="Special">% Reg[EAX].i = 0x5e;  // dest</span>
+<span id="L506" class="LineNr">506 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L507" class="LineNr">507 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L508" class="LineNr">508 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  <span class="Constant">58</span>            <span class="PreProc">0</span><span class="Constant">2</span>                       <span class="Comment"># add EBX to *(EAX+2)</span>
+<span id="L509" class="LineNr">509 </span><span class="Comment"># ModR/M in binary: 01 (indirect+disp8 mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L510" class="LineNr">510 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L511" class="LineNr">511 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L512" class="LineNr">512 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L513" class="LineNr">513 </span><span class="traceContains">+run: effective address is initially 0x5e (EAX)</span>
+<span id="L514" class="LineNr">514 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp8)</span>
+<span id="L515" class="LineNr">515 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L516" class="LineNr">516 </span>
+<span id="L517" class="LineNr">517 </span><span class="Delimiter">:(before &quot;End Mod Special-cases(addr)&quot;)</span>
+<span id="L518" class="LineNr">518 </span><span class="Normal">case</span> <span class="Constant">1</span>:  <span class="Comment">// indirect + disp8 addressing</span>
+<span id="L519" class="LineNr">519 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L520" class="LineNr">520 </span>  <span class="Normal">default</span>:
+<span id="L521" class="LineNr">521 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
+<span id="L522" class="LineNr">522 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L523" class="LineNr">523 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L524" class="LineNr">524 </span>  <span class="Comment">// End Mod 1 Special-cases(addr)</span>
+<span id="L525" class="LineNr">525 </span>  <span class="Delimiter">}</span>
+<span id="L526" class="LineNr">526 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>addr &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L527" class="LineNr">527 </span>    addr += <span class="Normal">static_cast</span>&lt;<span class="Normal">int8_t</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L528" class="LineNr">528 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (after adding disp8)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L529" class="LineNr">529 </span>  <span class="Delimiter">}</span>
+<span id="L530" class="LineNr">530 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>
+<span id="L532" class="LineNr">532 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32_plus_negative_disp8)</span>
+<span id="L533" class="LineNr">533 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L534" class="LineNr">534 </span><span class="Special">% Reg[EAX].i = 0x61;  // dest</span>
+<span id="L535" class="LineNr">535 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L536" class="LineNr">536 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L537" class="LineNr">537 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  <span class="Constant">58</span>            ff                       <span class="Comment"># add EBX to *(EAX-1)</span>
+<span id="L538" class="LineNr">538 </span><span class="Comment"># ModR/M in binary: 01 (indirect+disp8 mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L539" class="LineNr">539 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L540" class="LineNr">540 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L541" class="LineNr">541 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L542" class="LineNr">542 </span><span class="traceContains">+run: effective address is initially 0x61 (EAX)</span>
+<span id="L543" class="LineNr">543 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp8)</span>
+<span id="L544" class="LineNr">544 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L545" class="LineNr">545 </span>
+<span id="L546" class="LineNr">546 </span><span class="Comment">//:</span>
+<span id="L547" class="LineNr">547 </span>
+<span id="L548" class="LineNr">548 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32_plus_disp32)</span>
+<span id="L549" class="LineNr">549 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L550" class="LineNr">550 </span><span class="Special">% Reg[EAX].i = 0x5e;  // dest</span>
+<span id="L551" class="LineNr">551 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L552" class="LineNr">552 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L553" class="LineNr">553 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  <span class="Constant">98</span>            <span class="PreProc">0</span><span class="Constant">2</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>              <span class="Comment"># add EBX to *(EAX+2)</span>
+<span id="L554" class="LineNr">554 </span><span class="Comment"># ModR/M in binary: 10 (indirect+disp32 mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L555" class="LineNr">555 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L556" class="LineNr">556 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L557" class="LineNr">557 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L558" class="LineNr">558 </span><span class="traceContains">+run: effective address is initially 0x5e (EAX)</span>
+<span id="L559" class="LineNr">559 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp32)</span>
+<span id="L560" class="LineNr">560 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L561" class="LineNr">561 </span>
+<span id="L562" class="LineNr">562 </span><span class="Delimiter">:(before &quot;End Mod Special-cases(addr)&quot;)</span>
+<span id="L563" class="LineNr">563 </span><span class="Normal">case</span> <span class="Constant">2</span>:  <span class="Comment">// indirect + disp32 addressing</span>
+<span id="L564" class="LineNr">564 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>rm<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L565" class="LineNr">565 </span>  <span class="Normal">default</span>:
+<span id="L566" class="LineNr">566 </span>    addr = Reg[rm]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
+<span id="L567" class="LineNr">567 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>rm<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L568" class="LineNr">568 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L569" class="LineNr">569 </span>  <span class="Comment">// End Mod 2 Special-cases(addr)</span>
+<span id="L570" class="LineNr">570 </span>  <span class="Delimiter">}</span>
+<span id="L571" class="LineNr">571 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>addr &gt; <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L572" class="LineNr">572 </span>    addr += <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L573" class="LineNr">573 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (after adding disp32)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L574" class="LineNr">574 </span>  <span class="Delimiter">}</span>
+<span id="L575" class="LineNr">575 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L576" class="LineNr">576 </span>
+<span id="L577" class="LineNr">577 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32_plus_negative_disp32)</span>
+<span id="L578" class="LineNr">578 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L579" class="LineNr">579 </span><span class="Special">% Reg[EAX].i = 0x61;  // dest</span>
+<span id="L580" class="LineNr">580 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L581" class="LineNr">581 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L582" class="LineNr">582 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  <span class="Constant">98</span>            ff ff ff ff              <span class="Comment"># add EBX to *(EAX-1)</span>
+<span id="L583" class="LineNr">583 </span><span class="Comment"># ModR/M in binary: 10 (indirect+disp32 mode) 011 (src EBX) 000 (dest EAX)</span>
+<span id="L584" class="LineNr">584 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L585" class="LineNr">585 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L586" class="LineNr">586 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L587" class="LineNr">587 </span><span class="traceContains">+run: effective address is initially 0x61 (EAX)</span>
+<span id="L588" class="LineNr">588 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp32)</span>
+<span id="L589" class="LineNr">589 </span><span class="traceContains">+run: storing 0x00000011</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/014immediate_addressing.cc.html b/html/subx/014immediate_addressing.cc.html
new file mode 100644
index 00000000..e4119c28
--- /dev/null
+++ b/html/subx/014immediate_addressing.cc.html
@@ -0,0 +1,544 @@
+<!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 - subx/014immediate_addressing.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: instructions that (immediately) contain an argument to act with</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L4" class="LineNr">  4 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;81&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop&quot;</span><span class="Delimiter">);</span>
+<span id="L5" class="LineNr">  5 </span>
+<span id="L6" class="LineNr">  6 </span><span class="Delimiter">:(scenario add_imm32_to_r32)</span>
+<span id="L7" class="LineNr">  7 </span><span class="Special">% Reg[EBX].i = 1;</span>
+<span id="L8" class="LineNr">  8 </span>== <span class="Constant">0x1</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L10" class="LineNr"> 10 </span>  <span class="Constant">81</span>  c3                          0a 0b 0c 0d  <span class="Comment"># add 0x0d0c0b0a to EBX</span>
+<span id="L11" class="LineNr"> 11 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 000 (add imm32) 011 (dest EBX)</span>
+<span id="L12" class="LineNr"> 12 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: subop add</span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: storing 0x0d0c0b0b</span>
+<span id="L16" class="LineNr"> 16 </span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Normal">case</span> <span class="Constant">0x81</span>: <span class="Delimiter">{</span>  <span class="Comment">// combine imm32 with r/m32</span>
+<span id="L19" class="LineNr"> 19 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr"> 21 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;combine <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; with r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Normal">uint8_t</span> subop = <span class="Delimiter">(</span>modrm&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>  <span class="Comment">// middle 3 'reg opcode' bits</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>subop<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">case</span> <span class="Constant">0</span>:
+<span id="L26" class="LineNr"> 26 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop add&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L27" class="LineNr"> 27 </span>    <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>+<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L28" class="LineNr"> 28 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L29" class="LineNr"> 29 </span>  <span class="Comment">// End Op 81 Subops</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Normal">default</span>:
+<span id="L31" class="LineNr"> 31 </span>    cerr &lt;&lt; <span class="Constant">&quot;unrecognized sub-opcode after 81: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>subop<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L32" class="LineNr"> 32 </span>    exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Delimiter">}</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">}</span>
+<span id="L36" class="LineNr"> 36 </span>
+<span id="L37" class="LineNr"> 37 </span><span class="Comment">//:</span>
+<span id="L38" class="LineNr"> 38 </span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">:(scenario add_imm32_to_mem_at_r32)</span>
+<span id="L40" class="LineNr"> 40 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L41" class="LineNr"> 41 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L42" class="LineNr"> 42 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">81</span>  <span class="PreProc">0</span><span class="Constant">3</span>                          0a 0b 0c 0d  <span class="Comment"># add 0x0d0c0b0a to *EBX</span>
+<span id="L44" class="LineNr"> 44 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 000 (add imm32) 011 (dest EBX)</span>
+<span id="L45" class="LineNr"> 45 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L46" class="LineNr"> 46 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L48" class="LineNr"> 48 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L49" class="LineNr"> 49 </span><span class="traceContains">+run: subop add</span>
+<span id="L50" class="LineNr"> 50 </span><span class="traceContains">+run: storing 0x0d0c0b0b</span>
+<span id="L51" class="LineNr"> 51 </span>
+<span id="L52" class="LineNr"> 52 </span><span class="SalientComment">//:: subtract</span>
+<span id="L53" class="LineNr"> 53 </span>
+<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L55" class="LineNr"> 55 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;2d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;subtract <a href='011run.cc.html#L253'>imm32</a> from R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>
+<span id="L57" class="LineNr"> 57 </span><span class="Delimiter">:(scenario subtract_imm32_from_eax)</span>
+<span id="L58" class="LineNr"> 58 </span><span class="Special">% Reg[EAX].i = 0x0d0c0baa;</span>
+<span id="L59" class="LineNr"> 59 </span>== <span class="Constant">0x1</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L61" class="LineNr"> 61 </span>  2d                              0a 0b 0c 0d  <span class="Comment"># subtract 0x0d0c0b0a from EAX</span>
+<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+run: subtract <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a from <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+run: storing 0x000000a0</span>
+<span id="L64" class="LineNr"> 64 </span>
+<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L66" class="LineNr"> 66 </span><span class="Normal">case</span> <span class="Constant">0x2d</span>: <span class="Delimiter">{</span>  <span class="Comment">// subtract imm32 from EAX</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L68" class="LineNr"> 68 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subtract <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; from EAX&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L69" class="LineNr"> 69 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>-<span class="Delimiter">,</span> Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Identifier">break</span><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="Comment">//:</span>
+<span id="L74" class="LineNr"> 74 </span>
+<span id="L75" class="LineNr"> 75 </span><span class="Delimiter">:(scenario subtract_imm32_from_mem_at_r32)</span>
+<span id="L76" class="LineNr"> 76 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L77" class="LineNr"> 77 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Constant">81</span>  2b                          <span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># subtract 1 from *EBX</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 101 (subtract imm32) 011 (dest EBX)</span>
+<span id="L81" class="LineNr"> 81 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L82" class="LineNr"> 82 </span>0a <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 10</span>
+<span id="L83" class="LineNr"> 83 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x00000001 with r/m32</span>
+<span id="L84" class="LineNr"> 84 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L85" class="LineNr"> 85 </span><span class="traceContains">+run: subop subtract</span>
+<span id="L86" class="LineNr"> 86 </span><span class="traceContains">+run: storing 0x00000009</span>
+<span id="L87" class="LineNr"> 87 </span>
+<span id="L88" class="LineNr"> 88 </span><span class="Delimiter">:(before &quot;End Op 81 Subops&quot;)</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Normal">case</span> <span class="Constant">5</span>: <span class="Delimiter">{</span>
+<span id="L90" class="LineNr"> 90 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop subtract&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L91" class="LineNr"> 91 </span>  <a href='010vm.cc.html#L69'>BINARY_ARITHMETIC_OP</a><span class="Delimiter">(</span>-<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">}</span>
+<span id="L94" class="LineNr"> 94 </span>
+<span id="L95" class="LineNr"> 95 </span><span class="Comment">//:</span>
+<span id="L96" class="LineNr"> 96 </span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">:(scenario subtract_imm32_from_r32)</span>
+<span id="L98" class="LineNr"> 98 </span><span class="Special">% Reg[EBX].i = 10;</span>
+<span id="L99" class="LineNr"> 99 </span>== <span class="Constant">0x1</span>
+<span id="L100" class="LineNr">100 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Constant">81</span>  eb                          <span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># subtract 1 from EBX</span>
+<span id="L102" class="LineNr">102 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 101 (subtract imm32) 011 (dest EBX)</span>
+<span id="L103" class="LineNr">103 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x00000001 with r/m32</span>
+<span id="L104" class="LineNr">104 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L105" class="LineNr">105 </span><span class="traceContains">+run: subop subtract</span>
+<span id="L106" class="LineNr">106 </span><span class="traceContains">+run: storing 0x00000009</span>
+<span id="L107" class="LineNr">107 </span>
+<span id="L108" class="LineNr">108 </span><span class="SalientComment">//:: and</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L111" class="LineNr">111 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;25&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;R0 = bitwise AND of <a href='011run.cc.html#L253'>imm32</a> with R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(scenario and_imm32_with_eax)</span>
+<span id="L114" class="LineNr">114 </span><span class="Special">% Reg[EAX].i = 0xff;</span>
+<span id="L115" class="LineNr">115 </span>== <span class="Constant">0x1</span>
+<span id="L116" class="LineNr">116 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L117" class="LineNr">117 </span>  <span class="Constant">25</span>                              0a 0b 0c 0d  <span class="Comment"># and 0x0d0c0b0a with EAX</span>
+<span id="L118" class="LineNr">118 </span><span class="traceContains">+run: and <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L119" class="LineNr">119 </span><span class="traceContains">+run: storing 0x0000000a</span>
+<span id="L120" class="LineNr">120 </span>
+<span id="L121" class="LineNr">121 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L122" class="LineNr">122 </span><span class="Normal">case</span> <span class="Constant">0x25</span>: <span class="Delimiter">{</span>  <span class="Comment">// and imm32 with EAX</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L124" class="LineNr">124 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;and <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; with EAX&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L125" class="LineNr">125 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>&amp;<span class="Delimiter">,</span> Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </span><span class="Delimiter">}</span>
+<span id="L128" class="LineNr">128 </span>
+<span id="L129" class="LineNr">129 </span><span class="Comment">//:</span>
+<span id="L130" class="LineNr">130 </span>
+<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(scenario and_imm32_with_mem_at_r32)</span>
+<span id="L132" class="LineNr">132 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L133" class="LineNr">133 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L134" class="LineNr">134 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L135" class="LineNr">135 </span>  <span class="Constant">81</span>  <span class="Constant">23</span>                          0a 0b 0c 0d  <span class="Comment"># and 0x0d0c0b0a with *EBX</span>
+<span id="L136" class="LineNr">136 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 100 (and imm32) 011 (dest EBX)</span>
+<span id="L137" class="LineNr">137 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L138" class="LineNr">138 </span>ff <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0xff</span>
+<span id="L139" class="LineNr">139 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L140" class="LineNr">140 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L141" class="LineNr">141 </span><span class="traceContains">+run: subop and</span>
+<span id="L142" class="LineNr">142 </span><span class="traceContains">+run: storing 0x0000000a</span>
+<span id="L143" class="LineNr">143 </span>
+<span id="L144" class="LineNr">144 </span><span class="Delimiter">:(before &quot;End Op 81 Subops&quot;)</span>
+<span id="L145" class="LineNr">145 </span><span class="Normal">case</span> <span class="Constant">4</span>: <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop and&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L147" class="LineNr">147 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>&amp;<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L148" class="LineNr">148 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L149" class="LineNr">149 </span><span class="Delimiter">}</span>
+<span id="L150" class="LineNr">150 </span>
+<span id="L151" class="LineNr">151 </span><span class="Comment">//:</span>
+<span id="L152" class="LineNr">152 </span>
+<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario and_imm32_with_r32)</span>
+<span id="L154" class="LineNr">154 </span><span class="Special">% Reg[EBX].i = 0xff;</span>
+<span id="L155" class="LineNr">155 </span>== <span class="Constant">0x1</span>
+<span id="L156" class="LineNr">156 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L157" class="LineNr">157 </span>  <span class="Constant">81</span>  e3                          0a 0b 0c 0d  <span class="Comment"># and 0x0d0c0b0a with EBX</span>
+<span id="L158" class="LineNr">158 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 100 (and imm32) 011 (dest EBX)</span>
+<span id="L159" class="LineNr">159 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L160" class="LineNr">160 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L161" class="LineNr">161 </span><span class="traceContains">+run: subop and</span>
+<span id="L162" class="LineNr">162 </span><span class="traceContains">+run: storing 0x0000000a</span>
+<span id="L163" class="LineNr">163 </span>
+<span id="L164" class="LineNr">164 </span><span class="SalientComment">//:: or</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L167" class="LineNr">167 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;0d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;R0 = bitwise OR of <a href='011run.cc.html#L253'>imm32</a> with R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L168" class="LineNr">168 </span>
+<span id="L169" class="LineNr">169 </span><span class="Delimiter">:(scenario or_imm32_with_eax)</span>
+<span id="L170" class="LineNr">170 </span><span class="Special">% Reg[EAX].i = 0xd0c0b0a0;</span>
+<span id="L171" class="LineNr">171 </span>== <span class="Constant">0x1</span>
+<span id="L172" class="LineNr">172 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L173" class="LineNr">173 </span>  0d                              0a 0b 0c 0d  <span class="Comment"># or 0x0d0c0b0a with EAX</span>
+<span id="L174" class="LineNr">174 </span><span class="traceContains">+run: or <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L175" class="LineNr">175 </span><span class="traceContains">+run: storing 0xddccbbaa</span>
+<span id="L176" class="LineNr">176 </span>
+<span id="L177" class="LineNr">177 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L178" class="LineNr">178 </span><span class="Normal">case</span> <span class="Constant">0x0d</span>: <span class="Delimiter">{</span>  <span class="Comment">// or imm32 with EAX</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L180" class="LineNr">180 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;or <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; with EAX&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L181" class="LineNr">181 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L182" class="LineNr">182 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L183" class="LineNr">183 </span><span class="Delimiter">}</span>
+<span id="L184" class="LineNr">184 </span>
+<span id="L185" class="LineNr">185 </span><span class="Comment">//:</span>
+<span id="L186" class="LineNr">186 </span>
+<span id="L187" class="LineNr">187 </span><span class="Delimiter">:(scenario or_imm32_with_mem_at_r32)</span>
+<span id="L188" class="LineNr">188 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L189" class="LineNr">189 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L190" class="LineNr">190 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L191" class="LineNr">191 </span>  <span class="Constant">81</span>  0b                          0a 0b 0c 0d  <span class="Comment"># or 0x0d0c0b0a with *EBX</span>
+<span id="L192" class="LineNr">192 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 001 (or imm32) 011 (dest EBX)</span>
+<span id="L193" class="LineNr">193 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L194" class="LineNr">194 </span>a0 b0 c0 d0  <span class="Comment"># 0xd0c0b0a0</span>
+<span id="L195" class="LineNr">195 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L196" class="LineNr">196 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L197" class="LineNr">197 </span><span class="traceContains">+run: subop or</span>
+<span id="L198" class="LineNr">198 </span><span class="traceContains">+run: storing 0xddccbbaa</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(before &quot;End Op 81 Subops&quot;)</span>
+<span id="L201" class="LineNr">201 </span><span class="Normal">case</span> <span class="Constant">1</span>: <span class="Delimiter">{</span>
+<span id="L202" class="LineNr">202 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop or&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L203" class="LineNr">203 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>|<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L204" class="LineNr">204 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L205" class="LineNr">205 </span><span class="Delimiter">}</span>
+<span id="L206" class="LineNr">206 </span>
+<span id="L207" class="LineNr">207 </span><span class="Delimiter">:(scenario or_imm32_with_r32)</span>
+<span id="L208" class="LineNr">208 </span><span class="Special">% Reg[EBX].i = 0xd0c0b0a0;</span>
+<span id="L209" class="LineNr">209 </span>== <span class="Constant">0x1</span>
+<span id="L210" class="LineNr">210 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Constant">81</span>  cb                          0a 0b 0c 0d  <span class="Comment"># or 0x0d0c0b0a with EBX</span>
+<span id="L212" class="LineNr">212 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 001 (or imm32) 011 (dest EBX)</span>
+<span id="L213" class="LineNr">213 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L214" class="LineNr">214 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L215" class="LineNr">215 </span><span class="traceContains">+run: subop or</span>
+<span id="L216" class="LineNr">216 </span><span class="traceContains">+run: storing 0xddccbbaa</span>
+<span id="L217" class="LineNr">217 </span>
+<span id="L218" class="LineNr">218 </span><span class="SalientComment">//:: xor</span>
+<span id="L219" class="LineNr">219 </span>
+<span id="L220" class="LineNr">220 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L221" class="LineNr">221 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;35&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;R0 = bitwise XOR of <a href='011run.cc.html#L253'>imm32</a> with R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L222" class="LineNr">222 </span>
+<span id="L223" class="LineNr">223 </span><span class="Delimiter">:(scenario xor_imm32_with_eax)</span>
+<span id="L224" class="LineNr">224 </span><span class="Special">% Reg[EAX].i = 0xddccb0a0;</span>
+<span id="L225" class="LineNr">225 </span>== <span class="Constant">0x1</span>
+<span id="L226" class="LineNr">226 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L227" class="LineNr">227 </span>  <span class="Constant">35</span>                              0a 0b 0c 0d  <span class="Comment"># xor 0x0d0c0b0a with EAX</span>
+<span id="L228" class="LineNr">228 </span><span class="traceContains">+run: xor <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with <a href='010vm.cc.html#L13'>EAX</a></span>
+<span id="L229" class="LineNr">229 </span><span class="traceContains">+run: storing 0xd0c0bbaa</span>
+<span id="L230" class="LineNr">230 </span>
+<span id="L231" class="LineNr">231 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L232" class="LineNr">232 </span><span class="Normal">case</span> <span class="Constant">0x35</span>: <span class="Delimiter">{</span>  <span class="Comment">// xor imm32 with EAX</span>
+<span id="L233" class="LineNr">233 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L234" class="LineNr">234 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;xor <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; with EAX&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L235" class="LineNr">235 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>^<span class="Delimiter">,</span> Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L236" class="LineNr">236 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L237" class="LineNr">237 </span><span class="Delimiter">}</span>
+<span id="L238" class="LineNr">238 </span>
+<span id="L239" class="LineNr">239 </span><span class="Comment">//:</span>
+<span id="L240" class="LineNr">240 </span>
+<span id="L241" class="LineNr">241 </span><span class="Delimiter">:(scenario xor_imm32_with_mem_at_r32)</span>
+<span id="L242" class="LineNr">242 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L243" class="LineNr">243 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L244" class="LineNr">244 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L245" class="LineNr">245 </span>  <span class="Constant">81</span>  <span class="Constant">33</span>                          0a 0b 0c 0d  <span class="Comment"># xor 0x0d0c0b0a with *EBX</span>
+<span id="L246" class="LineNr">246 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 110 (xor imm32) 011 (dest EBX)</span>
+<span id="L247" class="LineNr">247 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L248" class="LineNr">248 </span>a0 b0 c0 d0  <span class="Comment"># 0xd0c0b0a0</span>
+<span id="L249" class="LineNr">249 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L250" class="LineNr">250 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L251" class="LineNr">251 </span><span class="traceContains">+run: subop xor</span>
+<span id="L252" class="LineNr">252 </span><span class="traceContains">+run: storing 0xddccbbaa</span>
+<span id="L253" class="LineNr">253 </span>
+<span id="L254" class="LineNr">254 </span><span class="Delimiter">:(before &quot;End Op 81 Subops&quot;)</span>
+<span id="L255" class="LineNr">255 </span><span class="Normal">case</span> <span class="Constant">6</span>: <span class="Delimiter">{</span>
+<span id="L256" class="LineNr">256 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop xor&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L257" class="LineNr">257 </span>  <a href='010vm.cc.html#L81'>BINARY_BITWISE_OP</a><span class="Delimiter">(</span>^<span class="Delimiter">,</span> *arg1<span class="Delimiter">,</span> arg2<span class="Delimiter">);</span>
+<span id="L258" class="LineNr">258 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L259" class="LineNr">259 </span><span class="Delimiter">}</span>
+<span id="L260" class="LineNr">260 </span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">:(scenario xor_imm32_with_r32)</span>
+<span id="L262" class="LineNr">262 </span><span class="Special">% Reg[EBX].i = 0xd0c0b0a0;</span>
+<span id="L263" class="LineNr">263 </span>== <span class="Constant">0x1</span>
+<span id="L264" class="LineNr">264 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L265" class="LineNr">265 </span>  <span class="Constant">81</span>  f3                          0a 0b 0c 0d  <span class="Comment"># xor 0x0d0c0b0a with EBX</span>
+<span id="L266" class="LineNr">266 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 110 (xor imm32) 011 (dest EBX)</span>
+<span id="L267" class="LineNr">267 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L268" class="LineNr">268 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L269" class="LineNr">269 </span><span class="traceContains">+run: subop xor</span>
+<span id="L270" class="LineNr">270 </span><span class="traceContains">+run: storing 0xddccbbaa</span>
+<span id="L271" class="LineNr">271 </span>
+<span id="L272" class="LineNr">272 </span><span class="SalientComment">//:: compare (cmp)</span>
+<span id="L273" class="LineNr">273 </span>
+<span id="L274" class="LineNr">274 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L275" class="LineNr">275 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;3d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;subtract <a href='011run.cc.html#L253'>imm32</a> from R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L276" class="LineNr">276 </span>
+<span id="L277" class="LineNr">277 </span><span class="Delimiter">:(scenario compare_imm32_with_eax_greater)</span>
+<span id="L278" class="LineNr">278 </span><span class="Special">% Reg[EAX].i = 0x0d0c0b0a;</span>
+<span id="L279" class="LineNr">279 </span>== <span class="Constant">0x1</span>
+<span id="L280" class="LineNr">280 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L281" class="LineNr">281 </span>  3d                              <span class="PreProc">0</span><span class="Constant">7</span> 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b07 with EAX</span>
+<span id="L282" class="LineNr">282 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L13'>EAX</a> and <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b07</span>
+<span id="L283" class="LineNr">283 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L284" class="LineNr">284 </span>
+<span id="L285" class="LineNr">285 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L286" class="LineNr">286 </span><span class="Normal">case</span> <span class="Constant">0x3d</span>: <span class="Delimiter">{</span>  <span class="Comment">// subtract imm32 from EAX</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Normal">int32_t</span> arg1 = Reg[EAX]<span class="Delimiter">.</span>i<span class="Delimiter">;</span>
+<span id="L288" class="LineNr">288 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L289" class="LineNr">289 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;compare <a href='010vm.cc.html#L13'>EAX</a> and <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L290" class="LineNr">290 </span>  <span class="Normal">int32_t</span> tmp1 = arg1 - arg2<span class="Delimiter">;</span>
+<span id="L291" class="LineNr">291 </span>  SF = <span class="Delimiter">(</span>tmp1 &lt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L292" class="LineNr">292 </span>  ZF = <span class="Delimiter">(</span>tmp1 == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Normal">int64_t</span> tmp2 = arg1 - arg2<span class="Delimiter">;</span>
+<span id="L294" class="LineNr">294 </span>  <a href='010vm.cc.html#L59'>OF</a> = <span class="Delimiter">(</span>tmp1 != tmp2<span class="Delimiter">);</span>
+<span id="L295" class="LineNr">295 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;SF=&quot;</span> &lt;&lt; SF &lt;&lt; <span class="Constant">&quot;; ZF=&quot;</span> &lt;&lt; ZF &lt;&lt; <span class="Constant">&quot;; OF=&quot;</span> &lt;&lt; <a href='010vm.cc.html#L59'>OF</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L296" class="LineNr">296 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L297" class="LineNr">297 </span><span class="Delimiter">}</span>
+<span id="L298" class="LineNr">298 </span>
+<span id="L299" class="LineNr">299 </span><span class="Delimiter">:(scenario compare_imm32_with_eax_lesser)</span>
+<span id="L300" class="LineNr">300 </span><span class="Special">% Reg[EAX].i = 0x0d0c0b07;</span>
+<span id="L301" class="LineNr">301 </span>== <span class="Constant">0x1</span>
+<span id="L302" class="LineNr">302 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L303" class="LineNr">303 </span>  3d                              0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with EAX</span>
+<span id="L304" class="LineNr">304 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L13'>EAX</a> and <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a</span>
+<span id="L305" class="LineNr">305 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L306" class="LineNr">306 </span>
+<span id="L307" class="LineNr">307 </span><span class="Delimiter">:(scenario compare_imm32_with_eax_equal)</span>
+<span id="L308" class="LineNr">308 </span><span class="Special">% Reg[EAX].i = 0x0d0c0b0a;</span>
+<span id="L309" class="LineNr">309 </span>== <span class="Constant">0x1</span>
+<span id="L310" class="LineNr">310 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L311" class="LineNr">311 </span>  3d                              0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with EAX</span>
+<span id="L312" class="LineNr">312 </span><span class="traceContains">+run: compare <a href='010vm.cc.html#L13'>EAX</a> and <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a</span>
+<span id="L313" class="LineNr">313 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L314" class="LineNr">314 </span>
+<span id="L315" class="LineNr">315 </span><span class="Comment">//:</span>
+<span id="L316" class="LineNr">316 </span>
+<span id="L317" class="LineNr">317 </span><span class="Delimiter">:(scenario compare_imm32_with_r32_greater)</span>
+<span id="L318" class="LineNr">318 </span><span class="Special">% Reg[EBX].i = 0x0d0c0b0a;</span>
+<span id="L319" class="LineNr">319 </span>== <span class="Constant">0x1</span>
+<span id="L320" class="LineNr">320 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L321" class="LineNr">321 </span>  <span class="Constant">81</span>  fb                          <span class="PreProc">0</span><span class="Constant">7</span> 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b07 with EBX</span>
+<span id="L322" class="LineNr">322 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L323" class="LineNr">323 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b07 with r/m32</span>
+<span id="L324" class="LineNr">324 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L325" class="LineNr">325 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L326" class="LineNr">326 </span>
+<span id="L327" class="LineNr">327 </span><span class="Delimiter">:(before &quot;End Op 81 Subops&quot;)</span>
+<span id="L328" class="LineNr">328 </span><span class="Normal">case</span> <span class="Constant">7</span>: <span class="Delimiter">{</span>
+<span id="L329" class="LineNr">329 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;subop compare&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L330" class="LineNr">330 </span>  <span class="Normal">int32_t</span> tmp1 = *arg1 - arg2<span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span>  SF = <span class="Delimiter">(</span>tmp1 &lt; <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L332" class="LineNr">332 </span>  ZF = <span class="Delimiter">(</span>tmp1 == <span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Normal">int64_t</span> tmp2 = *arg1 - arg2<span class="Delimiter">;</span>
+<span id="L334" class="LineNr">334 </span>  <a href='010vm.cc.html#L59'>OF</a> = <span class="Delimiter">(</span>tmp1 != tmp2<span class="Delimiter">);</span>
+<span id="L335" class="LineNr">335 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;SF=&quot;</span> &lt;&lt; SF &lt;&lt; <span class="Constant">&quot;; ZF=&quot;</span> &lt;&lt; ZF &lt;&lt; <span class="Constant">&quot;; OF=&quot;</span> &lt;&lt; <a href='010vm.cc.html#L59'>OF</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L336" class="LineNr">336 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L337" class="LineNr">337 </span><span class="Delimiter">}</span>
+<span id="L338" class="LineNr">338 </span>
+<span id="L339" class="LineNr">339 </span><span class="Delimiter">:(scenario compare_imm32_with_r32_lesser)</span>
+<span id="L340" class="LineNr">340 </span><span class="Special">% Reg[EBX].i = 0x0d0c0b07;</span>
+<span id="L341" class="LineNr">341 </span>== <span class="Constant">0x1</span>
+<span id="L342" class="LineNr">342 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L343" class="LineNr">343 </span>  <span class="Constant">81</span>  fb                          0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with EBX</span>
+<span id="L344" class="LineNr">344 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L345" class="LineNr">345 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L346" class="LineNr">346 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L347" class="LineNr">347 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L348" class="LineNr">348 </span>
+<span id="L349" class="LineNr">349 </span><span class="Delimiter">:(scenario compare_imm32_with_r32_equal)</span>
+<span id="L350" class="LineNr">350 </span><span class="Special">% Reg[EBX].i = 0x0d0c0b0a;</span>
+<span id="L351" class="LineNr">351 </span>== <span class="Constant">0x1</span>
+<span id="L352" class="LineNr">352 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L353" class="LineNr">353 </span>  <span class="Constant">81</span>  fb                          0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with EBX</span>
+<span id="L354" class="LineNr">354 </span><span class="Comment"># ModR/M in binary: 11 (direct mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L355" class="LineNr">355 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L356" class="LineNr">356 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L357" class="LineNr">357 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L358" class="LineNr">358 </span>
+<span id="L359" class="LineNr">359 </span><span class="Delimiter">:(scenario compare_imm32_with_mem_at_r32_greater)</span>
+<span id="L360" class="LineNr">360 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L361" class="LineNr">361 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L362" class="LineNr">362 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L363" class="LineNr">363 </span>  <span class="Constant">81</span>  3b                          <span class="PreProc">0</span><span class="Constant">7</span> 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b07 with *EBX</span>
+<span id="L364" class="LineNr">364 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L365" class="LineNr">365 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L366" class="LineNr">366 </span>0a 0b 0c 0d  <span class="Comment"># 0x0d0c0b0a</span>
+<span id="L367" class="LineNr">367 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b07 with r/m32</span>
+<span id="L368" class="LineNr">368 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L369" class="LineNr">369 </span><span class="traceContains">+run: SF=0; ZF=0; OF=0</span>
+<span id="L370" class="LineNr">370 </span>
+<span id="L371" class="LineNr">371 </span><span class="Delimiter">:(scenario compare_imm32_with_mem_at_r32_lesser)</span>
+<span id="L372" class="LineNr">372 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L373" class="LineNr">373 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L374" class="LineNr">374 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L375" class="LineNr">375 </span>  <span class="Constant">81</span>  3b                          0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with *EBX</span>
+<span id="L376" class="LineNr">376 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L377" class="LineNr">377 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L378" class="LineNr">378 </span><span class="PreProc">0</span><span class="Constant">7</span> 0b 0c 0d  <span class="Comment"># 0x0d0c0b07</span>
+<span id="L379" class="LineNr">379 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L380" class="LineNr">380 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L381" class="LineNr">381 </span><span class="traceContains">+run: SF=1; ZF=0; OF=0</span>
+<span id="L382" class="LineNr">382 </span>
+<span id="L383" class="LineNr">383 </span><span class="Delimiter">:(scenario compare_imm32_with_mem_at_r32_equal)</span>
+<span id="L384" class="LineNr">384 </span><span class="Special">% Reg[EBX].i = 0x0d0c0b0a;</span>
+<span id="L385" class="LineNr">385 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L386" class="LineNr">386 </span>== <span class="Constant">0x01</span>  <span class="Comment"># code segment</span>
+<span id="L387" class="LineNr">387 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L388" class="LineNr">388 </span>  <span class="Constant">81</span>  3b                          0a 0b 0c 0d  <span class="Comment"># compare 0x0d0c0b0a with *EBX</span>
+<span id="L389" class="LineNr">389 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 111 (compare imm32) 011 (dest EBX)</span>
+<span id="L390" class="LineNr">390 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L391" class="LineNr">391 </span>0a 0b 0c 0d  <span class="Comment"># 0x0d0c0b0a</span>
+<span id="L392" class="LineNr">392 </span><span class="traceContains">+run: combine <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a with r/m32</span>
+<span id="L393" class="LineNr">393 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L394" class="LineNr">394 </span><span class="traceContains">+run: SF=0; ZF=1; OF=0</span>
+<span id="L395" class="LineNr">395 </span>
+<span id="L396" class="LineNr">396 </span><span class="SalientComment">//:: copy (mov)</span>
+<span id="L397" class="LineNr">397 </span>
+<span id="L398" class="LineNr">398 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L399" class="LineNr">399 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;b8&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R0 (EAX)&quot;</span><span class="Delimiter">);</span>
+<span id="L400" class="LineNr">400 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;b9&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R1 (ECX)&quot;</span><span class="Delimiter">);</span>
+<span id="L401" class="LineNr">401 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;ba&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R2 (EDX)&quot;</span><span class="Delimiter">);</span>
+<span id="L402" class="LineNr">402 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;bb&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R3 (EBX)&quot;</span><span class="Delimiter">);</span>
+<span id="L403" class="LineNr">403 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;bc&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R4 (ESP)&quot;</span><span class="Delimiter">);</span>
+<span id="L404" class="LineNr">404 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;bd&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R5 (EBP)&quot;</span><span class="Delimiter">);</span>
+<span id="L405" class="LineNr">405 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;be&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R6 (ESI)&quot;</span><span class="Delimiter">);</span>
+<span id="L406" class="LineNr">406 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;bf&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to R7 (EDI)&quot;</span><span class="Delimiter">);</span>
+<span id="L407" class="LineNr">407 </span>
+<span id="L408" class="LineNr">408 </span><span class="Delimiter">:(scenario copy_imm32_to_r32)</span>
+<span id="L409" class="LineNr">409 </span>== <span class="Constant">0x1</span>
+<span id="L410" class="LineNr">410 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L411" class="LineNr">411 </span>  bb                              0a 0b 0c 0d  <span class="Comment"># copy 0x0d0c0b0a to EBX</span>
+<span id="L412" class="LineNr">412 </span><span class="traceContains">+run: copy <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a to <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L413" class="LineNr">413 </span>
+<span id="L414" class="LineNr">414 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L415" class="LineNr">415 </span><span class="Normal">case</span> <span class="Constant">0xb8</span>:
+<span id="L416" class="LineNr">416 </span><span class="Normal">case</span> <span class="Constant">0xb9</span>:
+<span id="L417" class="LineNr">417 </span><span class="Normal">case</span> <span class="Constant">0xba</span>:
+<span id="L418" class="LineNr">418 </span><span class="Normal">case</span> <span class="Constant">0xbb</span>:
+<span id="L419" class="LineNr">419 </span><span class="Normal">case</span> <span class="Constant">0xbc</span>:
+<span id="L420" class="LineNr">420 </span><span class="Normal">case</span> <span class="Constant">0xbd</span>:
+<span id="L421" class="LineNr">421 </span><span class="Normal">case</span> <span class="Constant">0xbe</span>:
+<span id="L422" class="LineNr">422 </span><span class="Normal">case</span> <span class="Constant">0xbf</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy imm32 to r32</span>
+<span id="L423" class="LineNr">423 </span>  <span class="Normal">uint8_t</span> reg1 = op &amp; <span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L424" class="LineNr">424 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L425" class="LineNr">425 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; to &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>reg1<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L426" class="LineNr">426 </span>  Reg[reg1]<span class="Delimiter">.</span>i = arg2<span class="Delimiter">;</span>
+<span id="L427" class="LineNr">427 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L428" class="LineNr">428 </span><span class="Delimiter">}</span>
+<span id="L429" class="LineNr">429 </span>
+<span id="L430" class="LineNr">430 </span><span class="Comment">//:</span>
+<span id="L431" class="LineNr">431 </span>
+<span id="L432" class="LineNr">432 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L433" class="LineNr">433 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;c7&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> to rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L434" class="LineNr">434 </span>
+<span id="L435" class="LineNr">435 </span><span class="Delimiter">:(scenario copy_imm32_to_mem_at_r32)</span>
+<span id="L436" class="LineNr">436 </span><span class="Special">% Reg[EBX].i = 0x60;</span>
+<span id="L437" class="LineNr">437 </span>== <span class="Constant">0x1</span>
+<span id="L438" class="LineNr">438 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L439" class="LineNr">439 </span>  c7  <span class="PreProc">0</span><span class="Constant">3</span>                          0a 0b 0c 0d  <span class="Comment"># copy 0x0d0c0b0a to *EBX</span>
+<span id="L440" class="LineNr">440 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 000 (unused) 011 (dest EBX)</span>
+<span id="L441" class="LineNr">441 </span><span class="traceContains">+run: copy <a href='011run.cc.html#L253'>imm32</a> 0x0d0c0b0a to r/m32</span>
+<span id="L442" class="LineNr">442 </span><span class="traceContains">+run: effective address is 0x60 (EBX)</span>
+<span id="L443" class="LineNr">443 </span>
+<span id="L444" class="LineNr">444 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L445" class="LineNr">445 </span><span class="Normal">case</span> <span class="Constant">0xc7</span>: <span class="Delimiter">{</span>  <span class="Comment">// copy imm32 to r32</span>
+<span id="L446" class="LineNr">446 </span>  <span class="Normal">uint8_t</span> modrm = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L447" class="LineNr">447 </span>  <span class="Normal">int32_t</span> arg2 = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L448" class="LineNr">448 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;copy <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; arg2 &lt;&lt; <span class="Constant">&quot; to r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Normal">int32_t</span>* arg1 = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L450" class="LineNr">450 </span>  *arg1 = arg2<span class="Delimiter">;</span>
+<span id="L451" class="LineNr">451 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L452" class="LineNr">452 </span><span class="Delimiter">}</span>
+<span id="L453" class="LineNr">453 </span>
+<span id="L454" class="LineNr">454 </span><span class="SalientComment">//:: push</span>
+<span id="L455" class="LineNr">455 </span>
+<span id="L456" class="LineNr">456 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L457" class="LineNr">457 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;68&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;push <a href='011run.cc.html#L253'>imm32</a> to stack&quot;</span><span class="Delimiter">);</span>
+<span id="L458" class="LineNr">458 </span>
+<span id="L459" class="LineNr">459 </span><span class="Delimiter">:(scenario push_imm32)</span>
+<span id="L460" class="LineNr">460 </span><span class="Special">% Reg[ESP].u = 0x14;</span>
+<span id="L461" class="LineNr">461 </span>== <span class="Constant">0x1</span>
+<span id="L462" class="LineNr">462 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L463" class="LineNr">463 </span>  <span class="Constant">68</span>                              af <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># push *EAX to stack</span>
+<span id="L464" class="LineNr">464 </span><span class="traceContains">+run: <a href='012direct_addressing.cc.html#L344'>push</a> <a href='011run.cc.html#L253'>imm32</a> 0x000000af</span>
+<span id="L465" class="LineNr">465 </span><span class="traceContains">+run: <a href='010vm.cc.html#L17'>ESP</a> is now 0x00000010</span>
+<span id="L466" class="LineNr">466 </span><span class="traceContains">+run: <a href='003trace.cc.html#L74'>contents</a> at <a href='010vm.cc.html#L17'>ESP</a>: 0x000000af</span>
+<span id="L467" class="LineNr">467 </span>
+<span id="L468" class="LineNr">468 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L469" class="LineNr">469 </span><span class="Normal">case</span> <span class="Constant">0x68</span>: <span class="Delimiter">{</span>
+<span id="L470" class="LineNr">470 </span>  <span class="Normal">int32_t</span> val = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L471" class="LineNr">471 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;push <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; val &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L472" class="LineNr">472 </span>  Reg[ESP]<span class="Delimiter">.</span>u -= <span class="Constant">4</span><span class="Delimiter">;</span>
+<span id="L473" class="LineNr">473 </span>  <a href='010vm.cc.html#L139'>write_mem_i32</a><span class="Delimiter">(</span>Reg[ESP]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> val<span class="Delimiter">);</span>
+<span id="L474" class="LineNr">474 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;ESP is now 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; Reg[ESP]<span class="Delimiter">.</span>u &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L475" class="LineNr">475 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;contents at <a href='010vm.cc.html#L17'>ESP</a>: 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L110'>read_mem_u32</a><span class="Delimiter">(</span>Reg[ESP]<span class="Delimiter">.</span>u<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L476" class="LineNr">476 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L477" class="LineNr">477 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/015index_addressing.cc.html b/html/subx/015index_addressing.cc.html
new file mode 100644
index 00000000..2cd90f2e
--- /dev/null
+++ b/html/subx/015index_addressing.cc.html
@@ -0,0 +1,191 @@
+<!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 - subx/015index_addressing.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.Error { color: #ffffff; background-color: #ff6060; padding-bottom: 1px; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: operating on memory at the address provided by some register plus optional scale and offset</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_r32_with_sib)</span>
+<span id="L4" class="LineNr">  4 </span><span class="Special">% Reg[EBX].i = 0x10;</span>
+<span id="L5" class="LineNr">  5 </span><span class="Special">% Reg[EAX].i = 0x60;</span>
+<span id="L6" class="LineNr">  6 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L8" class="LineNr">  8 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  1c      <span class="Constant">20</span>                             <span class="Comment"># add EBX to *EAX</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment"># SIB in binary: 00 (scale 1) 100 (no index) 000 (base EAX)</span>
+<span id="L11" class="LineNr"> 11 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L12" class="LineNr"> 12 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L13" class="LineNr"> 13 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: effective address is initially 0x60 (EAX)</span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: effective address is 0x60</span>
+<span id="L16" class="LineNr"> 16 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L17" class="LineNr"> 17 </span>
+<span id="L18" class="LineNr"> 18 </span><span class="Delimiter">:(before &quot;End Mod 0 Special-cases(addr)&quot;)</span>
+<span id="L19" class="LineNr"> 19 </span><span class="Normal">case</span> <span class="Constant">4</span>:  <span class="Comment">// exception: mod 0b00 rm 0b100 =&gt; incoming SIB (scale-index-base) byte</span>
+<span id="L20" class="LineNr"> 20 </span>  addr = <a href='015index_addressing.cc.html#L23'>effective_address_from_sib</a><span class="Delimiter">(</span>mod<span class="Delimiter">);</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(code)</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Normal">uint32_t</span> <a href='015index_addressing.cc.html#L23'>effective_address_from_sib</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span> mod<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">uint8_t</span> sib = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L25" class="LineNr"> 25 </span>  <span class="Normal">uint8_t</span> base = sib&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Normal">uint32_t</span> addr = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>base != <a href='010vm.cc.html#L18'>EBP</a> || mod != <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L28" class="LineNr"> 28 </span>    addr = Reg[base]<span class="Delimiter">.</span>u<span class="Delimiter">;</span>
+<span id="L29" class="LineNr"> 29 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (&quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>base<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Delimiter">}</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L32" class="LineNr"> 32 </span>    <span class="Comment">// base == EBP &amp;&amp; mod == 0</span>
+<span id="L33" class="LineNr"> 33 </span>    addr = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>  <span class="Comment">// ignore base</span>
+<span id="L34" class="LineNr"> 34 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is initially 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (disp32)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Delimiter">}</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Normal">uint8_t</span> index = <span class="Delimiter">(</span>sib&gt;&gt;<span class="Constant">3</span><span class="Delimiter">)</span>&amp;<span class="Constant">0x7</span><span class="Delimiter">;</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>index == <a href='010vm.cc.html#L17'>ESP</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L38" class="LineNr"> 38 </span>    <span class="Comment">// ignore index and scale</span>
+<span id="L39" class="LineNr"> 39 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Delimiter">}</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L42" class="LineNr"> 42 </span>    <span class="Normal">uint8_t</span> scale = <span class="Delimiter">(</span><span class="Constant">1</span> &lt;&lt; <span class="Delimiter">(</span>sib&gt;&gt;<span class="Constant">6</span><span class="Delimiter">));</span>
+<span id="L43" class="LineNr"> 43 </span>    addr += Reg[index]<span class="Delimiter">.</span>i*scale<span class="Delimiter">;</span>  <span class="Comment">// treat index register as signed. Maybe base as well? But we'll always ensure it's non-negative.</span>
+<span id="L44" class="LineNr"> 44 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;effective address is 0x&quot;</span> &lt;&lt; std::hex &lt;&lt; addr &lt;&lt; <span class="Constant">&quot; (after adding &quot;</span> &lt;&lt; <a href='012direct_addressing.cc.html#L50'>rname</a><span class="Delimiter">(</span>index<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;*&quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>scale<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;)&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Identifier">return</span> addr<span class="Delimiter">;</span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">}</span>
+<span id="L48" class="LineNr"> 48 </span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_base_r32_index_r32)</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Special">% Reg[EAX].i = 0x5e;  // dest base</span>
+<span id="L52" class="LineNr"> 52 </span><span class="Special">% Reg[ECX].i = 0x2;  // dest index</span>
+<span id="L53" class="LineNr"> 53 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  1c      <span class="Error">08</span>                             <span class="Comment"># add EBX to *(EAX+ECX)</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Comment"># SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)</span>
+<span id="L58" class="LineNr"> 58 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L59" class="LineNr"> 59 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L60" class="LineNr"> 60 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L61" class="LineNr"> 61 </span><span class="traceContains">+run: effective address is initially 0x5e (EAX)</span>
+<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+run: effective address is 0x60 (after adding ECX*1)</span>
+<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L64" class="LineNr"> 64 </span>
+<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_displacement_using_sib)</span>
+<span id="L66" class="LineNr"> 66 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L67" class="LineNr"> 67 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  1c      <span class="Constant">25</span>    <span class="Constant">60</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>              <span class="Comment"># add EBX to *0x60</span>
+<span id="L70" class="LineNr"> 70 </span><span class="Comment"># ModR/M in binary: 00 (indirect mode) 011 (src EBX) 100 (dest in SIB)</span>
+<span id="L71" class="LineNr"> 71 </span><span class="Comment"># SIB in binary: 00 (scale 1) 100 (no index) 101 (not EBP but disp32)</span>
+<span id="L72" class="LineNr"> 72 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L73" class="LineNr"> 73 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L74" class="LineNr"> 74 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L75" class="LineNr"> 75 </span><span class="traceContains">+run: effective address is initially 0x60 (disp32)</span>
+<span id="L76" class="LineNr"> 76 </span><span class="traceContains">+run: effective address is 0x60</span>
+<span id="L77" class="LineNr"> 77 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L78" class="LineNr"> 78 </span>
+<span id="L79" class="LineNr"> 79 </span><span class="Comment">//:</span>
+<span id="L80" class="LineNr"> 80 </span>
+<span id="L81" class="LineNr"> 81 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp8)</span>
+<span id="L82" class="LineNr"> 82 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L83" class="LineNr"> 83 </span><span class="Special">% Reg[EAX].i = 0x59;  // dest base</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Special">% Reg[ECX].i = 0x5;  // dest index</span>
+<span id="L85" class="LineNr"> 85 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L86" class="LineNr"> 86 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  5c      <span class="Error">08</span>    <span class="PreProc">0</span><span class="Constant">2</span>                       <span class="Comment"># add EBX to *(EAX+ECX+2)</span>
+<span id="L88" class="LineNr"> 88 </span><span class="Comment"># ModR/M in binary: 01 (indirect+disp8 mode) 011 (src EBX) 100 (dest in SIB)</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Comment"># SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)</span>
+<span id="L90" class="LineNr"> 90 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L91" class="LineNr"> 91 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L92" class="LineNr"> 92 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L93" class="LineNr"> 93 </span><span class="traceContains">+run: effective address is initially 0x59 (EAX)</span>
+<span id="L94" class="LineNr"> 94 </span><span class="traceContains">+run: effective address is 0x5e (after adding ECX*1)</span>
+<span id="L95" class="LineNr"> 95 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp8)</span>
+<span id="L96" class="LineNr"> 96 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L97" class="LineNr"> 97 </span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(before &quot;End Mod 1 Special-cases(addr)&quot;)</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Normal">case</span> <span class="Constant">4</span>:  <span class="Comment">// exception: mod 0b01 rm 0b100 =&gt; incoming SIB (scale-index-base) byte</span>
+<span id="L100" class="LineNr">100 </span>  addr = <a href='015index_addressing.cc.html#L23'>effective_address_from_sib</a><span class="Delimiter">(</span>mod<span class="Delimiter">);</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L102" class="LineNr">102 </span>
+<span id="L103" class="LineNr">103 </span><span class="Comment">//:</span>
+<span id="L104" class="LineNr">104 </span>
+<span id="L105" class="LineNr">105 </span><span class="Delimiter">:(scenario add_r32_to_mem_at_base_r32_index_r32_plus_disp32)</span>
+<span id="L106" class="LineNr">106 </span><span class="Special">% Reg[EBX].i = 0x10;  // source</span>
+<span id="L107" class="LineNr">107 </span><span class="Special">% Reg[EAX].i = 0x59;  // dest base</span>
+<span id="L108" class="LineNr">108 </span><span class="Special">% Reg[ECX].i = 0x5;  // dest index</span>
+<span id="L109" class="LineNr">109 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L110" class="LineNr">110 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L111" class="LineNr">111 </span>  <span class="PreProc">0</span><span class="Constant">1</span>  9c      <span class="Error">08</span>    <span class="PreProc">0</span><span class="Constant">2</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>              <span class="Comment"># add EBX to *(EAX+ECX+2)</span>
+<span id="L112" class="LineNr">112 </span><span class="Comment"># ModR/M in binary: 10 (indirect+disp32 mode) 011 (src EBX) 100 (dest in SIB)</span>
+<span id="L113" class="LineNr">113 </span><span class="Comment"># SIB in binary: 00 (scale 1) 001 (index ECX) 000 (base EAX)</span>
+<span id="L114" class="LineNr">114 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L115" class="LineNr">115 </span><span class="PreProc">0</span><span class="Constant">1</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 1</span>
+<span id="L116" class="LineNr">116 </span><span class="traceContains">+run: add <a href='010vm.cc.html#L16'>EBX</a> to r/m32</span>
+<span id="L117" class="LineNr">117 </span><span class="traceContains">+run: effective address is initially 0x59 (EAX)</span>
+<span id="L118" class="LineNr">118 </span><span class="traceContains">+run: effective address is 0x5e (after adding ECX*1)</span>
+<span id="L119" class="LineNr">119 </span><span class="traceContains">+run: effective address is 0x60 (after adding disp32)</span>
+<span id="L120" class="LineNr">120 </span><span class="traceContains">+run: storing 0x00000011</span>
+<span id="L121" class="LineNr">121 </span>
+<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(before &quot;End Mod 2 Special-cases(addr)&quot;)</span>
+<span id="L123" class="LineNr">123 </span><span class="Normal">case</span> <span class="Constant">4</span>:  <span class="Comment">// exception: mod 0b10 rm 0b100 =&gt; incoming SIB (scale-index-base) byte</span>
+<span id="L124" class="LineNr">124 </span>  addr = <a href='015index_addressing.cc.html#L23'>effective_address_from_sib</a><span class="Delimiter">(</span>mod<span class="Delimiter">);</span>
+<span id="L125" class="LineNr">125 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/016jump_relative.cc.html b/html/subx/016jump_relative.cc.html
index 9a9049e2..87507c3b 100644
--- a/html/subx/016jump_relative.cc.html
+++ b/html/subx/016jump_relative.cc.html
@@ -61,264 +61,293 @@ if ('onhashchange' in window) {
 </head>
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
-<span id="L1" class="LineNr">  1 </span><span class="Comment">//: jump to 16-bit offset</span>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: jump to 8-bit offset</span>
 <span id="L2" class="LineNr">  2 </span>
 <span id="L3" class="LineNr">  3 </span><span class="SalientComment">//:: jump</span>
 <span id="L4" class="LineNr">  4 </span>
-<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(scenario jump_rel16)</span>
-<span id="L6" class="LineNr">  6 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
-<span id="L7" class="LineNr">  7 </span>  e9                <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L8" class="LineNr">  8 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L9" class="LineNr">  9 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L10" class="LineNr"> 10 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L11" class="LineNr"> 11 </span><span class="traceContains">+run: jump 5</span>
-<span id="L12" class="LineNr"> 12 </span><span class="traceContains">+run: inst: 0x00000009</span>
-<span id="L13" class="LineNr"> 13 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
-<span id="L14" class="LineNr"> 14 </span>
-<span id="L15" class="LineNr"> 15 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
-<span id="L16" class="LineNr"> 16 </span><span class="Normal">case</span> <span class="Constant">0xe9</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8</span>
-<span id="L17" class="LineNr"> 17 </span>  <span class="Normal">int16_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L18" class="LineNr"> 18 </span>  <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; offset &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L19" class="LineNr"> 19 </span>  <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L20" class="LineNr"> 20 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L21" class="LineNr"> 21 </span><span class="Delimiter">}</span>
-<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(code)</span>
-<span id="L23" class="LineNr"> 23 </span><span class="Normal">int16_t</span> <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
-<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">int16_t</span> result = <a href='010core.cc.html#L214'>next</a><span class="Delimiter">();</span>
-<span id="L25" class="LineNr"> 25 </span>  result |= <span class="Delimiter">(</span><a href='010core.cc.html#L214'>next</a><span class="Delimiter">()</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
-<span id="L26" class="LineNr"> 26 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
-<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">}</span>
+<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;eb&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away&quot;</span><span class="Delimiter">);</span>
+<span id="L7" class="LineNr">  7 </span>
+<span id="L8" class="LineNr">  8 </span><span class="Delimiter">:(scenario jump_rel8)</span>
+<span id="L9" class="LineNr">  9 </span>== <span class="Constant">0x1</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L11" class="LineNr"> 11 </span>  eb                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L12" class="LineNr"> 12 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L13" class="LineNr"> 13 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: jump 5</span>
+<span id="L16" class="LineNr"> 16 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L17" class="LineNr"> 17 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L18" class="LineNr"> 18 </span>
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Normal">case</span> <span class="Constant">0xeb</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L23" class="LineNr"> 23 </span>  <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
+<span id="L26" class="LineNr"> 26 </span>
+<span id="L27" class="LineNr"> 27 </span><span class="SalientComment">//:: jump if equal/zero</span>
 <span id="L28" class="LineNr"> 28 </span>
-<span id="L29" class="LineNr"> 29 </span><span class="SalientComment">//:: jump if equal/zero</span>
-<span id="L30" class="LineNr"> 30 </span>
-<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">:(scenario je_rel16_success)</span>
-<span id="L32" class="LineNr"> 32 </span><span class="Special">% ZF = true;</span>
-<span id="L33" class="LineNr"> 33 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">0f</span> <span class="Constant">84</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L35" class="LineNr"> 35 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L36" class="LineNr"> 36 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L37" class="LineNr"> 37 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L38" class="LineNr"> 38 </span><span class="traceContains">+run: jump 5</span>
-<span id="L39" class="LineNr"> 39 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L40" class="LineNr"> 40 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L41" class="LineNr"> 41 </span>
-<span id="L42" class="LineNr"> 42 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L43" class="LineNr"> 43 </span><span class="Normal">case</span> <span class="Constant">0x84</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if ZF</span>
-<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L46" class="LineNr"> 46 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L47" class="LineNr"> 47 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L48" class="LineNr"> 48 </span>  <span class="Delimiter">}</span>
-<span id="L49" class="LineNr"> 49 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">}</span>
-<span id="L51" class="LineNr"> 51 </span>
-<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">:(scenario je_rel16_fail)</span>
-<span id="L53" class="LineNr"> 53 </span><span class="Special">% ZF = false;</span>
-<span id="L54" class="LineNr"> 54 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L55" class="LineNr"> 55 </span>  <span class="Constant">0f</span> <span class="Constant">84</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L56" class="LineNr"> 56 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L57" class="LineNr"> 57 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L58" class="LineNr"> 58 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L59" class="LineNr"> 59 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L60" class="LineNr"> 60 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L61" class="LineNr"> 61 </span><span class="traceAbsent">-run: jump 5</span>
-<span id="L62" class="LineNr"> 62 </span>
-<span id="L63" class="LineNr"> 63 </span><span class="SalientComment">//:: jump if not equal/not zero</span>
-<span id="L64" class="LineNr"> 64 </span>
-<span id="L65" class="LineNr"> 65 </span><span class="Delimiter">:(scenario jne_rel16_success)</span>
-<span id="L66" class="LineNr"> 66 </span><span class="Special">% ZF = false;</span>
-<span id="L67" class="LineNr"> 67 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L68" class="LineNr"> 68 </span>  <span class="Constant">0f</span> <span class="Constant">85</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L69" class="LineNr"> 69 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L70" class="LineNr"> 70 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L71" class="LineNr"> 71 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L72" class="LineNr"> 72 </span><span class="traceContains">+run: jump 5</span>
-<span id="L73" class="LineNr"> 73 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L74" class="LineNr"> 74 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L75" class="LineNr"> 75 </span>
-<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L77" class="LineNr"> 77 </span><span class="Normal">case</span> <span class="Constant">0x85</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 unless ZF</span>
-<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L79" class="LineNr"> 79 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L80" class="LineNr"> 80 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L81" class="LineNr"> 81 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L82" class="LineNr"> 82 </span>  <span class="Delimiter">}</span>
-<span id="L83" class="LineNr"> 83 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L84" class="LineNr"> 84 </span><span class="Delimiter">}</span>
-<span id="L85" class="LineNr"> 85 </span>
-<span id="L86" class="LineNr"> 86 </span><span class="Delimiter">:(scenario jne_rel16_fail)</span>
-<span id="L87" class="LineNr"> 87 </span><span class="Special">% ZF = true;</span>
-<span id="L88" class="LineNr"> 88 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L89" class="LineNr"> 89 </span>  <span class="Constant">0f</span> <span class="Constant">85</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L90" class="LineNr"> 90 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L91" class="LineNr"> 91 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L92" class="LineNr"> 92 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L93" class="LineNr"> 93 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L94" class="LineNr"> 94 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L95" class="LineNr"> 95 </span><span class="traceAbsent">-run: jump 5</span>
-<span id="L96" class="LineNr"> 96 </span>
-<span id="L97" class="LineNr"> 97 </span><span class="SalientComment">//:: jump if greater</span>
-<span id="L98" class="LineNr"> 98 </span>
-<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(scenario jg_rel16_success)</span>
-<span id="L100" class="LineNr">100 </span><span class="Special">% ZF = false;</span>
-<span id="L101" class="LineNr">101 </span><span class="Special">% SF = false;</span>
-<span id="L102" class="LineNr">102 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L103" class="LineNr">103 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L104" class="LineNr">104 </span>  <span class="Constant">0f</span> <span class="Constant">8f</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L105" class="LineNr">105 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L106" class="LineNr">106 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L107" class="LineNr">107 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L108" class="LineNr">108 </span><span class="traceContains">+run: jump 5</span>
-<span id="L109" class="LineNr">109 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L110" class="LineNr">110 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L111" class="LineNr">111 </span>
-<span id="L112" class="LineNr">112 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L113" class="LineNr">113 </span><span class="Normal">case</span> <span class="Constant">0x8f</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if !SF and !ZF</span>
-<span id="L114" class="LineNr">114 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L115" class="LineNr">115 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF &amp;&amp; SF == <a href='010core.cc.html#L33'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L116" class="LineNr">116 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L117" class="LineNr">117 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L118" class="LineNr">118 </span>  <span class="Delimiter">}</span>
-<span id="L119" class="LineNr">119 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L120" class="LineNr">120 </span><span class="Delimiter">}</span>
-<span id="L121" class="LineNr">121 </span>
-<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(scenario jg_rel16_fail)</span>
-<span id="L123" class="LineNr">123 </span><span class="Special">% ZF = false;</span>
-<span id="L124" class="LineNr">124 </span><span class="Special">% SF = true;</span>
-<span id="L125" class="LineNr">125 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L126" class="LineNr">126 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L127" class="LineNr">127 </span>  <span class="Constant">0f</span> <span class="Constant">8f</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L128" class="LineNr">128 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L129" class="LineNr">129 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L130" class="LineNr">130 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L131" class="LineNr">131 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L132" class="LineNr">132 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L133" class="LineNr">133 </span><span class="traceAbsent">-run: jump 5</span>
-<span id="L134" class="LineNr">134 </span>
-<span id="L135" class="LineNr">135 </span><span class="SalientComment">//:: jump if greater or equal</span>
-<span id="L136" class="LineNr">136 </span>
-<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(scenario jge_rel16_success)</span>
-<span id="L138" class="LineNr">138 </span><span class="Special">% SF = false;</span>
-<span id="L139" class="LineNr">139 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L140" class="LineNr">140 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L141" class="LineNr">141 </span>  <span class="Constant">0f</span> 8d                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L142" class="LineNr">142 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L143" class="LineNr">143 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L144" class="LineNr">144 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L145" class="LineNr">145 </span><span class="traceContains">+run: jump 5</span>
-<span id="L146" class="LineNr">146 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L147" class="LineNr">147 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L148" class="LineNr">148 </span>
-<span id="L149" class="LineNr">149 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L150" class="LineNr">150 </span><span class="Normal">case</span> <span class="Constant">0x8d</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if !SF</span>
-<span id="L151" class="LineNr">151 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L152" class="LineNr">152 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF == <a href='010core.cc.html#L33'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L153" class="LineNr">153 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L154" class="LineNr">154 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L155" class="LineNr">155 </span>  <span class="Delimiter">}</span>
-<span id="L156" class="LineNr">156 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L157" class="LineNr">157 </span><span class="Delimiter">}</span>
-<span id="L158" class="LineNr">158 </span>
-<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(scenario jge_rel16_fail)</span>
-<span id="L160" class="LineNr">160 </span><span class="Special">% SF = true;</span>
-<span id="L161" class="LineNr">161 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L162" class="LineNr">162 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L163" class="LineNr">163 </span>  <span class="Constant">0f</span> 8d                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L164" class="LineNr">164 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L165" class="LineNr">165 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L166" class="LineNr">166 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L167" class="LineNr">167 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L168" class="LineNr">168 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L169" class="LineNr">169 </span><span class="traceAbsent">-run: jump 5</span>
-<span id="L170" class="LineNr">170 </span>
-<span id="L171" class="LineNr">171 </span><span class="SalientComment">//:: jump if lesser</span>
-<span id="L172" class="LineNr">172 </span>
-<span id="L173" class="LineNr">173 </span><span class="Delimiter">:(scenario jl_rel16_success)</span>
-<span id="L174" class="LineNr">174 </span><span class="Special">% ZF = false;</span>
-<span id="L175" class="LineNr">175 </span><span class="Special">% SF = true;</span>
-<span id="L176" class="LineNr">176 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L177" class="LineNr">177 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L178" class="LineNr">178 </span>  <span class="Constant">0f</span> 8c                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L179" class="LineNr">179 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L180" class="LineNr">180 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L181" class="LineNr">181 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L182" class="LineNr">182 </span><span class="traceContains">+run: jump 5</span>
-<span id="L183" class="LineNr">183 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L184" class="LineNr">184 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L185" class="LineNr">185 </span>
-<span id="L186" class="LineNr">186 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L187" class="LineNr">187 </span><span class="Normal">case</span> <span class="Constant">0x8c</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if SF and !ZF</span>
-<span id="L188" class="LineNr">188 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L189" class="LineNr">189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF != <a href='010core.cc.html#L33'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L190" class="LineNr">190 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L191" class="LineNr">191 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L192" class="LineNr">192 </span>  <span class="Delimiter">}</span>
-<span id="L193" class="LineNr">193 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L194" class="LineNr">194 </span><span class="Delimiter">}</span>
-<span id="L195" class="LineNr">195 </span>
-<span id="L196" class="LineNr">196 </span><span class="Delimiter">:(scenario jl_rel16_fail)</span>
-<span id="L197" class="LineNr">197 </span><span class="Special">% ZF = false;</span>
-<span id="L198" class="LineNr">198 </span><span class="Special">% SF = false;</span>
-<span id="L199" class="LineNr">199 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L200" class="LineNr">200 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L201" class="LineNr">201 </span>  <span class="Constant">0f</span> 8c                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L202" class="LineNr">202 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L203" class="LineNr">203 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L204" class="LineNr">204 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L205" class="LineNr">205 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L206" class="LineNr">206 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L207" class="LineNr">207 </span><span class="traceAbsent">-run: jump 5</span>
-<span id="L208" class="LineNr">208 </span>
-<span id="L209" class="LineNr">209 </span><span class="SalientComment">//:: jump if lesser or equal</span>
-<span id="L210" class="LineNr">210 </span>
-<span id="L211" class="LineNr">211 </span><span class="Delimiter">:(scenario jle_rel16_equal)</span>
-<span id="L212" class="LineNr">212 </span><span class="Special">% ZF = true;</span>
-<span id="L213" class="LineNr">213 </span><span class="Special">% SF = false;</span>
-<span id="L214" class="LineNr">214 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L215" class="LineNr">215 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L216" class="LineNr">216 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L217" class="LineNr">217 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L218" class="LineNr">218 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L219" class="LineNr">219 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L220" class="LineNr">220 </span><span class="traceContains">+run: jump 5</span>
-<span id="L221" class="LineNr">221 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L222" class="LineNr">222 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
-<span id="L223" class="LineNr">223 </span>
-<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(scenario jle_rel16_lesser)</span>
-<span id="L225" class="LineNr">225 </span><span class="Special">% ZF = false;</span>
-<span id="L226" class="LineNr">226 </span><span class="Special">% SF = true;</span>
-<span id="L227" class="LineNr">227 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L228" class="LineNr">228 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L229" class="LineNr">229 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L230" class="LineNr">230 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L231" class="LineNr">231 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L232" class="LineNr">232 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L233" class="LineNr">233 </span><span class="traceContains">+run: jump 5</span>
-<span id="L234" class="LineNr">234 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L235" class="LineNr">235 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L30" class="LineNr"> 30 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;74&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if ZF is set&quot;</span><span class="Delimiter">);</span>
+<span id="L31" class="LineNr"> 31 </span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">:(scenario je_rel8_success)</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Special">% ZF = true;</span>
+<span id="L34" class="LineNr"> 34 </span>== <span class="Constant">0x1</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L36" class="LineNr"> 36 </span>  <span class="Constant">74</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L39" class="LineNr"> 39 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L40" class="LineNr"> 40 </span><span class="traceContains">+run: jump 5</span>
+<span id="L41" class="LineNr"> 41 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L42" class="LineNr"> 42 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L43" class="LineNr"> 43 </span>
+<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L45" class="LineNr"> 45 </span><span class="Normal">case</span> <span class="Constant">0x74</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 if ZF</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L48" class="LineNr"> 48 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Delimiter">}</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr"> 52 </span><span class="Delimiter">}</span>
+<span id="L53" class="LineNr"> 53 </span>
+<span id="L54" class="LineNr"> 54 </span><span class="Delimiter">:(scenario je_rel8_fail)</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Special">% ZF = false;</span>
+<span id="L56" class="LineNr"> 56 </span>== <span class="Constant">0x1</span>
+<span id="L57" class="LineNr"> 57 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Constant">74</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L60" class="LineNr"> 60 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L61" class="LineNr"> 61 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L63" class="LineNr"> 63 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L64" class="LineNr"> 64 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L65" class="LineNr"> 65 </span>
+<span id="L66" class="LineNr"> 66 </span><span class="SalientComment">//:: jump if not equal/not zero</span>
+<span id="L67" class="LineNr"> 67 </span>
+<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L69" class="LineNr"> 69 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;75&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if ZF is not set&quot;</span><span class="Delimiter">);</span>
+<span id="L70" class="LineNr"> 70 </span>
+<span id="L71" class="LineNr"> 71 </span><span class="Delimiter">:(scenario jne_rel8_success)</span>
+<span id="L72" class="LineNr"> 72 </span><span class="Special">% ZF = false;</span>
+<span id="L73" class="LineNr"> 73 </span>== <span class="Constant">0x1</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Constant">75</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L77" class="LineNr"> 77 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L78" class="LineNr"> 78 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L79" class="LineNr"> 79 </span><span class="traceContains">+run: jump 5</span>
+<span id="L80" class="LineNr"> 80 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L81" class="LineNr"> 81 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L82" class="LineNr"> 82 </span>
+<span id="L83" class="LineNr"> 83 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L84" class="LineNr"> 84 </span><span class="Normal">case</span> <span class="Constant">0x75</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 unless ZF</span>
+<span id="L85" class="LineNr"> 85 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L91" class="LineNr"> 91 </span><span class="Delimiter">}</span>
+<span id="L92" class="LineNr"> 92 </span>
+<span id="L93" class="LineNr"> 93 </span><span class="Delimiter">:(scenario jne_rel8_fail)</span>
+<span id="L94" class="LineNr"> 94 </span><span class="Special">% ZF = true;</span>
+<span id="L95" class="LineNr"> 95 </span>== <span class="Constant">0x1</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Constant">75</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L99" class="LineNr"> 99 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L100" class="LineNr">100 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L101" class="LineNr">101 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L102" class="LineNr">102 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L103" class="LineNr">103 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L104" class="LineNr">104 </span>
+<span id="L105" class="LineNr">105 </span><span class="SalientComment">//:: jump if greater</span>
+<span id="L106" class="LineNr">106 </span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L108" class="LineNr">108 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;7f&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater (ZF is unset, SF == OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">:(scenario jg_rel8_success)</span>
+<span id="L111" class="LineNr">111 </span><span class="Special">% ZF = false;</span>
+<span id="L112" class="LineNr">112 </span><span class="Special">% SF = false;</span>
+<span id="L113" class="LineNr">113 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L114" class="LineNr">114 </span>== <span class="Constant">0x1</span>
+<span id="L115" class="LineNr">115 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L116" class="LineNr">116 </span>  <span class="Constant">7f</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L117" class="LineNr">117 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L118" class="LineNr">118 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L119" class="LineNr">119 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L120" class="LineNr">120 </span><span class="traceContains">+run: jump 5</span>
+<span id="L121" class="LineNr">121 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L122" class="LineNr">122 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L123" class="LineNr">123 </span>
+<span id="L124" class="LineNr">124 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L125" class="LineNr">125 </span><span class="Normal">case</span> <span class="Constant">0x7f</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 if !SF and !ZF</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L127" class="LineNr">127 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF &amp;&amp; SF == <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L128" class="LineNr">128 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L129" class="LineNr">129 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L130" class="LineNr">130 </span>  <span class="Delimiter">}</span>
+<span id="L131" class="LineNr">131 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span>
+<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(scenario jg_rel8_fail)</span>
+<span id="L135" class="LineNr">135 </span><span class="Special">% ZF = false;</span>
+<span id="L136" class="LineNr">136 </span><span class="Special">% SF = true;</span>
+<span id="L137" class="LineNr">137 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L138" class="LineNr">138 </span>== <span class="Constant">0x1</span>
+<span id="L139" class="LineNr">139 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Constant">7f</span>                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L141" class="LineNr">141 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L142" class="LineNr">142 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L143" class="LineNr">143 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L144" class="LineNr">144 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L145" class="LineNr">145 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L146" class="LineNr">146 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L147" class="LineNr">147 </span>
+<span id="L148" class="LineNr">148 </span><span class="SalientComment">//:: jump if greater or equal</span>
+<span id="L149" class="LineNr">149 </span>
+<span id="L150" class="LineNr">150 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L151" class="LineNr">151 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;7d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if greater or equal (SF == OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L152" class="LineNr">152 </span>
+<span id="L153" class="LineNr">153 </span><span class="Delimiter">:(scenario jge_rel8_success)</span>
+<span id="L154" class="LineNr">154 </span><span class="Special">% SF = false;</span>
+<span id="L155" class="LineNr">155 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L156" class="LineNr">156 </span>== <span class="Constant">0x1</span>
+<span id="L157" class="LineNr">157 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L158" class="LineNr">158 </span>  7d                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L159" class="LineNr">159 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L160" class="LineNr">160 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L161" class="LineNr">161 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L162" class="LineNr">162 </span><span class="traceContains">+run: jump 5</span>
+<span id="L163" class="LineNr">163 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L164" class="LineNr">164 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L167" class="LineNr">167 </span><span class="Normal">case</span> <span class="Constant">0x7d</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 if !SF</span>
+<span id="L168" class="LineNr">168 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L169" class="LineNr">169 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF == <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L170" class="LineNr">170 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L171" class="LineNr">171 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Delimiter">}</span>
+<span id="L173" class="LineNr">173 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L174" class="LineNr">174 </span><span class="Delimiter">}</span>
+<span id="L175" class="LineNr">175 </span>
+<span id="L176" class="LineNr">176 </span><span class="Delimiter">:(scenario jge_rel8_fail)</span>
+<span id="L177" class="LineNr">177 </span><span class="Special">% SF = true;</span>
+<span id="L178" class="LineNr">178 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L179" class="LineNr">179 </span>== <span class="Constant">0x1</span>
+<span id="L180" class="LineNr">180 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L181" class="LineNr">181 </span>  7d                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L182" class="LineNr">182 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L183" class="LineNr">183 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L184" class="LineNr">184 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L185" class="LineNr">185 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L186" class="LineNr">186 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L187" class="LineNr">187 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L188" class="LineNr">188 </span>
+<span id="L189" class="LineNr">189 </span><span class="SalientComment">//:: jump if lesser</span>
+<span id="L190" class="LineNr">190 </span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L192" class="LineNr">192 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;7c&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser (SF != OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L193" class="LineNr">193 </span>
+<span id="L194" class="LineNr">194 </span><span class="Delimiter">:(scenario jl_rel8_success)</span>
+<span id="L195" class="LineNr">195 </span><span class="Special">% ZF = false;</span>
+<span id="L196" class="LineNr">196 </span><span class="Special">% SF = true;</span>
+<span id="L197" class="LineNr">197 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L198" class="LineNr">198 </span>== <span class="Constant">0x1</span>
+<span id="L199" class="LineNr">199 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L200" class="LineNr">200 </span>  7c                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L201" class="LineNr">201 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L202" class="LineNr">202 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L203" class="LineNr">203 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L204" class="LineNr">204 </span><span class="traceContains">+run: jump 5</span>
+<span id="L205" class="LineNr">205 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L206" class="LineNr">206 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L207" class="LineNr">207 </span>
+<span id="L208" class="LineNr">208 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L209" class="LineNr">209 </span><span class="Normal">case</span> <span class="Constant">0x7c</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 if SF and !ZF</span>
+<span id="L210" class="LineNr">210 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L211" class="LineNr">211 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF != <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L212" class="LineNr">212 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L213" class="LineNr">213 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Delimiter">}</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L216" class="LineNr">216 </span><span class="Delimiter">}</span>
+<span id="L217" class="LineNr">217 </span>
+<span id="L218" class="LineNr">218 </span><span class="Delimiter">:(scenario jl_rel8_fail)</span>
+<span id="L219" class="LineNr">219 </span><span class="Special">% ZF = false;</span>
+<span id="L220" class="LineNr">220 </span><span class="Special">% SF = false;</span>
+<span id="L221" class="LineNr">221 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L222" class="LineNr">222 </span>== <span class="Constant">0x1</span>
+<span id="L223" class="LineNr">223 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L224" class="LineNr">224 </span>  7c                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L225" class="LineNr">225 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L226" class="LineNr">226 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L227" class="LineNr">227 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L228" class="LineNr">228 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L229" class="LineNr">229 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L230" class="LineNr">230 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L231" class="LineNr">231 </span>
+<span id="L232" class="LineNr">232 </span><span class="SalientComment">//:: jump if lesser or equal</span>
+<span id="L233" class="LineNr">233 </span>
+<span id="L234" class="LineNr">234 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L235" class="LineNr">235 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;7e&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp8 bytes away if lesser or equal (ZF is set or SF != OF)&quot;</span><span class="Delimiter">);</span>
 <span id="L236" class="LineNr">236 </span>
-<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
-<span id="L238" class="LineNr">238 </span><span class="Normal">case</span> <span class="Constant">0x8e</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if SF or ZF</span>
-<span id="L239" class="LineNr">239 </span>  <span class="Normal">int8_t</span> offset = <a href='016jump_relative.cc.html#L23'>imm16</a><span class="Delimiter">();</span>
-<span id="L240" class="LineNr">240 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF || SF != <a href='010core.cc.html#L33'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L241" class="LineNr">241 </span>    <a href='003trace.cc.html#L160'>trace</a><span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010core.cc.html#L246'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L184'>end</a><span class="Delimiter">();</span>
-<span id="L242" class="LineNr">242 </span>    <a href='010core.cc.html#L23'>EIP</a> += offset<span class="Delimiter">;</span>
-<span id="L243" class="LineNr">243 </span>  <span class="Delimiter">}</span>
-<span id="L244" class="LineNr">244 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
-<span id="L245" class="LineNr">245 </span><span class="Delimiter">}</span>
-<span id="L246" class="LineNr">246 </span>
-<span id="L247" class="LineNr">247 </span><span class="Delimiter">:(scenario jle_rel16_greater)</span>
-<span id="L248" class="LineNr">248 </span><span class="Special">% ZF = false;</span>
-<span id="L249" class="LineNr">249 </span><span class="Special">% SF = false;</span>
-<span id="L250" class="LineNr">250 </span><span class="Special">% <a href='010core.cc.html#L33'>OF</a> = false;</span>
-<span id="L251" class="LineNr">251 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
-<span id="L252" class="LineNr">252 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
-<span id="L253" class="LineNr">253 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
-<span id="L254" class="LineNr">254 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
-<span id="L255" class="LineNr">255 </span><span class="traceContains">+run: inst: 0x00000001</span>
-<span id="L256" class="LineNr">256 </span><span class="traceContains">+run: inst: 0x00000005</span>
-<span id="L257" class="LineNr">257 </span><span class="traceContains">+run: inst: 0x0000000a</span>
-<span id="L258" class="LineNr">258 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L237" class="LineNr">237 </span><span class="Delimiter">:(scenario jle_rel8_equal)</span>
+<span id="L238" class="LineNr">238 </span><span class="Special">% ZF = true;</span>
+<span id="L239" class="LineNr">239 </span><span class="Special">% SF = false;</span>
+<span id="L240" class="LineNr">240 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L241" class="LineNr">241 </span>== <span class="Constant">0x1</span>
+<span id="L242" class="LineNr">242 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L243" class="LineNr">243 </span>  7e                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L244" class="LineNr">244 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L245" class="LineNr">245 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L246" class="LineNr">246 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L247" class="LineNr">247 </span><span class="traceContains">+run: jump 5</span>
+<span id="L248" class="LineNr">248 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L249" class="LineNr">249 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L250" class="LineNr">250 </span>
+<span id="L251" class="LineNr">251 </span><span class="Delimiter">:(scenario jle_rel8_lesser)</span>
+<span id="L252" class="LineNr">252 </span><span class="Special">% ZF = false;</span>
+<span id="L253" class="LineNr">253 </span><span class="Special">% SF = true;</span>
+<span id="L254" class="LineNr">254 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L255" class="LineNr">255 </span>== <span class="Constant">0x1</span>
+<span id="L256" class="LineNr">256 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L257" class="LineNr">257 </span>  7e                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L258" class="LineNr">258 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L259" class="LineNr">259 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L260" class="LineNr">260 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L261" class="LineNr">261 </span><span class="traceContains">+run: jump 5</span>
+<span id="L262" class="LineNr">262 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L263" class="LineNr">263 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L264" class="LineNr">264 </span>
+<span id="L265" class="LineNr">265 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L266" class="LineNr">266 </span><span class="Normal">case</span> <span class="Constant">0x7e</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8 if SF or ZF</span>
+<span id="L267" class="LineNr">267 </span>  <span class="Normal">int8_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int</span>&gt;<span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">());</span>
+<span id="L268" class="LineNr">268 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF || SF != <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L269" class="LineNr">269 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L270" class="LineNr">270 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Delimiter">}</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L273" class="LineNr">273 </span><span class="Delimiter">}</span>
+<span id="L274" class="LineNr">274 </span>
+<span id="L275" class="LineNr">275 </span><span class="Delimiter">:(scenario jle_rel8_greater)</span>
+<span id="L276" class="LineNr">276 </span><span class="Special">% ZF = false;</span>
+<span id="L277" class="LineNr">277 </span><span class="Special">% SF = false;</span>
+<span id="L278" class="LineNr">278 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L279" class="LineNr">279 </span>== <span class="Constant">0x1</span>
+<span id="L280" class="LineNr">280 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L281" class="LineNr">281 </span>  7e                <span class="PreProc">0</span><span class="Constant">5</span>                        <span class="Comment"># skip 1 instruction</span>
+<span id="L282" class="LineNr">282 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L283" class="LineNr">283 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L284" class="LineNr">284 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L285" class="LineNr">285 </span><span class="traceContains">+run: inst: 0x00000003</span>
+<span id="L286" class="LineNr">286 </span><span class="traceContains">+run: inst: 0x00000008</span>
+<span id="L287" class="LineNr">287 </span><span class="traceAbsent">-run: jump 5</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/017jump_relative.cc.html b/html/subx/017jump_relative.cc.html
new file mode 100644
index 00000000..6acad3f0
--- /dev/null
+++ b/html/subx/017jump_relative.cc.html
@@ -0,0 +1,360 @@
+<!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 - subx/017jump_relative.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.traceAbsent { color: #c00000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: jump to 16-bit offset</span>
+<span id="L2" class="LineNr">  2 </span>
+<span id="L3" class="LineNr">  3 </span><span class="SalientComment">//:: jump</span>
+<span id="L4" class="LineNr">  4 </span>
+<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L6" class="LineNr">  6 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;e9&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away&quot;</span><span class="Delimiter">);</span>
+<span id="L7" class="LineNr">  7 </span>
+<span id="L8" class="LineNr">  8 </span><span class="Delimiter">:(scenario jump_rel16)</span>
+<span id="L9" class="LineNr">  9 </span>== <span class="Constant">0x1</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L11" class="LineNr"> 11 </span>  e9                <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L12" class="LineNr"> 12 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L13" class="LineNr"> 13 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                              <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L14" class="LineNr"> 14 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L15" class="LineNr"> 15 </span><span class="traceContains">+run: jump 5</span>
+<span id="L16" class="LineNr"> 16 </span><span class="traceContains">+run: inst: 0x00000009</span>
+<span id="L17" class="LineNr"> 17 </span><span class="traceAbsent">-run: inst: 0x00000003</span>
+<span id="L18" class="LineNr"> 18 </span>
+<span id="L19" class="LineNr"> 19 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Normal">case</span> <span class="Constant">0xe9</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel8</span>
+<span id="L21" class="LineNr"> 21 </span>  <span class="Normal">int16_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L22" class="LineNr"> 22 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; offset &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L23" class="LineNr"> 23 </span>  <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Delimiter">}</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Delimiter">:(code)</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Normal">int16_t</span> <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L28" class="LineNr"> 28 </span>  <span class="Normal">int16_t</span> result = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L29" class="LineNr"> 29 </span>  result |= <span class="Delimiter">(</span><a href='010vm.cc.html#L190'>next</a><span class="Delimiter">()</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
+<span id="L30" class="LineNr"> 30 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Delimiter">}</span>
+<span id="L32" class="LineNr"> 32 </span>
+<span id="L33" class="LineNr"> 33 </span><span class="SalientComment">//:: jump if equal/zero</span>
+<span id="L34" class="LineNr"> 34 </span>
+<span id="L35" class="LineNr"> 35 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L36" class="LineNr"> 36 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;84&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if ZF is set&quot;</span><span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(scenario je_rel16_success)</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Special">% ZF = true;</span>
+<span id="L40" class="LineNr"> 40 </span>== <span class="Constant">0x1</span>
+<span id="L41" class="LineNr"> 41 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Constant">0f</span> <span class="Constant">84</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L45" class="LineNr"> 45 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L46" class="LineNr"> 46 </span><span class="traceContains">+run: jump 5</span>
+<span id="L47" class="LineNr"> 47 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L48" class="LineNr"> 48 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L49" class="LineNr"> 49 </span>
+<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L51" class="LineNr"> 51 </span><span class="Normal">case</span> <span class="Constant">0x84</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if ZF</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L54" class="LineNr"> 54 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L55" class="LineNr"> 55 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="Delimiter">}</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L58" class="LineNr"> 58 </span><span class="Delimiter">}</span>
+<span id="L59" class="LineNr"> 59 </span>
+<span id="L60" class="LineNr"> 60 </span><span class="Delimiter">:(scenario je_rel16_fail)</span>
+<span id="L61" class="LineNr"> 61 </span><span class="Special">% ZF = false;</span>
+<span id="L62" class="LineNr"> 62 </span>== <span class="Constant">0x1</span>
+<span id="L63" class="LineNr"> 63 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Constant">0f</span> <span class="Constant">84</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L66" class="LineNr"> 66 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L67" class="LineNr"> 67 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L68" class="LineNr"> 68 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L69" class="LineNr"> 69 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L70" class="LineNr"> 70 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L71" class="LineNr"> 71 </span>
+<span id="L72" class="LineNr"> 72 </span><span class="SalientComment">//:: jump if not equal/not zero</span>
+<span id="L73" class="LineNr"> 73 </span>
+<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L75" class="LineNr"> 75 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;85&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if ZF is not set&quot;</span><span class="Delimiter">);</span>
+<span id="L76" class="LineNr"> 76 </span>
+<span id="L77" class="LineNr"> 77 </span><span class="Delimiter">:(scenario jne_rel16_success)</span>
+<span id="L78" class="LineNr"> 78 </span><span class="Special">% ZF = false;</span>
+<span id="L79" class="LineNr"> 79 </span>== <span class="Constant">0x1</span>
+<span id="L80" class="LineNr"> 80 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Constant">0f</span> <span class="Constant">85</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L84" class="LineNr"> 84 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L85" class="LineNr"> 85 </span><span class="traceContains">+run: jump 5</span>
+<span id="L86" class="LineNr"> 86 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L87" class="LineNr"> 87 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L88" class="LineNr"> 88 </span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L90" class="LineNr"> 90 </span><span class="Normal">case</span> <span class="Constant">0x85</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 unless ZF</span>
+<span id="L91" class="LineNr"> 91 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L94" class="LineNr"> 94 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Delimiter">}</span>
+<span id="L96" class="LineNr"> 96 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L97" class="LineNr"> 97 </span><span class="Delimiter">}</span>
+<span id="L98" class="LineNr"> 98 </span>
+<span id="L99" class="LineNr"> 99 </span><span class="Delimiter">:(scenario jne_rel16_fail)</span>
+<span id="L100" class="LineNr">100 </span><span class="Special">% ZF = true;</span>
+<span id="L101" class="LineNr">101 </span>== <span class="Constant">0x1</span>
+<span id="L102" class="LineNr">102 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L103" class="LineNr">103 </span>  <span class="Constant">0f</span> <span class="Constant">85</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L104" class="LineNr">104 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L105" class="LineNr">105 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L106" class="LineNr">106 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L107" class="LineNr">107 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L108" class="LineNr">108 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L109" class="LineNr">109 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L110" class="LineNr">110 </span>
+<span id="L111" class="LineNr">111 </span><span class="SalientComment">//:: jump if greater</span>
+<span id="L112" class="LineNr">112 </span>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L114" class="LineNr">114 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8f&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if greater (ZF is unset, SF == OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>
+<span id="L116" class="LineNr">116 </span><span class="Delimiter">:(scenario jg_rel16_success)</span>
+<span id="L117" class="LineNr">117 </span><span class="Special">% ZF = false;</span>
+<span id="L118" class="LineNr">118 </span><span class="Special">% SF = false;</span>
+<span id="L119" class="LineNr">119 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L120" class="LineNr">120 </span>== <span class="Constant">0x1</span>
+<span id="L121" class="LineNr">121 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Constant">0f</span> <span class="Constant">8f</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L123" class="LineNr">123 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L124" class="LineNr">124 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L125" class="LineNr">125 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L126" class="LineNr">126 </span><span class="traceContains">+run: jump 5</span>
+<span id="L127" class="LineNr">127 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L128" class="LineNr">128 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L129" class="LineNr">129 </span>
+<span id="L130" class="LineNr">130 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L131" class="LineNr">131 </span><span class="Normal">case</span> <span class="Constant">0x8f</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if !SF and !ZF</span>
+<span id="L132" class="LineNr">132 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!ZF &amp;&amp; SF == <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L134" class="LineNr">134 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L135" class="LineNr">135 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span>  <span class="Delimiter">}</span>
+<span id="L137" class="LineNr">137 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L138" class="LineNr">138 </span><span class="Delimiter">}</span>
+<span id="L139" class="LineNr">139 </span>
+<span id="L140" class="LineNr">140 </span><span class="Delimiter">:(scenario jg_rel16_fail)</span>
+<span id="L141" class="LineNr">141 </span><span class="Special">% ZF = false;</span>
+<span id="L142" class="LineNr">142 </span><span class="Special">% SF = true;</span>
+<span id="L143" class="LineNr">143 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L144" class="LineNr">144 </span>== <span class="Constant">0x1</span>
+<span id="L145" class="LineNr">145 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Constant">0f</span> <span class="Constant">8f</span>                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L147" class="LineNr">147 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L148" class="LineNr">148 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L149" class="LineNr">149 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L150" class="LineNr">150 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L151" class="LineNr">151 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L152" class="LineNr">152 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L153" class="LineNr">153 </span>
+<span id="L154" class="LineNr">154 </span><span class="SalientComment">//:: jump if greater or equal</span>
+<span id="L155" class="LineNr">155 </span>
+<span id="L156" class="LineNr">156 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L157" class="LineNr">157 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8d&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if greater or equal (SF == OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L158" class="LineNr">158 </span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">:(scenario jge_rel16_success)</span>
+<span id="L160" class="LineNr">160 </span><span class="Special">% SF = false;</span>
+<span id="L161" class="LineNr">161 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L162" class="LineNr">162 </span>== <span class="Constant">0x1</span>
+<span id="L163" class="LineNr">163 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L164" class="LineNr">164 </span>  <span class="Constant">0f</span> 8d                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L165" class="LineNr">165 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L166" class="LineNr">166 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L167" class="LineNr">167 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L168" class="LineNr">168 </span><span class="traceContains">+run: jump 5</span>
+<span id="L169" class="LineNr">169 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L170" class="LineNr">170 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L171" class="LineNr">171 </span>
+<span id="L172" class="LineNr">172 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L173" class="LineNr">173 </span><span class="Normal">case</span> <span class="Constant">0x8d</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if !SF</span>
+<span id="L174" class="LineNr">174 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L175" class="LineNr">175 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF == <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L176" class="LineNr">176 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L177" class="LineNr">177 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L178" class="LineNr">178 </span>  <span class="Delimiter">}</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L180" class="LineNr">180 </span><span class="Delimiter">}</span>
+<span id="L181" class="LineNr">181 </span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">:(scenario jge_rel16_fail)</span>
+<span id="L183" class="LineNr">183 </span><span class="Special">% SF = true;</span>
+<span id="L184" class="LineNr">184 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L185" class="LineNr">185 </span>== <span class="Constant">0x1</span>
+<span id="L186" class="LineNr">186 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L187" class="LineNr">187 </span>  <span class="Constant">0f</span> 8d                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L188" class="LineNr">188 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L189" class="LineNr">189 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L190" class="LineNr">190 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L191" class="LineNr">191 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L192" class="LineNr">192 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L193" class="LineNr">193 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L194" class="LineNr">194 </span>
+<span id="L195" class="LineNr">195 </span><span class="SalientComment">//:: jump if lesser</span>
+<span id="L196" class="LineNr">196 </span>
+<span id="L197" class="LineNr">197 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L198" class="LineNr">198 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8c&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if lesser (SF != OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L199" class="LineNr">199 </span>
+<span id="L200" class="LineNr">200 </span><span class="Delimiter">:(scenario jl_rel16_success)</span>
+<span id="L201" class="LineNr">201 </span><span class="Special">% ZF = false;</span>
+<span id="L202" class="LineNr">202 </span><span class="Special">% SF = true;</span>
+<span id="L203" class="LineNr">203 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L204" class="LineNr">204 </span>== <span class="Constant">0x1</span>
+<span id="L205" class="LineNr">205 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L206" class="LineNr">206 </span>  <span class="Constant">0f</span> 8c                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L207" class="LineNr">207 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L208" class="LineNr">208 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L209" class="LineNr">209 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L210" class="LineNr">210 </span><span class="traceContains">+run: jump 5</span>
+<span id="L211" class="LineNr">211 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L212" class="LineNr">212 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L213" class="LineNr">213 </span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L215" class="LineNr">215 </span><span class="Normal">case</span> <span class="Constant">0x8c</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if SF and !ZF</span>
+<span id="L216" class="LineNr">216 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L217" class="LineNr">217 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>SF != <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L218" class="LineNr">218 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L219" class="LineNr">219 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Delimiter">}</span>
+<span id="L221" class="LineNr">221 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L222" class="LineNr">222 </span><span class="Delimiter">}</span>
+<span id="L223" class="LineNr">223 </span>
+<span id="L224" class="LineNr">224 </span><span class="Delimiter">:(scenario jl_rel16_fail)</span>
+<span id="L225" class="LineNr">225 </span><span class="Special">% ZF = false;</span>
+<span id="L226" class="LineNr">226 </span><span class="Special">% SF = false;</span>
+<span id="L227" class="LineNr">227 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L228" class="LineNr">228 </span>== <span class="Constant">0x1</span>
+<span id="L229" class="LineNr">229 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L230" class="LineNr">230 </span>  <span class="Constant">0f</span> 8c                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L231" class="LineNr">231 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L232" class="LineNr">232 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L233" class="LineNr">233 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L234" class="LineNr">234 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L235" class="LineNr">235 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L236" class="LineNr">236 </span><span class="traceAbsent">-run: jump 5</span>
+<span id="L237" class="LineNr">237 </span>
+<span id="L238" class="LineNr">238 </span><span class="SalientComment">//:: jump if lesser or equal</span>
+<span id="L239" class="LineNr">239 </span>
+<span id="L240" class="LineNr">240 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L241" class="LineNr">241 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8e&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;jump disp16 bytes away if lesser or equal (ZF is set or SF != OF)&quot;</span><span class="Delimiter">);</span>
+<span id="L242" class="LineNr">242 </span>
+<span id="L243" class="LineNr">243 </span><span class="Delimiter">:(scenario jle_rel16_equal)</span>
+<span id="L244" class="LineNr">244 </span><span class="Special">% ZF = true;</span>
+<span id="L245" class="LineNr">245 </span><span class="Special">% SF = false;</span>
+<span id="L246" class="LineNr">246 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L247" class="LineNr">247 </span>== <span class="Constant">0x1</span>
+<span id="L248" class="LineNr">248 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L249" class="LineNr">249 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L250" class="LineNr">250 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L251" class="LineNr">251 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L252" class="LineNr">252 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L253" class="LineNr">253 </span><span class="traceContains">+run: jump 5</span>
+<span id="L254" class="LineNr">254 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L255" class="LineNr">255 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L256" class="LineNr">256 </span>
+<span id="L257" class="LineNr">257 </span><span class="Delimiter">:(scenario jle_rel16_lesser)</span>
+<span id="L258" class="LineNr">258 </span><span class="Special">% ZF = false;</span>
+<span id="L259" class="LineNr">259 </span><span class="Special">% SF = true;</span>
+<span id="L260" class="LineNr">260 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L261" class="LineNr">261 </span>== <span class="Constant">0x1</span>
+<span id="L262" class="LineNr">262 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L263" class="LineNr">263 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L264" class="LineNr">264 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L265" class="LineNr">265 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L266" class="LineNr">266 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L267" class="LineNr">267 </span><span class="traceContains">+run: jump 5</span>
+<span id="L268" class="LineNr">268 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L269" class="LineNr">269 </span><span class="traceAbsent">-run: inst: 0x00000005</span>
+<span id="L270" class="LineNr">270 </span>
+<span id="L271" class="LineNr">271 </span><span class="Delimiter">:(before &quot;End Two-Byte Opcodes Starting With 0f&quot;)</span>
+<span id="L272" class="LineNr">272 </span><span class="Normal">case</span> <span class="Constant">0x8e</span>: <span class="Delimiter">{</span>  <span class="Comment">// jump rel16 if SF or ZF</span>
+<span id="L273" class="LineNr">273 </span>  <span class="Normal">int8_t</span> offset = <a href='017jump_relative.cc.html#L27'>imm16</a><span class="Delimiter">();</span>
+<span id="L274" class="LineNr">274 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>ZF || SF != <a href='010vm.cc.html#L59'>OF</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L275" class="LineNr">275 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jump &quot;</span> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>offset<span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L276" class="LineNr">276 </span>    <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L277" class="LineNr">277 </span>  <span class="Delimiter">}</span>
+<span id="L278" class="LineNr">278 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L279" class="LineNr">279 </span><span class="Delimiter">}</span>
+<span id="L280" class="LineNr">280 </span>
+<span id="L281" class="LineNr">281 </span><span class="Delimiter">:(scenario jle_rel16_greater)</span>
+<span id="L282" class="LineNr">282 </span><span class="Special">% ZF = false;</span>
+<span id="L283" class="LineNr">283 </span><span class="Special">% SF = false;</span>
+<span id="L284" class="LineNr">284 </span><span class="Special">% <a href='010vm.cc.html#L59'>OF</a> = false;</span>
+<span id="L285" class="LineNr">285 </span>== <span class="Constant">0x1</span>
+<span id="L286" class="LineNr">286 </span><span class="Comment"># op      ModR/M  SIB   displacement  immediate</span>
+<span id="L287" class="LineNr">287 </span>  <span class="Constant">0f</span> 8e                 <span class="PreProc">0</span><span class="Constant">5</span> <span class="PreProc">0</span><span class="Constant">0</span>                     <span class="Comment"># skip 1 instruction</span>
+<span id="L288" class="LineNr">288 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">1</span>
+<span id="L289" class="LineNr">289 </span>  <span class="PreProc">0</span><span class="Constant">5</span>                                  <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">2</span>
+<span id="L290" class="LineNr">290 </span><span class="traceContains">+run: inst: 0x00000001</span>
+<span id="L291" class="LineNr">291 </span><span class="traceContains">+run: inst: 0x00000005</span>
+<span id="L292" class="LineNr">292 </span><span class="traceContains">+run: inst: 0x0000000a</span>
+<span id="L293" class="LineNr">293 </span><span class="traceAbsent">-run: jump 5</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/018functions.cc.html b/html/subx/018functions.cc.html
new file mode 100644
index 00000000..3e9ceab1
--- /dev/null
+++ b/html/subx/018functions.cc.html
@@ -0,0 +1,155 @@
+<!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 - subx/018functions.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.SalientComment { color: #00ffff; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr"> 1 </span><span class="SalientComment">//:: call</span>
+<span id="L2" class="LineNr"> 2 </span>
+<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L4" class="LineNr"> 4 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;e8&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;call disp32&quot;</span><span class="Delimiter">);</span>
+<span id="L5" class="LineNr"> 5 </span>
+<span id="L6" class="LineNr"> 6 </span><span class="Delimiter">:(scenario call_disp32)</span>
+<span id="L7" class="LineNr"> 7 </span><span class="Special">% Reg[ESP].u = 0x64;</span>
+<span id="L8" class="LineNr"> 8 </span>== <span class="Constant">0x1</span>
+<span id="L9" class="LineNr"> 9 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L10" class="LineNr">10 </span>  e8                              a0 <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># call function offset at 0x000000a0</span>
+<span id="L11" class="LineNr">11 </span>  <span class="Comment"># next EIP is 6</span>
+<span id="L12" class="LineNr">12 </span><span class="traceContains">+run: call <a href='011run.cc.html#L253'>imm32</a> 0x000000a0</span>
+<span id="L13" class="LineNr">13 </span><span class="traceContains">+run: decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000060</span>
+<span id="L14" class="LineNr">14 </span><span class="traceContains">+run: pushing value 0x00000006</span>
+<span id="L15" class="LineNr">15 </span><span class="traceContains">+run: jumping to 0x000000a6</span>
+<span id="L16" class="LineNr">16 </span>
+<span id="L17" class="LineNr">17 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L18" class="LineNr">18 </span><span class="Normal">case</span> <span class="Constant">0xe8</span>: <span class="Delimiter">{</span>  <span class="Comment">// call disp32 relative to next EIP</span>
+<span id="L19" class="LineNr">19 </span>  <span class="Normal">int32_t</span> offset = <a href='011run.cc.html#L253'>imm32</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr">20 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;call <a href='011run.cc.html#L253'>imm32</a> 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; offset &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L21" class="LineNr">21 </span>  <a href='012direct_addressing.cc.html#L344'>push</a><span class="Delimiter">(</span><a href='010vm.cc.html#L29'>EIP</a><span class="Delimiter">);</span>
+<span id="L22" class="LineNr">22 </span>  <a href='010vm.cc.html#L29'>EIP</a> += offset<span class="Delimiter">;</span>
+<span id="L23" class="LineNr">23 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L24" class="LineNr">24 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L25" class="LineNr">25 </span><span class="Delimiter">}</span>
+<span id="L26" class="LineNr">26 </span>
+<span id="L27" class="LineNr">27 </span><span class="Comment">//:</span>
+<span id="L28" class="LineNr">28 </span>
+<span id="L29" class="LineNr">29 </span><span class="Delimiter">:(scenario call_r32)</span>
+<span id="L30" class="LineNr">30 </span><span class="Special">% Reg[ESP].u = 0x64;</span>
+<span id="L31" class="LineNr">31 </span><span class="Special">% Reg[EBX].u = 0x000000a0;</span>
+<span id="L32" class="LineNr">32 </span>== <span class="Constant">0x1</span>
+<span id="L33" class="LineNr">33 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L34" class="LineNr">34 </span>  ff  d3                                       <span class="Comment"># call function offset at EBX</span>
+<span id="L35" class="LineNr">35 </span>  <span class="Comment"># next EIP is 3</span>
+<span id="L36" class="LineNr">36 </span><span class="traceContains">+run: call to r/m32</span>
+<span id="L37" class="LineNr">37 </span><span class="traceContains">+run: r/m32 is <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L38" class="LineNr">38 </span><span class="traceContains">+run: decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000060</span>
+<span id="L39" class="LineNr">39 </span><span class="traceContains">+run: pushing value 0x00000003</span>
+<span id="L40" class="LineNr">40 </span><span class="traceContains">+run: jumping to 0x000000a3</span>
+<span id="L41" class="LineNr">41 </span>
+<span id="L42" class="LineNr">42 </span><span class="Delimiter">:(before &quot;End Op ff Subops&quot;)</span>
+<span id="L43" class="LineNr">43 </span><span class="Normal">case</span> <span class="Constant">2</span>: <span class="Delimiter">{</span>  <span class="Comment">// call function pointer at r/m32</span>
+<span id="L44" class="LineNr">44 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;call to r/m32&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L45" class="LineNr">45 </span>  <span class="Normal">int32_t</span>* offset = <a href='012direct_addressing.cc.html#L31'>effective_address</a><span class="Delimiter">(</span>modrm<span class="Delimiter">);</span>
+<span id="L46" class="LineNr">46 </span>  <a href='012direct_addressing.cc.html#L344'>push</a><span class="Delimiter">(</span><a href='010vm.cc.html#L29'>EIP</a><span class="Delimiter">);</span>
+<span id="L47" class="LineNr">47 </span>  <a href='010vm.cc.html#L29'>EIP</a> += *offset<span class="Delimiter">;</span>
+<span id="L48" class="LineNr">48 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L49" class="LineNr">49 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L50" class="LineNr">50 </span><span class="Delimiter">}</span>
+<span id="L51" class="LineNr">51 </span>
+<span id="L52" class="LineNr">52 </span><span class="Delimiter">:(scenario call_mem_at_r32)</span>
+<span id="L53" class="LineNr">53 </span><span class="Special">% Reg[ESP].u = 0x64;</span>
+<span id="L54" class="LineNr">54 </span><span class="Special">% Reg[EBX].u = 0x10;</span>
+<span id="L55" class="LineNr">55 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L56" class="LineNr">56 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L57" class="LineNr">57 </span>  ff  <span class="Constant">13</span>                                       <span class="Comment"># call function offset at *EBX</span>
+<span id="L58" class="LineNr">58 </span>  <span class="Comment"># next EIP is 3</span>
+<span id="L59" class="LineNr">59 </span>== <span class="Constant">0x10</span>  <span class="Comment"># data segment</span>
+<span id="L60" class="LineNr">60 </span>a0 <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0xa0</span>
+<span id="L61" class="LineNr">61 </span><span class="traceContains">+run: call to r/m32</span>
+<span id="L62" class="LineNr">62 </span><span class="traceContains">+run: effective address is 0x10 (EBX)</span>
+<span id="L63" class="LineNr">63 </span><span class="traceContains">+run: decrementing <a href='010vm.cc.html#L17'>ESP</a> to 0x00000060</span>
+<span id="L64" class="LineNr">64 </span><span class="traceContains">+run: pushing value 0x00000003</span>
+<span id="L65" class="LineNr">65 </span><span class="traceContains">+run: jumping to 0x000000a3</span>
+<span id="L66" class="LineNr">66 </span>
+<span id="L67" class="LineNr">67 </span><span class="SalientComment">//:: ret</span>
+<span id="L68" class="LineNr">68 </span>
+<span id="L69" class="LineNr">69 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L70" class="LineNr">70 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;c3&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;return from most recent unfinished call&quot;</span><span class="Delimiter">);</span>
+<span id="L71" class="LineNr">71 </span>
+<span id="L72" class="LineNr">72 </span><span class="Delimiter">:(scenario ret)</span>
+<span id="L73" class="LineNr">73 </span><span class="Special">% Reg[ESP].u = 0x60;</span>
+<span id="L74" class="LineNr">74 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L75" class="LineNr">75 </span><span class="Comment"># op  ModR/M  SIB   displacement  immediate</span>
+<span id="L76" class="LineNr">76 </span>  c3
+<span id="L77" class="LineNr">77 </span>== <span class="Constant">0x60</span>  <span class="Comment"># data segment</span>
+<span id="L78" class="LineNr">78 </span><span class="Constant">10</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span> <span class="PreProc">0</span><span class="Constant">0</span>  <span class="Comment"># 0x10</span>
+<span id="L79" class="LineNr">79 </span><span class="traceContains">+run: return</span>
+<span id="L80" class="LineNr">80 </span><span class="traceContains">+run: popping value 0x00000010</span>
+<span id="L81" class="LineNr">81 </span><span class="traceContains">+run: jumping to 0x00000010</span>
+<span id="L82" class="LineNr">82 </span>
+<span id="L83" class="LineNr">83 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L84" class="LineNr">84 </span><span class="Normal">case</span> <span class="Constant">0xc3</span>: <span class="Delimiter">{</span>  <span class="Comment">// return from a call</span>
+<span id="L85" class="LineNr">85 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;return&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L86" class="LineNr">86 </span>  <a href='010vm.cc.html#L29'>EIP</a> = <a href='012direct_addressing.cc.html#L390'>pop</a><span class="Delimiter">();</span>
+<span id="L87" class="LineNr">87 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;jumping to 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr">88 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L89" class="LineNr">89 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/019syscalls.cc.html b/html/subx/019syscalls.cc.html
new file mode 100644
index 00000000..72db7525
--- /dev/null
+++ b/html/subx/019syscalls.cc.html
@@ -0,0 +1,98 @@
+<!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 - subx/019syscalls.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr"> 1 </span><span class="Delimiter">:(before &quot;End Initialize Op Names(name)&quot;)</span>
+<span id="L2" class="LineNr"> 2 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> <span class="Constant">&quot;cd&quot;</span><span class="Delimiter">,</span> <span class="Constant">&quot;software interrupt&quot;</span><span class="Delimiter">);</span>
+<span id="L3" class="LineNr"> 3 </span>
+<span id="L4" class="LineNr"> 4 </span><span class="Delimiter">:(before &quot;End Single-Byte Opcodes&quot;)</span>
+<span id="L5" class="LineNr"> 5 </span><span class="Normal">case</span> <span class="Constant">0xcd</span>: <span class="Delimiter">{</span>  <span class="Comment">// int imm8 (software interrupt)</span>
+<span id="L6" class="LineNr"> 6 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">90</span><span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;syscall&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L7" class="LineNr"> 7 </span>  <span class="Normal">uint8_t</span> code = <a href='010vm.cc.html#L190'>next</a><span class="Delimiter">();</span>
+<span id="L8" class="LineNr"> 8 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>code != <span class="Constant">0x80</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L9" class="LineNr"> 9 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Unimplemented interrupt code &quot;</span> &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; code &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L10" class="LineNr">10 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;  Only `int 80h` supported for now.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L11" class="LineNr">11 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L12" class="LineNr">12 </span>  <span class="Delimiter">}</span>
+<span id="L13" class="LineNr">13 </span>  <a href='019syscalls.cc.html#L18'>process_int80</a><span class="Delimiter">();</span>
+<span id="L14" class="LineNr">14 </span>  <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L15" class="LineNr">15 </span><span class="Delimiter">}</span>
+<span id="L16" class="LineNr">16 </span>
+<span id="L17" class="LineNr">17 </span><span class="Delimiter">:(code)</span>
+<span id="L18" class="LineNr">18 </span><span class="Normal">void</span> <a href='019syscalls.cc.html#L18'>process_int80</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L19" class="LineNr">19 </span>  <span class="Normal">switch</span> <span class="Delimiter">(</span>Reg[EAX]<span class="Delimiter">.</span>u<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L20" class="LineNr">20 </span>  <span class="Normal">case</span> <span class="Constant">1</span>:
+<span id="L21" class="LineNr">21 </span>    exit<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">exit code</span><span class="Comment">*/</span>Reg[EBX]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L22" class="LineNr">22 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L23" class="LineNr">23 </span>  <span class="Normal">case</span> <span class="Constant">3</span>:
+<span id="L24" class="LineNr">24 </span>    Reg[EAX]<span class="Delimiter">.</span>i = read<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">file descriptor</span><span class="Comment">*/</span>Reg[EBX]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">memory buffer</span><span class="Comment">*/</span><a href='010vm.cc.html#L117'>mem_addr_u8</a><span class="Delimiter">(</span>Reg[ECX]<span class="Delimiter">.</span>u<span class="Delimiter">),</span> <span class="Comment">/*</span><span class="Comment">size</span><span class="Comment">*/</span>Reg[EDX]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L25" class="LineNr">25 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L26" class="LineNr">26 </span>  <span class="Normal">case</span> <span class="Constant">4</span>:
+<span id="L27" class="LineNr">27 </span>    Reg[EAX]<span class="Delimiter">.</span>i = write<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">file descriptor</span><span class="Comment">*/</span>Reg[EBX]<span class="Delimiter">.</span>u<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">memory buffer</span><span class="Comment">*/</span><a href='010vm.cc.html#L117'>mem_addr_u8</a><span class="Delimiter">(</span>Reg[ECX]<span class="Delimiter">.</span>u<span class="Delimiter">),</span> <span class="Comment">/*</span><span class="Comment">size</span><span class="Comment">*/</span>Reg[EDX]<span class="Delimiter">.</span>u<span class="Delimiter">);</span>
+<span id="L28" class="LineNr">28 </span>    <span class="Identifier">break</span><span class="Delimiter">;</span>
+<span id="L29" class="LineNr">29 </span>  <span class="Normal">default</span>:
+<span id="L30" class="LineNr">30 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <span class="Constant">&quot;: unimplemented syscall &quot;</span> &lt;&lt; Reg[EAX]<span class="Delimiter">.</span>u &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L31" class="LineNr">31 </span>  <span class="Delimiter">}</span>
+<span id="L32" class="LineNr">32 </span><span class="Delimiter">}</span>
+<span id="L33" class="LineNr">33 </span>
+<span id="L34" class="LineNr">34 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L35" class="LineNr">35 </span><span class="Comment">#include &lt;unistd.h&gt;</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/020elf.cc.html b/html/subx/020elf.cc.html
index b346296e..68de155d 100644
--- a/html/subx/020elf.cc.html
+++ b/html/subx/020elf.cc.html
@@ -16,14 +16,12 @@ a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
 .Constant { color: #00a0a0; }
-.PreProc { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Delimiter { color: #800080; }
 .LineNr { color: #444444; }
 .Identifier { color: #c0a020; }
 .Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
-.Todo { color: #000000; background-color: #ffff00; padding-bottom: 1px; }
 .cSpecial { color: #008000; }
 -->
 </style>
@@ -59,79 +57,148 @@ if ('onhashchange' in window) {
 </head>
 <body onload='JumpToLine();'>
 <pre id='vimCodeElement'>
-<span id="L1" class="LineNr"> 1 </span><span class="Comment">// <a href="https://github.com/kragen/stoneknifeforth/blob/702d2ebe1b/386.c">https://github.com/kragen/stoneknifeforth/blob/702d2ebe1b/386.c</a></span>
-<span id="L2" class="LineNr"> 2 </span>
-<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
-<span id="L4" class="LineNr"> 4 </span>assert<span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span><span class="Delimiter">);</span>
-<span id="L5" class="LineNr"> 5 </span><a href='000organization.cc.html#L139'>reset</a><span class="Delimiter">();</span>
-<span id="L6" class="LineNr"> 6 </span><a href='020elf.cc.html#L11'>load_elf</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">);</span>
-<span id="L7" class="LineNr"> 7 </span><span class="Normal">while</span> <span class="Delimiter">(</span><a href='010core.cc.html#L23'>EIP</a> &lt; <a href='010core.cc.html#L68'>End_of_program</a><span class="Delimiter">)</span>
-<span id="L8" class="LineNr"> 8 </span>  <a href='010core.cc.html#L109'>run_one_instruction</a><span class="Delimiter">();</span>
-<span id="L9" class="LineNr"> 9 </span>
-<span id="L10" class="LineNr">10 </span><span class="Delimiter">:(code)</span>
-<span id="L11" class="LineNr">11 </span><span class="Normal">void</span> <a href='020elf.cc.html#L11'>load_elf</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L12" class="LineNr">12 </span>  <span class="Normal">int</span> fd = open<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> O_RDONLY<span class="Delimiter">);</span>
-<span id="L13" class="LineNr">13 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fd &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Constant">&quot;</span><span class="cSpecial">%s</span><span class="Constant">: open&quot;</span><span class="Delimiter">,</span> filename<span class="Delimiter">.</span>c_str<span class="Delimiter">());</span>
-<span id="L14" class="LineNr">14 </span>  <span class="Normal">off_t</span> size = lseek<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">SEEK_END</span><span class="Delimiter">);</span>
-<span id="L15" class="LineNr">15 </span>  lseek<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">SEEK_SET</span><span class="Delimiter">);</span>
-<span id="L16" class="LineNr">16 </span>  <span class="Normal">uint8_t</span>* elf_contents = <span class="Normal">static_cast</span>&lt;<span class="Normal">uint8_t</span>*&gt;<span class="Delimiter">(</span>malloc<span class="Delimiter">(</span>size<span class="Delimiter">));</span>
-<span id="L17" class="LineNr">17 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>elf_contents == <span class="Constant">NULL</span><span class="Delimiter">)</span> <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Constant">&quot;malloc(</span><span class="cSpecial">%d</span><span class="Constant">)&quot;</span><span class="Delimiter">,</span> size<span class="Delimiter">);</span>
-<span id="L18" class="LineNr">18 </span>  <span class="Normal">ssize_t</span> read_size = read<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> elf_contents<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
-<span id="L19" class="LineNr">19 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size != read_size<span class="Delimiter">)</span> <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Constant">&quot;read → </span><span class="cSpecial">%d</span><span class="Constant"> (!= </span><span class="cSpecial">%d</span><span class="Constant">)&quot;</span><span class="Delimiter">,</span> size<span class="Delimiter">,</span> read_size<span class="Delimiter">);</span>
-<span id="L20" class="LineNr">20 </span>  <a href='020elf.cc.html#L24'>load_elf_contents</a><span class="Delimiter">(</span>elf_contents<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
-<span id="L21" class="LineNr">21 </span>  free<span class="Delimiter">(</span>elf_contents<span class="Delimiter">);</span>
-<span id="L22" class="LineNr">22 </span><span class="Delimiter">}</span>
-<span id="L23" class="LineNr">23 </span>
-<span id="L24" class="LineNr">24 </span><span class="Normal">void</span> <a href='020elf.cc.html#L24'>load_elf_contents</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* elf_contents<span class="Delimiter">,</span> <span class="Normal">size_t</span> length<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L25" class="LineNr">25 </span>  <span class="Normal">uint8_t</span> magic[<span class="Constant">5</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
-<span id="L26" class="LineNr">26 </span>  memcpy<span class="Delimiter">(</span>magic<span class="Delimiter">,</span> elf_contents<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">);</span>
-<span id="L27" class="LineNr">27 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Constant">0</span> != memcmp<span class="Delimiter">(</span>magic<span class="Delimiter">,</span> <span class="Constant">&quot;</span><span class="cSpecial">\177</span><span class="Constant">ELF&quot;</span><span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">))</span>
-<span id="L28" class="LineNr">28 </span>    <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Constant">&quot;Invalid ELF file starting with </span><span class="cSpecial">\&quot;</span><span class="cSpecial">%s</span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span><span class="Delimiter">,</span> magic<span class="Delimiter">);</span>
-<span id="L29" class="LineNr">29 </span>
-<span id="L30" class="LineNr">30 </span>  <span class="Normal">uint32_t</span> e_type = <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">16</span>]<span class="Delimiter">);</span>
-<span id="L31" class="LineNr">31 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Constant">0x00030002</span> != e_type<span class="Delimiter">)</span>
-<span id="L32" class="LineNr">32 </span>    <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Constant">&quot;ELF type/machine 0x</span><span class="cSpecial">%x</span><span class="Constant"> isn't i386 executable&quot;</span><span class="Delimiter">,</span> e_type<span class="Delimiter">);</span>
-<span id="L33" class="LineNr">33 </span>
-<span id="L34" class="LineNr">34 </span>  <span class="Normal">uint32_t</span> e_entry = <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">24</span>]<span class="Delimiter">);</span>
-<span id="L35" class="LineNr">35 </span>  <span class="Normal">uint32_t</span> e_phoff = <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">28</span>]<span class="Delimiter">);</span>
-<span id="L36" class="LineNr">36 </span>  <span class="Normal">uint32_t</span> p_vaddr = <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[e_phoff + <span class="Constant">8</span>]<span class="Delimiter">);</span>
-<span id="L37" class="LineNr">37 </span>  <span class="Normal">uint32_t</span> p_memsz = <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[e_phoff + <span class="Constant">20</span>]<span class="Delimiter">);</span>
-<span id="L38" class="LineNr">38 </span>
-<span id="L39" class="LineNr">39 </span>  <a href='010core.cc.html#L67'>Mem</a><span class="Delimiter">.</span>resize<span class="Delimiter">(</span>p_memsz<span class="Delimiter">);</span>  <span class="Comment">// </span><span class="Todo">TODO</span><span class="Comment">: not sure if this should be + p_vaddr</span>
-<span id="L40" class="LineNr">40 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>length &gt; p_memsz - p_vaddr<span class="Delimiter">)</span> length = p_memsz - p_vaddr<span class="Delimiter">;</span>
-<span id="L41" class="LineNr">41 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; length<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span>
-<span id="L42" class="LineNr">42 </span>    <a href='010core.cc.html#L67'>Mem</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>p_vaddr + i<span class="Delimiter">)</span> = elf_contents[i]<span class="Delimiter">;</span>
-<span id="L43" class="LineNr">43 </span>  <a href='010core.cc.html#L68'>End_of_program</a> = p_memsz<span class="Delimiter">;</span>
-<span id="L44" class="LineNr">44 </span>
-<span id="L45" class="LineNr">45 </span>  <span class="Comment">// </span><span class="Todo">TODO</span><span class="Comment">: need to set up real stack somewhere</span>
-<span id="L46" class="LineNr">46 </span>
-<span id="L47" class="LineNr">47 </span>  Reg[ESP]<span class="Delimiter">.</span>u = Reg[EBP]<span class="Delimiter">.</span>u = <a href='010core.cc.html#L68'>End_of_program</a><span class="Delimiter">;</span>
-<span id="L48" class="LineNr">48 </span>  <a href='010core.cc.html#L23'>EIP</a> = e_entry<span class="Delimiter">;</span>
-<span id="L49" class="LineNr">49 </span><span class="Delimiter">}</span>
-<span id="L50" class="LineNr">50 </span>
-<span id="L51" class="LineNr">51 </span><span class="Normal">inline</span> <span class="Normal">uint32_t</span> <a href='020elf.cc.html#L51'>u32_in</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
-<span id="L52" class="LineNr">52 </span>  <span class="Identifier">return</span> p[<span class="Constant">0</span>] | p[<span class="Constant">1</span>] &lt;&lt; <span class="Constant">8</span> | p[<span class="Constant">2</span>] &lt;&lt; <span class="Constant">16</span> | p[<span class="Constant">3</span>] &lt;&lt; <span class="Constant">24</span><span class="Delimiter">;</span>
-<span id="L53" class="LineNr">53 </span><span class="Delimiter">}</span>
-<span id="L54" class="LineNr">54 </span>
-<span id="L55" class="LineNr">55 </span><span class="Normal">void</span> <a href='020elf.cc.html#L55'>die</a><span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">char</span>* format<span class="Delimiter">,</span> <span class="Delimiter">...)</span> <span class="Delimiter">{</span>
-<span id="L56" class="LineNr">56 </span>  <span class="Normal">va_list</span> args<span class="Delimiter">;</span>
-<span id="L57" class="LineNr">57 </span>  va_start<span class="Delimiter">(</span>args<span class="Delimiter">,</span> format<span class="Delimiter">);</span>
-<span id="L58" class="LineNr">58 </span>  vfprintf<span class="Delimiter">(</span><span class="Constant">stderr</span><span class="Delimiter">,</span> format<span class="Delimiter">,</span> args<span class="Delimiter">);</span>
-<span id="L59" class="LineNr">59 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>errno<span class="Delimiter">)</span>
-<span id="L60" class="LineNr">60 </span>    perror<span class="Delimiter">(</span><span class="Constant">&quot;&lt;200c&gt;&quot;</span><span class="Delimiter">);</span>
-<span id="L61" class="LineNr">61 </span>  <span class="Normal">else</span>
-<span id="L62" class="LineNr">62 </span>    fprintf<span class="Delimiter">(</span><span class="Constant">stderr</span><span class="Delimiter">,</span> <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">);</span>
-<span id="L63" class="LineNr">63 </span>  va_end<span class="Delimiter">(</span>args<span class="Delimiter">);</span>
-<span id="L64" class="LineNr">64 </span>  abort<span class="Delimiter">();</span>
-<span id="L65" class="LineNr">65 </span><span class="Delimiter">}</span>
-<span id="L66" class="LineNr">66 </span>
-<span id="L67" class="LineNr">67 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
-<span id="L68" class="LineNr">68 </span><span class="PreProc">#include </span><span class="Constant">&lt;sys/types.h&gt;</span>
-<span id="L69" class="LineNr">69 </span><span class="PreProc">#include </span><span class="Constant">&lt;sys/stat.h&gt;</span>
-<span id="L70" class="LineNr">70 </span><span class="PreProc">#include </span><span class="Constant">&lt;fcntl.h&gt;</span>
-<span id="L71" class="LineNr">71 </span><span class="PreProc">#include </span><span class="Constant">&lt;unistd.h&gt;</span>
-<span id="L72" class="LineNr">72 </span><span class="PreProc">#include </span><span class="Constant">&lt;stdarg.h&gt;</span>
-<span id="L73" class="LineNr">73 </span><span class="PreProc">#include </span><span class="Constant">&lt;errno.h&gt;</span>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">// Helper for debugging and testing.</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">// Based on <a href="https://github.com/kragen/stoneknifeforth/blob/702d2ebe1b/386.c">https://github.com/kragen/stoneknifeforth/blob/702d2ebe1b/386.c</a></span>
+<span id="L3" class="LineNr">  3 </span>
+<span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
+<span id="L5" class="LineNr">  5 </span>assert<span class="Delimiter">(</span>argc &gt; <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L6" class="LineNr">  6 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;run&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L7" class="LineNr">  7 </span>  <a href='003trace.cc.html#L236'>START_TRACING_UNTIL_END_OF_SCOPE</a><span class="Delimiter">;</span>
+<span id="L8" class="LineNr">  8 </span>  assert<span class="Delimiter">(</span>argc &gt; <span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L9" class="LineNr">  9 </span>  <a href='000organization.cc.html#L148'>reset</a><span class="Delimiter">();</span>
+<span id="L10" class="LineNr"> 10 </span>  cerr &lt;&lt; std::hex<span class="Delimiter">;</span>
+<span id="L11" class="LineNr"> 11 </span>  <a href='020elf.cc.html#L108'>initialize_mem</a><span class="Delimiter">();</span>
+<span id="L12" class="LineNr"> 12 </span>  <a href='010vm.cc.html#L94'>Mem_offset</a> = <a href='020elf.cc.html#L104'>CODE_START</a><span class="Delimiter">;</span>
+<span id="L13" class="LineNr"> 13 </span>  <a href='020elf.cc.html#L21'>load_elf</a><span class="Delimiter">(</span>argv[<span class="Constant">2</span>]<span class="Delimiter">);</span>
+<span id="L14" class="LineNr"> 14 </span>  <span class="Normal">while</span> <span class="Delimiter">(</span><a href='010vm.cc.html#L29'>EIP</a> &lt; <a href='010vm.cc.html#L95'>End_of_program</a><span class="Delimiter">)</span>  <span class="Comment">// weak final-gasp termination check</span>
+<span id="L15" class="LineNr"> 15 </span>    <a href='010vm.cc.html#L147'>run_one_instruction</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr"> 16 </span>  <a href='003trace.cc.html#L192'>dbg</a> &lt;&lt; <span class="Constant">&quot;executed past <a href='003trace.cc.html#L213'>end</a> of the world: &quot;</span> &lt;&lt; <a href='010vm.cc.html#L29'>EIP</a> &lt;&lt; <span class="Constant">&quot; vs &quot;</span> &lt;&lt; <a href='010vm.cc.html#L95'>End_of_program</a> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L17" class="LineNr"> 17 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Delimiter">}</span>
+<span id="L19" class="LineNr"> 19 </span>
+<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(code)</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Normal">void</span> <a href='020elf.cc.html#L21'>load_elf</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L22" class="LineNr"> 22 </span>  <span class="Normal">int</span> fd = open<span class="Delimiter">(</span>filename<span class="Delimiter">.</span>c_str<span class="Delimiter">(),</span> O_RDONLY<span class="Delimiter">);</span>
+<span id="L23" class="LineNr"> 23 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>fd &lt; <span class="Constant">0</span><span class="Delimiter">)</span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; filename<span class="Delimiter">.</span>c_str<span class="Delimiter">()</span> &lt;&lt; <span class="Constant">&quot;: open&quot;</span> &lt;&lt; <a href='020elf.cc.html#L121'>perr</a><span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">off_t</span> size = lseek<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">SEEK_END</span><span class="Delimiter">);</span>
+<span id="L25" class="LineNr"> 25 </span>  lseek<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> <span class="Constant">0</span><span class="Delimiter">,</span> <span class="Constant">SEEK_SET</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Normal">uint8_t</span>* elf_contents = <span class="Normal">static_cast</span>&lt;<span class="Normal">uint8_t</span>*&gt;<span class="Delimiter">(</span>malloc<span class="Delimiter">(</span>size<span class="Delimiter">));</span>
+<span id="L27" class="LineNr"> 27 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>elf_contents == <span class="Constant">NULL</span><span class="Delimiter">)</span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;malloc(&quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">')'</span> &lt;&lt; <a href='020elf.cc.html#L121'>perr</a><span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L28" class="LineNr"> 28 </span>  <span class="Normal">ssize_t</span> read_size = read<span class="Delimiter">(</span>fd<span class="Delimiter">,</span> elf_contents<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
+<span id="L29" class="LineNr"> 29 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size != read_size<span class="Delimiter">)</span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;read → &quot;</span> &lt;&lt; size &lt;&lt; <span class="Constant">&quot; (!= &quot;</span> &lt;&lt; read_size &lt;&lt; <span class="Constant">')'</span> &lt;&lt; <a href='020elf.cc.html#L121'>perr</a><span class="Delimiter">()</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L30" class="LineNr"> 30 </span>  <a href='020elf.cc.html#L34'>load_elf_contents</a><span class="Delimiter">(</span>elf_contents<span class="Delimiter">,</span> size<span class="Delimiter">);</span>
+<span id="L31" class="LineNr"> 31 </span>  free<span class="Delimiter">(</span>elf_contents<span class="Delimiter">);</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Delimiter">}</span>
+<span id="L33" class="LineNr"> 33 </span>
+<span id="L34" class="LineNr"> 34 </span><span class="Normal">void</span> <a href='020elf.cc.html#L34'>load_elf_contents</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* elf_contents<span class="Delimiter">,</span> <span class="Normal">size_t</span> size<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Normal">uint8_t</span> magic[<span class="Constant">5</span>] = <span class="Delimiter">{</span><span class="Constant">0</span><span class="Delimiter">};</span>
+<span id="L36" class="LineNr"> 36 </span>  memcpy<span class="Delimiter">(</span>magic<span class="Delimiter">,</span> elf_contents<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>memcmp<span class="Delimiter">(</span>magic<span class="Delimiter">,</span> <span class="Constant">&quot;</span><span class="cSpecial">\177</span><span class="Constant">ELF&quot;</span><span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">)</span> != <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L38" class="LineNr"> 38 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Invalid ELF file; starts with </span><span class="cSpecial">\&quot;</span><span class="Constant">&quot;</span> &lt;&lt; magic &lt;&lt; <span class="Constant">'&quot;'</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L39" class="LineNr"> 39 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>elf_contents[<span class="Constant">4</span>] != <span class="Constant">1</span><span class="Delimiter">)</span>
+<span id="L40" class="LineNr"> 40 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Only 32-bit ELF files (4-byte words; virtual addresses up to 4GB) supported.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>elf_contents[<span class="Constant">5</span>] != <span class="Constant">1</span><span class="Delimiter">)</span>
+<span id="L42" class="LineNr"> 42 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Only little-endian ELF files supported.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Comment">// unused: remaining 10 bytes of e_ident</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Normal">uint32_t</span> e_machine_type = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">16</span>]<span class="Delimiter">);</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>e_machine_type != <span class="Constant">0x00030002</span><span class="Delimiter">)</span>
+<span id="L46" class="LineNr"> 46 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;ELF type/machine 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; e_machine_type &lt;&lt; <span class="Constant">&quot; isn't i386 executable</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; die<span class="Delimiter">();</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Comment">// unused: e_version. We only support version 1, and later versions will be backwards compatible.</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Normal">uint32_t</span> e_entry = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">24</span>]<span class="Delimiter">);</span>
+<span id="L49" class="LineNr"> 49 </span>  <span class="Normal">uint32_t</span> e_phoff = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">28</span>]<span class="Delimiter">);</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Comment">// unused: e_shoff</span>
+<span id="L51" class="LineNr"> 51 </span>  <span class="Comment">// unused: e_flags</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">uint32_t</span> e_ehsize = <a href='020elf.cc.html#L116'>u16_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">40</span>]<span class="Delimiter">);</span>
+<span id="L53" class="LineNr"> 53 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>e_ehsize &lt; <span class="Constant">52</span><span class="Delimiter">)</span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Invalid binary; ELF header too small</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L54" class="LineNr"> 54 </span>  <span class="Normal">uint32_t</span> e_phentsize = <a href='020elf.cc.html#L116'>u16_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">42</span>]<span class="Delimiter">);</span>
+<span id="L55" class="LineNr"> 55 </span>  <span class="Normal">uint32_t</span> e_phnum = <a href='020elf.cc.html#L116'>u16_in</a><span class="Delimiter">(</span>&amp;elf_contents[<span class="Constant">44</span>]<span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>  <a href='003trace.cc.html#L192'>dbg</a> &lt;&lt; e_phnum &lt;&lt; <span class="Constant">&quot; entries in the <a href='011run.cc.html#L94'>program</a> header, each &quot;</span> &lt;&lt; e_phentsize &lt;&lt; <span class="Constant">&quot; bytes long&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Comment">// unused: e_shentsize</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Comment">// unused: e_shnum</span>
+<span id="L59" class="LineNr"> 59 </span>  <span class="Comment">// unused: e_shstrndx</span>
+<span id="L60" class="LineNr"> 60 </span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; e_phnum<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span>
+<span id="L62" class="LineNr"> 62 </span>    <a href='020elf.cc.html#L70'>load_segment_from_program_header</a><span class="Delimiter">(</span>elf_contents<span class="Delimiter">,</span> size<span class="Delimiter">,</span> e_phoff + i*e_phentsize<span class="Delimiter">,</span> e_ehsize<span class="Delimiter">);</span>
+<span id="L63" class="LineNr"> 63 </span>
+<span id="L64" class="LineNr"> 64 </span>  <span class="Comment">// initialize code and stack</span>
+<span id="L65" class="LineNr"> 65 </span>  Reg[ESP]<span class="Delimiter">.</span>u = <a href='020elf.cc.html#L106'>AFTER_STACK</a><span class="Delimiter">;</span>
+<span id="L66" class="LineNr"> 66 </span>  Reg[EBP]<span class="Delimiter">.</span>u = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L67" class="LineNr"> 67 </span>  <a href='010vm.cc.html#L29'>EIP</a> = e_entry<span class="Delimiter">;</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Delimiter">}</span>
+<span id="L69" class="LineNr"> 69 </span>
+<span id="L70" class="LineNr"> 70 </span><span class="Normal">void</span> <a href='020elf.cc.html#L70'>load_segment_from_program_header</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* elf_contents<span class="Delimiter">,</span> <span class="Normal">size_t</span> size<span class="Delimiter">,</span> <span class="Normal">uint32_t</span> offset<span class="Delimiter">,</span> <span class="Normal">uint32_t</span> e_ehsize<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">uint32_t</span> p_type = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[offset]<span class="Delimiter">);</span>
+<span id="L72" class="LineNr"> 72 </span>  <a href='003trace.cc.html#L192'>dbg</a> &lt;&lt; <span class="Constant">&quot;program header at offset &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot;: type &quot;</span> &lt;&lt; p_type &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p_type != <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L74" class="LineNr"> 74 </span>    <a href='003trace.cc.html#L192'>dbg</a> &lt;&lt; <span class="Constant">&quot;ignoring segment at offset &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; of non PT_LOAD type &quot;</span> &lt;&lt; p_type &lt;&lt; <span class="Constant">&quot; (see <a href="http://refspecs.linuxbase.org/elf/elf.pdf">http://refspecs.linuxbase.org/elf/elf.pdf</a>)&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L75" class="LineNr"> 75 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Delimiter">}</span>
+<span id="L77" class="LineNr"> 77 </span>  <span class="Normal">uint32_t</span> p_offset = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[offset + <span class="Constant">4</span>]<span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">uint32_t</span> p_vaddr = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[offset + <span class="Constant">8</span>]<span class="Delimiter">);</span>
+<span id="L79" class="LineNr"> 79 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>e_ehsize &gt; p_vaddr<span class="Delimiter">)</span> <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Invalid binary; <a href='011run.cc.html#L94'>program</a> header overlaps ELF header</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Comment">// unused: p_paddr</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Normal">uint32_t</span> p_filesz = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[offset + <span class="Constant">16</span>]<span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">uint32_t</span> p_memsz = <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span>&amp;elf_contents[offset + <span class="Constant">20</span>]<span class="Delimiter">);</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p_filesz != p_memsz<span class="Delimiter">)</span>
+<span id="L84" class="LineNr"> 84 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Can't handle segments where p_filesz != p_memsz (see <a href="http://refspecs.linuxbase.org/elf/elf.pdf">http://refspecs.linuxbase.org/elf/elf.pdf</a>)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; die<span class="Delimiter">();</span>
+<span id="L85" class="LineNr"> 85 </span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p_offset + p_filesz &gt; size<span class="Delimiter">)</span>
+<span id="L87" class="LineNr"> 87 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;Invalid binary; segment at offset &quot;</span> &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; is too large: wants to <a href='003trace.cc.html#L213'>end</a> at &quot;</span> &lt;&lt; p_offset+p_filesz &lt;&lt; <span class="Constant">&quot; but the file ends at &quot;</span> &lt;&lt; size &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='020elf.cc.html#L130'>die</a><span class="Delimiter">();</span>
+<span id="L88" class="LineNr"> 88 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>size<span class="Delimiter">()</span> &lt; p_vaddr + p_memsz<span class="Delimiter">)</span>
+<span id="L89" class="LineNr"> 89 </span>    <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>resize<span class="Delimiter">(</span>p_vaddr + p_memsz<span class="Delimiter">);</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>size &gt; p_memsz<span class="Delimiter">)</span> size = p_memsz<span class="Delimiter">;</span>
+<span id="L91" class="LineNr"> 91 </span>  <a href='003trace.cc.html#L192'>dbg</a> &lt;&lt; <span class="Constant">&quot;blitting file offsets (&quot;</span> &lt;&lt; p_offset &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; <span class="Delimiter">(</span>p_offset+p_filesz<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;) to addresses (&quot;</span> &lt;&lt; p_vaddr &lt;&lt; <span class="Constant">&quot;, &quot;</span> &lt;&lt; <span class="Delimiter">(</span>p_vaddr+p_memsz<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">')'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; p_filesz<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span>
+<span id="L93" class="LineNr"> 93 </span>    <a href='010vm.cc.html#L130'>write_mem_u8</a><span class="Delimiter">(</span>p_vaddr+i<span class="Delimiter">,</span> elf_contents[p_offset+i]<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='010vm.cc.html#L95'>End_of_program</a> &lt; p_vaddr+p_memsz<span class="Delimiter">)</span>
+<span id="L95" class="LineNr"> 95 </span>    <a href='010vm.cc.html#L95'>End_of_program</a> = p_vaddr+p_memsz<span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span>
+<span id="L98" class="LineNr"> 98 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Comment">// Very primitive/fixed/insecure ELF segments for now.</span>
+<span id="L100" class="LineNr">100 </span><span class="Comment">//   code: 0x08048000 -&gt; 0x08048fff</span>
+<span id="L101" class="LineNr">101 </span><span class="Comment">//   data: 0x08049000 -&gt; 0x08049fff</span>
+<span id="L102" class="LineNr">102 </span><span class="Comment">//   heap: 0x0804a000 -&gt; 0x0804afff</span>
+<span id="L103" class="LineNr">103 </span><span class="Comment">//   stack: 0x0804bfff -&gt; 0x0804b000 (downward)</span>
+<span id="L104" class="LineNr">104 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='020elf.cc.html#L104'>CODE_START</a> = <span class="Constant">0x08048000</span><span class="Delimiter">;</span>
+<span id="L105" class="LineNr">105 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='020elf.cc.html#L105'>SEGMENT_SIZE</a> = <span class="Constant">0x1000</span><span class="Delimiter">;</span>
+<span id="L106" class="LineNr">106 </span><span class="Normal">const</span> <span class="Normal">int</span> <a href='020elf.cc.html#L106'>AFTER_STACK</a> = <span class="Constant">0x0804c000</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span><span class="Delimiter">:(code)</span>
+<span id="L108" class="LineNr">108 </span><span class="Normal">void</span> <a href='020elf.cc.html#L108'>initialize_mem</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>  <a href='010vm.cc.html#L93'>Mem</a><span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='020elf.cc.html#L106'>AFTER_STACK</a> - <a href='020elf.cc.html#L104'>CODE_START</a><span class="Delimiter">);</span>
+<span id="L110" class="LineNr">110 </span><span class="Delimiter">}</span>
+<span id="L111" class="LineNr">111 </span>
+<span id="L112" class="LineNr">112 </span><span class="Normal">inline</span> <span class="Normal">uint32_t</span> <a href='020elf.cc.html#L112'>u32_in</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Identifier">return</span> p[<span class="Constant">0</span>] | p[<span class="Constant">1</span>] &lt;&lt; <span class="Constant">8</span> | p[<span class="Constant">2</span>] &lt;&lt; <span class="Constant">16</span> | p[<span class="Constant">3</span>] &lt;&lt; <span class="Constant">24</span><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="Normal">inline</span> <span class="Normal">uint16_t</span> <a href='020elf.cc.html#L116'>u16_in</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span>* p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L117" class="LineNr">117 </span>  <span class="Identifier">return</span> p[<span class="Constant">0</span>] | p[<span class="Constant">1</span>] &lt;&lt; <span class="Constant">8</span><span class="Delimiter">;</span>
+<span id="L118" class="LineNr">118 </span><span class="Delimiter">}</span>
+<span id="L119" class="LineNr">119 </span>
+<span id="L120" class="LineNr">120 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L121" class="LineNr">121 </span><span class="Normal">struct</span> <a href='020elf.cc.html#L121'>perr</a> <span class="Delimiter">{};</span>
+<span id="L122" class="LineNr">122 </span><span class="Delimiter">:(code)</span>
+<span id="L123" class="LineNr">123 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; os<span class="Delimiter">,</span> <a href='020elf.cc.html#L121'>perr</a> <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L124" class="LineNr">124 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>errno<span class="Delimiter">)</span>
+<span id="L125" class="LineNr">125 </span>    os &lt;&lt; <span class="Constant">&quot;: &quot;</span> &lt;&lt; strerror<span class="Delimiter">(</span>errno<span class="Delimiter">);</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Identifier">return</span> os<span class="Delimiter">;</span>
+<span id="L127" class="LineNr">127 </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 Types&quot;)</span>
+<span id="L130" class="LineNr">130 </span><span class="Normal">struct</span> <a href='020elf.cc.html#L130'>die</a> <span class="Delimiter">{};</span>
+<span id="L131" class="LineNr">131 </span><span class="Delimiter">:(code)</span>
+<span id="L132" class="LineNr">132 </span>ostream&amp; <span class="Normal">operator</span>&lt;&lt;<span class="Delimiter">(</span>ostream&amp; <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">,</span> <a href='020elf.cc.html#L130'>die</a> <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L133" class="LineNr">133 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">)</span> <a href='003trace.cc.html#L182'>Trace_stream</a><span class="Delimiter">-&gt;</span><a href='003trace.cc.html#L155'>newline</a><span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>  exit<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L135" class="LineNr">135 </span><span class="Delimiter">}</span>
+<span id="L136" class="LineNr">136 </span>
+<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L138" class="LineNr">138 </span><span class="Comment">#include &lt;sys/types.h&gt;</span>
+<span id="L139" class="LineNr">139 </span><span class="Comment">#include &lt;sys/stat.h&gt;</span>
+<span id="L140" class="LineNr">140 </span><span class="Comment">#include &lt;fcntl.h&gt;</span>
+<span id="L141" class="LineNr">141 </span><span class="Comment">#include &lt;stdarg.h&gt;</span>
+<span id="L142" class="LineNr">142 </span><span class="Comment">#include &lt;errno.h&gt;</span>
 </pre>
 </body>
 </html>
diff --git a/html/subx/021translate.cc.html b/html/subx/021translate.cc.html
new file mode 100644
index 00000000..294eca80
--- /dev/null
+++ b/html/subx/021translate.cc.html
@@ -0,0 +1,226 @@
+<!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 - subx/021translate.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: The bedrock level 1 of abstraction is now done, and we're going to start</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: building levels above it that make programming in x86 machine code a</span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//: little more ergonomic.</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//:</span>
+<span id="L5" class="LineNr">  5 </span><span class="Comment">//: Higher levels will be in later layers. Since we can stop at any layer, we</span>
+<span id="L6" class="LineNr">  6 </span><span class="Comment">//: can execute levels from bedrock up to any level.</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment">//:</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">//: All levels will be &quot;pass through by default&quot;. Whatever they don't</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment">//: understand they will silently pass through to lower levels.</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment">//:</span>
+<span id="L11" class="LineNr"> 11 </span><span class="Comment">//: Since raw hex bytes of machine code are always possible to inject, SubX is</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment">//: not a language, and we aren't building a compiler. This is something</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Comment">//: deliberately leakier. Levels are more for improving auditing, checks and</span>
+<span id="L14" class="LineNr"> 14 </span><span class="Comment">//: error messages rather than for hiding low-level details.</span>
+<span id="L15" class="LineNr"> 15 </span>
+<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: Translator workflow: read 'source' file. Run a series of transforms on it,</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Comment">//: each passing through what it doesn't understand. The final program should</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: be just machine code, suitable to write to an ELF binary.</span>
+<span id="L19" class="LineNr"> 19 </span><span class="Comment">//:</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: Higher levels usually transform code on the basis of metadata.</span>
+<span id="L21" class="LineNr"> 21 </span>
+<span id="L22" class="LineNr"> 22 </span><span class="Delimiter">:(before &quot;End Main&quot;)</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L89'>is_equal</a><span class="Delimiter">(</span>argv[<span class="Constant">1</span>]<span class="Delimiter">,</span> <span class="Constant">&quot;translate&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L24" class="LineNr"> 24 </span>  <a href='003trace.cc.html#L236'>START_TRACING_UNTIL_END_OF_SCOPE</a><span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span>  assert<span class="Delimiter">(</span>argc &gt; <span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <a href='011run.cc.html#L94'>program</a> p<span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span>  ifstream fin<span class="Delimiter">(</span>argv[<span class="Constant">2</span>]<span class="Delimiter">);</span>
+<span id="L28" class="LineNr"> 28 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!fin<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L29" class="LineNr"> 29 </span>    cerr &lt;&lt; <span class="Constant">&quot;could not open &quot;</span> &lt;&lt; argv[<span class="Constant">2</span>] &lt;&lt; <span class="cSpecial">'\n'</span><span class="Delimiter">;</span>
+<span id="L30" class="LineNr"> 30 </span>    <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Delimiter">}</span>
+<span id="L32" class="LineNr"> 32 </span>  <a href='011run.cc.html#L122'>parse</a><span class="Delimiter">(</span>fin<span class="Delimiter">,</span> p<span class="Delimiter">);</span>
+<span id="L33" class="LineNr"> 33 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L34" class="LineNr"> 34 </span>  transform<span class="Delimiter">(</span>p<span class="Delimiter">);</span>
+<span id="L35" class="LineNr"> 35 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L36" class="LineNr"> 36 </span>  <a href='021translate.cc.html#L43'>save_elf</a><span class="Delimiter">(</span>p<span class="Delimiter">,</span> argv[<span class="Constant">3</span>]<span class="Delimiter">);</span>
+<span id="L37" class="LineNr"> 37 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> unlink<span class="Delimiter">(</span>argv[<span class="Constant">3</span>]<span class="Delimiter">);</span>
+<span id="L38" class="LineNr"> 38 </span>  <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L39" class="LineNr"> 39 </span><span class="Delimiter">}</span>
+<span id="L40" class="LineNr"> 40 </span>
+<span id="L41" class="LineNr"> 41 </span><span class="Delimiter">:(code)</span>
+<span id="L42" class="LineNr"> 42 </span><span class="Comment">// write out a program to a bare-bones ELF file</span>
+<span id="L43" class="LineNr"> 43 </span><span class="Normal">void</span> <a href='021translate.cc.html#L43'>save_elf</a><span class="Delimiter">(</span><span class="Normal">const</span> program&amp; p<span class="Delimiter">,</span> <span class="Normal">const</span> <span class="Normal">char</span>* filename<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L44" class="LineNr"> 44 </span>  ofstream out<span class="Delimiter">(</span>filename<span class="Delimiter">,</span> ios::binary<span class="Delimiter">);</span>
+<span id="L45" class="LineNr"> 45 </span>  <a href='021translate.cc.html#L51'>write_elf_header</a><span class="Delimiter">(</span>out<span class="Delimiter">,</span> p<span class="Delimiter">);</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>size<span class="Delimiter">();</span>  ++i<span class="Delimiter">)</span>
+<span id="L47" class="LineNr"> 47 </span>    <a href='021translate.cc.html#L144'>write_segment</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> out<span class="Delimiter">);</span>
+<span id="L48" class="LineNr"> 48 </span>  out<span class="Delimiter">.</span>close<span class="Delimiter">();</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">}</span>
+<span id="L50" class="LineNr"> 50 </span>
+<span id="L51" class="LineNr"> 51 </span><span class="Normal">void</span> <a href='021translate.cc.html#L51'>write_elf_header</a><span class="Delimiter">(</span>ostream&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">char</span> c = <span class="cSpecial">'\0'</span><span class="Delimiter">;</span>
+<span id="L53" class="LineNr"> 53 </span><span class="Comment">#define O(X)  c = (X); out.write(&amp;c, sizeof(c))</span>
+<span id="L54" class="LineNr"> 54 </span><span class="Comment">// host is required to be little-endian</span>
+<span id="L55" class="LineNr"> 55 </span><span class="Comment">#define emit(X)  out.write(reinterpret_cast&lt;const char*&gt;(&amp;X), sizeof(X))</span>
+<span id="L56" class="LineNr"> 56 </span>  <span class="SalientComment">//// ehdr</span>
+<span id="L57" class="LineNr"> 57 </span>  <span class="Comment">// e_ident</span>
+<span id="L58" class="LineNr"> 58 </span>  O<span class="Delimiter">(</span><span class="Constant">0x7f</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">E</span><span class="Comment">*/</span><span class="Constant">0x45</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">L</span><span class="Comment">*/</span><span class="Constant">0x4c</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">F</span><span class="Comment">*/</span><span class="Constant">0x46</span><span class="Delimiter">);</span>
+<span id="L59" class="LineNr"> 59 </span>    O<span class="Delimiter">(</span><span class="Constant">0x1</span><span class="Delimiter">);</span>  <span class="Comment">// 32-bit format</span>
+<span id="L60" class="LineNr"> 60 </span>    O<span class="Delimiter">(</span><span class="Constant">0x1</span><span class="Delimiter">);</span>  <span class="Comment">// little-endian</span>
+<span id="L61" class="LineNr"> 61 </span>    O<span class="Delimiter">(</span><span class="Constant">0x1</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x0</span><span class="Delimiter">);</span>
+<span id="L62" class="LineNr"> 62 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">size_t</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <span class="Constant">8</span><span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span> O<span class="Delimiter">(</span><span class="Constant">0x0</span><span class="Delimiter">);</span> <span class="Delimiter">}</span>
+<span id="L63" class="LineNr"> 63 </span>  <span class="Comment">// e_type</span>
+<span id="L64" class="LineNr"> 64 </span>  O<span class="Delimiter">(</span><span class="Constant">0x02</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Comment">// e_machine</span>
+<span id="L66" class="LineNr"> 66 </span>  O<span class="Delimiter">(</span><span class="Constant">0x03</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>  <span class="Comment">// e_version</span>
+<span id="L68" class="LineNr"> 68 </span>  O<span class="Delimiter">(</span><span class="Constant">0x01</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x00</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x00</span><span class="Delimiter">);</span> O<span class="Delimiter">(</span><span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Comment">// e_entry</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Normal">int</span> e_entry = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">;</span>  <span class="Comment">// convention</span>
+<span id="L71" class="LineNr"> 71 </span>  emit<span class="Delimiter">(</span>e_entry<span class="Delimiter">);</span>
+<span id="L72" class="LineNr"> 72 </span>  <span class="Comment">// e_phoff -- immediately after ELF header</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">int</span> e_phoff = <span class="Constant">0x34</span><span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span>  emit<span class="Delimiter">(</span>e_phoff<span class="Delimiter">);</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Comment">// e_shoff; unused</span>
+<span id="L76" class="LineNr"> 76 </span>  <span class="Normal">int</span> dummy32 = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L77" class="LineNr"> 77 </span>  emit<span class="Delimiter">(</span>dummy32<span class="Delimiter">);</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Comment">// e_flags; unused</span>
+<span id="L79" class="LineNr"> 79 </span>  emit<span class="Delimiter">(</span>dummy32<span class="Delimiter">);</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Comment">// e_ehsize</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Normal">uint16_t</span> e_ehsize = <span class="Constant">0x34</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>  emit<span class="Delimiter">(</span>e_ehsize<span class="Delimiter">);</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Comment">// e_phentsize</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">uint16_t</span> e_phentsize = <span class="Constant">0x20</span><span class="Delimiter">;</span>
+<span id="L85" class="LineNr"> 85 </span>  emit<span class="Delimiter">(</span>e_phentsize<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>  <span class="Comment">// e_phnum</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Normal">uint16_t</span> e_phnum = <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">);</span>
+<span id="L88" class="LineNr"> 88 </span>  emit<span class="Delimiter">(</span>e_phnum<span class="Delimiter">);</span>
+<span id="L89" class="LineNr"> 89 </span>  <span class="Comment">// e_shentsize</span>
+<span id="L90" class="LineNr"> 90 </span>  <span class="Normal">uint16_t</span> dummy16 = <span class="Constant">0x0</span><span class="Delimiter">;</span>
+<span id="L91" class="LineNr"> 91 </span>  emit<span class="Delimiter">(</span>dummy16<span class="Delimiter">);</span>
+<span id="L92" class="LineNr"> 92 </span>  <span class="Comment">// e_shnum</span>
+<span id="L93" class="LineNr"> 93 </span>  emit<span class="Delimiter">(</span>dummy16<span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>  <span class="Comment">// e_shstrndx</span>
+<span id="L95" class="LineNr"> 95 </span>  emit<span class="Delimiter">(</span>dummy16<span class="Delimiter">);</span>
+<span id="L96" class="LineNr"> 96 </span>
+<span id="L97" class="LineNr"> 97 </span>  <span class="Normal">uint32_t</span> p_offset = <span class="Comment">/*</span><span class="Comment">size of ehdr</span><span class="Comment">*/</span><span class="Constant">0x34</span> + <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">)</span>*<span class="Constant">0x20</span><span class="Comment">/*</span><span class="Comment">size of each phdr</span><span class="Comment">*/</span><span class="Delimiter">;</span>
+<span id="L98" class="LineNr"> 98 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>    <span class="SalientComment">//// phdr</span>
+<span id="L100" class="LineNr">100 </span>    <span class="Comment">// p_type</span>
+<span id="L101" class="LineNr">101 </span>    <span class="Normal">uint32_t</span> p_type = <span class="Constant">0x1</span><span class="Delimiter">;</span>
+<span id="L102" class="LineNr">102 </span>    emit<span class="Delimiter">(</span>p_type<span class="Delimiter">);</span>
+<span id="L103" class="LineNr">103 </span>    <span class="Comment">// p_offset</span>
+<span id="L104" class="LineNr">104 </span>    emit<span class="Delimiter">(</span>p_offset<span class="Delimiter">);</span>
+<span id="L105" class="LineNr">105 </span>    <span class="Comment">// p_vaddr</span>
+<span id="L106" class="LineNr">106 </span>    emit<span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">);</span>
+<span id="L107" class="LineNr">107 </span>    <span class="Comment">// p_paddr</span>
+<span id="L108" class="LineNr">108 </span>    emit<span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">);</span>
+<span id="L109" class="LineNr">109 </span>    <span class="Comment">// p_filesz</span>
+<span id="L110" class="LineNr">110 </span>    <span class="Normal">uint32_t</span> size = <a href='021translate.cc.html#L154'>size_of</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L111" class="LineNr">111 </span>    assert<span class="Delimiter">(</span>size &lt; <a href='020elf.cc.html#L105'>SEGMENT_SIZE</a><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>    emit<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
+<span id="L113" class="LineNr">113 </span>    <span class="Comment">// p_memsz</span>
+<span id="L114" class="LineNr">114 </span>    emit<span class="Delimiter">(</span>size<span class="Delimiter">);</span>
+<span id="L115" class="LineNr">115 </span>    <span class="Comment">// p_flags</span>
+<span id="L116" class="LineNr">116 </span>    <span class="Normal">uint32_t</span> p_flags = <span class="Delimiter">(</span>i == <span class="Constant">0</span><span class="Delimiter">)</span> ? <span class="Comment">/*</span><span class="Comment">r-x</span><span class="Comment">*/</span><span class="Constant">0x5</span> : <span class="Comment">/*</span><span class="Comment">rw-</span><span class="Comment">*/</span><span class="Constant">0x6</span><span class="Delimiter">;</span>  <span class="Comment">// convention: only first segment is code</span>
+<span id="L117" class="LineNr">117 </span>    emit<span class="Delimiter">(</span>p_flags<span class="Delimiter">);</span>
+<span id="L118" class="LineNr">118 </span>
+<span id="L119" class="LineNr">119 </span>    <span class="Comment">// p_align</span>
+<span id="L120" class="LineNr">120 </span>    <span class="Comment">// &quot;As the system creates or augments a process image, it logically copies</span>
+<span id="L121" class="LineNr">121 </span>    <span class="Comment">// a file's segment to a virtual memory segment.  When—and if— the system</span>
+<span id="L122" class="LineNr">122 </span>    <span class="Comment">// physically reads the file depends on the program's execution behavior,</span>
+<span id="L123" class="LineNr">123 </span>    <span class="Comment">// system load, and so on.  A process does not require a physical page</span>
+<span id="L124" class="LineNr">124 </span>    <span class="Comment">// unless it references the logical page during execution, and processes</span>
+<span id="L125" class="LineNr">125 </span>    <span class="Comment">// commonly leave many pages unreferenced. Therefore delaying physical</span>
+<span id="L126" class="LineNr">126 </span>    <span class="Comment">// reads frequently obviates them, improving system performance. To obtain</span>
+<span id="L127" class="LineNr">127 </span>    <span class="Comment">// this efficiency in practice, executable and shared object files must</span>
+<span id="L128" class="LineNr">128 </span>    <span class="Comment">// have segment images whose file offsets and virtual addresses are</span>
+<span id="L129" class="LineNr">129 </span>    <span class="Comment">// congruent, modulo the page size.&quot; -- <a href="http://refspecs.linuxbase.org/elf/elf.pdf">http://refspecs.linuxbase.org/elf/elf.pdf</a> (page 95)</span>
+<span id="L130" class="LineNr">130 </span>    <span class="Normal">uint32_t</span> p_align = <span class="Constant">0x1000</span><span class="Delimiter">;</span>  <span class="Comment">// default page size on linux</span>
+<span id="L131" class="LineNr">131 </span>    emit<span class="Delimiter">(</span>p_align<span class="Delimiter">);</span>
+<span id="L132" class="LineNr">132 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>p_offset % p_align != p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a> % p_align<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L133" class="LineNr">133 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;segment starting at 0x&quot;</span> &lt;&lt; <a href='010vm.cc.html#L228'>HEXWORD</a> &lt;&lt; p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a> &lt;&lt; <span class="Constant">&quot; is improperly aligned; alignment for p_offset &quot;</span> &lt;&lt; p_offset &lt;&lt; <span class="Constant">&quot; should be &quot;</span> &lt;&lt; <span class="Delimiter">(</span>p_offset % p_align<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot; but is &quot;</span> &lt;&lt; <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L103'>start</a> % p_align<span class="Delimiter">)</span> &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L134" class="LineNr">134 </span>      <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L135" class="LineNr">135 </span>    <span class="Delimiter">}</span>
+<span id="L136" class="LineNr">136 </span>
+<span id="L137" class="LineNr">137 </span>    <span class="Comment">// prepare for next segment</span>
+<span id="L138" class="LineNr">138 </span>    p_offset += size<span class="Delimiter">;</span>
+<span id="L139" class="LineNr">139 </span>  <span class="Delimiter">}</span>
+<span id="L140" class="LineNr">140 </span><span class="Comment">#undef O</span>
+<span id="L141" class="LineNr">141 </span><span class="Comment">#undef emit</span>
+<span id="L142" class="LineNr">142 </span><span class="Delimiter">}</span>
+<span id="L143" class="LineNr">143 </span>
+<span id="L144" class="LineNr">144 </span><span class="Normal">void</span> <a href='021translate.cc.html#L144'>write_segment</a><span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; s<span class="Delimiter">,</span> ostream&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L145" class="LineNr">145 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L146" class="LineNr">146 </span>    <span class="Normal">const</span> vector&lt;word&gt;&amp; w = s<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">;</span>
+<span id="L147" class="LineNr">147 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>w<span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L148" class="LineNr">148 </span>      <span class="Normal">uint8_t</span> x = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>  <span class="Comment">// we're done with metadata by this point</span>
+<span id="L149" class="LineNr">149 </span>      out<span class="Delimiter">.</span>write<span class="Delimiter">(</span><span class="Normal">reinterpret_cast</span>&lt;<span class="Normal">const</span> <span class="Normal">char</span>*&gt;<span class="Delimiter">(</span>&amp;x<span class="Delimiter">),</span> <span class="Comment">/*</span><span class="Comment">sizeof(byte)</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L150" class="LineNr">150 </span>    <span class="Delimiter">}</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Delimiter">}</span>
+<span id="L152" class="LineNr">152 </span><span class="Delimiter">}</span>
+<span id="L153" class="LineNr">153 </span>
+<span id="L154" class="LineNr">154 </span><span class="Normal">uint32_t</span> <a href='021translate.cc.html#L154'>size_of</a><span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L155" class="LineNr">155 </span>  <span class="Normal">uint32_t</span> sum = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L156" class="LineNr">156 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L157" class="LineNr">157 </span>    sum += <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>s<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>
+<span id="L158" class="LineNr">158 </span>  <span class="Identifier">return</span> sum<span class="Delimiter">;</span>
+<span id="L159" class="LineNr">159 </span><span class="Delimiter">}</span>
+<span id="L160" class="LineNr">160 </span>
+<span id="L161" class="LineNr">161 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L162" class="LineNr">162 </span><span class="Normal">using</span> std::ios<span class="Delimiter">;</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/022check_instruction.cc.html b/html/subx/022check_instruction.cc.html
new file mode 100644
index 00000000..75d6945a
--- /dev/null
+++ b/html/subx/022check_instruction.cc.html
@@ -0,0 +1,750 @@
+<!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 - subx/022check_instruction.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.CommentedCode { color: #6c6c6c; }
+.SalientComment { color: #00ffff; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Beginning of &quot;level 2&quot;: tagging bytes with metadata around what field of</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: an x86 instruction they're for.</span>
+<span id="L3" class="LineNr">  3 </span><span class="Comment">//:</span>
+<span id="L4" class="LineNr">  4 </span><span class="Comment">//: The x86 instruction set is variable-length, and how a byte is interpreted</span>
+<span id="L5" class="LineNr">  5 </span><span class="Comment">//: affects later instruction boundaries. A lot of the pain in programming machine code</span>
+<span id="L6" class="LineNr">  6 </span><span class="Comment">//: stems from computer and programmer going out of sync on what a byte</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment">//: means. The miscommunication is usually not immediately caught, and</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment">//: metastasizes at runtime into kilobytes of misinterpreted instructions.</span>
+<span id="L9" class="LineNr">  9 </span><span class="Comment">//: Tagging bytes with what the programmer expects them to be interpreted as</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Comment">//: helps the computer catch miscommunication immediately.</span>
+<span id="L11" class="LineNr"> 11 </span><span class="Comment">//:</span>
+<span id="L12" class="LineNr"> 12 </span><span class="Comment">//: This is one way SubX is going to be different from a 'language': we</span>
+<span id="L13" class="LineNr"> 13 </span><span class="Comment">//: typically think of languages as less verbose than machine code. Here we're</span>
+<span id="L14" class="LineNr"> 14 </span><span class="Comment">//: making machine code *more* verbose.</span>
+<span id="L15" class="LineNr"> 15 </span><span class="Comment">//:</span>
+<span id="L16" class="LineNr"> 16 </span><span class="Comment">//: ---</span>
+<span id="L17" class="LineNr"> 17 </span><span class="Comment">//:</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Comment">//: While we're here, we'll also improve a couple of other things:</span>
+<span id="L19" class="LineNr"> 19 </span><span class="Comment">//:</span>
+<span id="L20" class="LineNr"> 20 </span><span class="Comment">//: a) Machine code often packs logically separate operands into bitfields of</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Comment">//: a single byte. We'll start writing out each operand separately, and the</span>
+<span id="L22" class="LineNr"> 22 </span><span class="Comment">//: translator will construct the right bytes out of operands.</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Comment">//:</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Comment">//: SubX now gets still more verbose. What used to be a single byte, say 'c3',</span>
+<span id="L25" class="LineNr"> 25 </span><span class="Comment">//: can now expand to '3/mod 0/subop 3/rm32'.</span>
+<span id="L26" class="LineNr"> 26 </span><span class="Comment">//:</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Comment">//: b) Since each operand is tagged, we can loosen ordering restrictions and</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Comment">//: allow writing out the operands in any order, like keyword arguments.</span>
+<span id="L29" class="LineNr"> 29 </span><span class="Comment">//:</span>
+<span id="L30" class="LineNr"> 30 </span><span class="Comment">//: c) Operand values can be expressed in either decimal or hex (when prefixed</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment">//: with '0x'. Raw 2-character hex bytes without the '0x' are only valid when</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Comment">//: tagged without any operand metadata. (This may be a bad idea.)</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Comment">//:</span>
+<span id="L34" class="LineNr"> 34 </span><span class="Comment">//: Coda: the actual opcodes (1-3 bytes) will continue to be at the start of</span>
+<span id="L35" class="LineNr"> 35 </span><span class="Comment">//: each line, in hex, and untagged. The x86 instruction set is a mess, and</span>
+<span id="L36" class="LineNr"> 36 </span><span class="Comment">//: instructions don't admit good names.</span>
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Texts&quot;)</span>
+<span id="L39" class="LineNr"> 39 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;instructions&quot;</span><span class="Delimiter">,</span>
+<span id="L40" class="LineNr"> 40 </span>  <span class="Constant">&quot;Each x86 instruction consists of an instruction or opcode and some number</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L41" class="LineNr"> 41 </span>  <span class="Constant">&quot;of operands.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L42" class="LineNr"> 42 </span>  <span class="Constant">&quot;Each operand has a type. An instruction won't have more than one operand of</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L43" class="LineNr"> 43 </span>  <span class="Constant">&quot;any type.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L44" class="LineNr"> 44 </span>  <span class="Constant">&quot;Each instruction has some set of allowed operand types. It'll reject others.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L45" class="LineNr"> 45 </span>  <span class="Constant">&quot;The complete list of operand <a href='022check_instruction.cc.html#L481'>types</a>: mod, subop, r32 (register), rm32</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L46" class="LineNr"> 46 </span>  <span class="Constant">&quot;(register or memory), scale, index, base, disp8, disp16, disp32, imm8,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L47" class="LineNr"> 47 </span>  <span class="Constant">&quot;imm32.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L48" class="LineNr"> 48 </span>  <span class="Constant">&quot;Each of these has its own help page. Try reading 'subx help mod' next.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L49" class="LineNr"> 49 </span><span class="Delimiter">);</span>
+<span id="L50" class="LineNr"> 50 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Contents&quot;)</span>
+<span id="L51" class="LineNr"> 51 </span>cerr &lt;&lt; <span class="Constant">&quot;  instructions</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span><span class="Delimiter">;</span>
+<span id="L52" class="LineNr"> 52 </span>
+<span id="L53" class="LineNr"> 53 </span><span class="SalientComment">//:: Check for 'syntax errors'; missing or unexpected operands.</span>
+<span id="L54" class="LineNr"> 54 </span>
+<span id="L55" class="LineNr"> 55 </span><span class="Delimiter">:(scenario check_missing_imm8_operand)</span>
+<span id="L56" class="LineNr"> 56 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L57" class="LineNr"> 57 </span>== <span class="Constant">0x1</span>
+<span id="L58" class="LineNr"> 58 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L60" class="LineNr"> 60 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L61" class="LineNr"> 61 </span>  cd                                                                                                                                        <span class="Comment"># int ??</span>
+<span id="L62" class="LineNr"> 62 </span><span class="traceContains">+error: 'cd' (software interrupt): missing imm8 operand</span>
+<span id="L63" class="LineNr"> 63 </span>
+<span id="L64" class="LineNr"> 64 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L65" class="LineNr"> 65 </span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>check_operands<span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>
+<span id="L67" class="LineNr"> 67 </span><span class="Delimiter">:(code)</span>
+<span id="L68" class="LineNr"> 68 </span><span class="Normal">void</span> check_operands<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L69" class="LineNr"> 69 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- check operands&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L70" class="LineNr"> 70 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L71" class="LineNr"> 71 </span>  <span class="Normal">const</span> segment&amp; code = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L72" class="LineNr"> 72 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L73" class="LineNr"> 73 </span>    check_operands<span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L74" class="LineNr"> 74 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// stop at the first mal-formed instruction</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Delimiter">}</span>
+<span id="L76" class="LineNr"> 76 </span><span class="Delimiter">}</span>
+<span id="L77" class="LineNr"> 77 </span>
+<span id="L78" class="LineNr"> 78 </span><span class="Normal">void</span> check_operands<span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L79" class="LineNr"> 79 </span>  <a href='011run.cc.html#L113'>word</a> op = <a href='022check_instruction.cc.html#L91'>preprocess_op</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L81" class="LineNr"> 81 </span>    <a href='022check_instruction.cc.html#L562'>check_operands_0f</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L82" class="LineNr"> 82 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L83" class="LineNr"> 83 </span>  <span class="Delimiter">}</span>
+<span id="L84" class="LineNr"> 84 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;f3&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr"> 85 </span>    <a href='022check_instruction.cc.html#L535'>check_operands_f3</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L87" class="LineNr"> 87 </span>  <span class="Delimiter">}</span>
+<span id="L88" class="LineNr"> 88 </span>  check_operands<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L89" class="LineNr"> 89 </span><span class="Delimiter">}</span>
+<span id="L90" class="LineNr"> 90 </span>
+<span id="L91" class="LineNr"> 91 </span><a href='011run.cc.html#L113'>word</a> <a href='022check_instruction.cc.html#L91'>preprocess_op</a><span class="Delimiter">(</span><a href='011run.cc.html#L113'>word</a><span class="Comment">/*</span><span class="Comment">copy</span><span class="Comment">*/</span> op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L92" class="LineNr"> 92 </span>  op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> = <a href='022check_instruction.cc.html#L596'>tolower</a><span class="Delimiter">(</span>op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>c_str<span class="Delimiter">());</span>
+<span id="L93" class="LineNr"> 93 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L93'>starts_with</a><span class="Delimiter">(</span>op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">,</span> <span class="Constant">&quot;0x&quot;</span><span class="Delimiter">))</span>
+<span id="L94" class="LineNr"> 94 </span>    op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> = op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L95" class="LineNr"> 95 </span>  <span class="Identifier">return</span> op<span class="Delimiter">;</span>
+<span id="L96" class="LineNr"> 96 </span><span class="Delimiter">}</span>
+<span id="L97" class="LineNr"> 97 </span>
+<span id="L98" class="LineNr"> 98 </span><span class="Comment">//: To check the operands for an opcode, we'll track the permitted operands</span>
+<span id="L99" class="LineNr"> 99 </span><span class="Comment">//: for each supported opcode in a bitvector. That way we can often compute the</span>
+<span id="L100" class="LineNr">100 </span><span class="Comment">//: bitvector for each instruction's operands and compare it with the expected.</span>
+<span id="L101" class="LineNr">101 </span>
+<span id="L102" class="LineNr">102 </span><span class="Delimiter">:(before &quot;End Types&quot;)</span>
+<span id="L103" class="LineNr">103 </span><span class="Normal">enum</span> <a href='022check_instruction.cc.html#L103'>operand_type</a> <span class="Delimiter">{</span>
+<span id="L104" class="LineNr">104 </span>  <span class="Comment">// start from the least significant bit</span>
+<span id="L105" class="LineNr">105 </span>  <a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">,</span>  <span class="Comment">// more complex, may also involve disp8 or disp32</span>
+<span id="L106" class="LineNr">106 </span>  <a href='022check_instruction.cc.html#L106'>SUBOP</a><span class="Delimiter">,</span>
+<span id="L107" class="LineNr">107 </span>  <a href='022check_instruction.cc.html#L107'>DISP8</a><span class="Delimiter">,</span>
+<span id="L108" class="LineNr">108 </span>  <a href='022check_instruction.cc.html#L108'>DISP16</a><span class="Delimiter">,</span>
+<span id="L109" class="LineNr">109 </span>  <a href='022check_instruction.cc.html#L109'>DISP32</a><span class="Delimiter">,</span>
+<span id="L110" class="LineNr">110 </span>  <a href='022check_instruction.cc.html#L110'>IMM8</a><span class="Delimiter">,</span>
+<span id="L111" class="LineNr">111 </span>  <a href='022check_instruction.cc.html#L111'>IMM32</a><span class="Delimiter">,</span>
+<span id="L112" class="LineNr">112 </span>  <a href='022check_instruction.cc.html#L112'>NUM_OPERAND_TYPES</a>
+<span id="L113" class="LineNr">113 </span><span class="Delimiter">};</span>
+<span id="L114" class="LineNr">114 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L115" class="LineNr">115 </span>vector&lt;string&gt; <a href='022check_instruction.cc.html#L115'>Operand_type_name</a><span class="Delimiter">;</span>
+<span id="L116" class="LineNr">116 </span>map&lt;string<span class="Delimiter">,</span> operand_type&gt; <a href='022check_instruction.cc.html#L116'>Operand_type</a><span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L118" class="LineNr">118 </span><a href='022check_instruction.cc.html#L120'>init_op_types</a><span class="Delimiter">();</span>
+<span id="L119" class="LineNr">119 </span><span class="Delimiter">:(code)</span>
+<span id="L120" class="LineNr">120 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L120'>init_op_types</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L121" class="LineNr">121 </span>  assert<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L112'>NUM_OPERAND_TYPES</a> &lt;= <span class="Comment">/*</span><span class="Comment">bits in a uint8_t</span><span class="Comment">*/</span><span class="Constant">8</span><span class="Delimiter">);</span>
+<span id="L122" class="LineNr">122 </span>  <a href='022check_instruction.cc.html#L115'>Operand_type_name</a><span class="Delimiter">.</span>resize<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L112'>NUM_OPERAND_TYPES</a><span class="Delimiter">);</span>
+<span id="L123" class="LineNr">123 </span><span class="PreProc">  </span><span class="Comment">#define DEF(type) Operand_type_name.at(type) = tolower(#type), put(Operand_type, tolower(#type), type);</span>
+<span id="L124" class="LineNr">124 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">);</span>
+<span id="L125" class="LineNr">125 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L106'>SUBOP</a><span class="Delimiter">);</span>
+<span id="L126" class="LineNr">126 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L107'>DISP8</a><span class="Delimiter">);</span>
+<span id="L127" class="LineNr">127 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L108'>DISP16</a><span class="Delimiter">);</span>
+<span id="L128" class="LineNr">128 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L109'>DISP32</a><span class="Delimiter">);</span>
+<span id="L129" class="LineNr">129 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L110'>IMM8</a><span class="Delimiter">);</span>
+<span id="L130" class="LineNr">130 </span>  DEF<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L111'>IMM32</a><span class="Delimiter">);</span>
+<span id="L131" class="LineNr">131 </span><span class="PreProc">  </span><span class="Comment">#undef DEF</span>
+<span id="L132" class="LineNr">132 </span><span class="Delimiter">}</span>
+<span id="L133" class="LineNr">133 </span>
+<span id="L134" class="LineNr">134 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L135" class="LineNr">135 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">bitvector</span><span class="Comment">*/</span><span class="Normal">uint8_t</span>&gt; <a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">;</span>
+<span id="L136" class="LineNr">136 </span><span class="Normal">const</span> <span class="Normal">uint8_t</span> <a href='022check_instruction.cc.html#L136'>INVALID_OPERANDS</a> = <span class="Constant">0xff</span><span class="Delimiter">;</span>  <span class="Comment">// no instruction uses all the operand types</span>
+<span id="L137" class="LineNr">137 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L138" class="LineNr">138 </span><a href='022check_instruction.cc.html#L140'>init_permitted_operands</a><span class="Delimiter">();</span>
+<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(code)</span>
+<span id="L140" class="LineNr">140 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L140'>init_permitted_operands</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L141" class="LineNr">141 </span>  <span class="SalientComment">//// Class A: just op, no operands</span>
+<span id="L142" class="LineNr">142 </span>  <span class="Comment">// halt</span>
+<span id="L143" class="LineNr">143 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;f4&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L144" class="LineNr">144 </span>  <span class="Comment">// push</span>
+<span id="L145" class="LineNr">145 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;50&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L146" class="LineNr">146 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;51&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L147" class="LineNr">147 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;52&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L148" class="LineNr">148 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;53&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L149" class="LineNr">149 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;54&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L150" class="LineNr">150 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;55&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L151" class="LineNr">151 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;56&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L152" class="LineNr">152 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;57&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>  <span class="Comment">// pop</span>
+<span id="L154" class="LineNr">154 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;58&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L155" class="LineNr">155 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;59&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L156" class="LineNr">156 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5a&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L157" class="LineNr">157 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5b&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L158" class="LineNr">158 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5c&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L159" class="LineNr">159 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L160" class="LineNr">160 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5e&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L161" class="LineNr">161 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;5f&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L162" class="LineNr">162 </span>  <span class="Comment">// return</span>
+<span id="L163" class="LineNr">163 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;c3&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x00</span><span class="Delimiter">);</span>
+<span id="L164" class="LineNr">164 </span>
+<span id="L165" class="LineNr">165 </span>  <span class="SalientComment">//// Class B: just op and disp8</span>
+<span id="L166" class="LineNr">166 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L167" class="LineNr">167 </span>  <span class="Comment">//  0     0     0      |0       1     0     0</span>
+<span id="L168" class="LineNr">168 </span>
+<span id="L169" class="LineNr">169 </span>  <span class="Comment">// jump</span>
+<span id="L170" class="LineNr">170 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;eb&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L171" class="LineNr">171 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;74&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L172" class="LineNr">172 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;75&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L173" class="LineNr">173 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;7c&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L174" class="LineNr">174 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;7d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L175" class="LineNr">175 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;7e&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L176" class="LineNr">176 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;7f&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x04</span><span class="Delimiter">);</span>
+<span id="L177" class="LineNr">177 </span>
+<span id="L178" class="LineNr">178 </span>  <span class="SalientComment">//// Class C: just op and disp16</span>
+<span id="L179" class="LineNr">179 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Comment">//  0     0     0      |1       0     0     0</span>
+<span id="L181" class="LineNr">181 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;e8&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>  <span class="Comment">// jump</span>
+<span id="L182" class="LineNr">182 </span>
+<span id="L183" class="LineNr">183 </span>  <span class="SalientComment">//// Class D: just op and disp32</span>
+<span id="L184" class="LineNr">184 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L185" class="LineNr">185 </span>  <span class="Comment">//  0     0     1      |0       0     0     0</span>
+<span id="L186" class="LineNr">186 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;e9&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x10</span><span class="Delimiter">);</span>  <span class="Comment">// call</span>
+<span id="L187" class="LineNr">187 </span>
+<span id="L188" class="LineNr">188 </span>  <span class="SalientComment">//// Class E: just op and imm8</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L190" class="LineNr">190 </span>  <span class="Comment">//  0     1     0      |0       0     0     0</span>
+<span id="L191" class="LineNr">191 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;cd&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x20</span><span class="Delimiter">);</span>  <span class="Comment">// software interrupt</span>
+<span id="L192" class="LineNr">192 </span>
+<span id="L193" class="LineNr">193 </span>  <span class="SalientComment">//// Class F: just op and imm32</span>
+<span id="L194" class="LineNr">194 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L195" class="LineNr">195 </span>  <span class="Comment">//  1     0     0      |0       0     0     0</span>
+<span id="L196" class="LineNr">196 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;05&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// add</span>
+<span id="L197" class="LineNr">197 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;2d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// subtract</span>
+<span id="L198" class="LineNr">198 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;25&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// and</span>
+<span id="L199" class="LineNr">199 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;0d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// or</span>
+<span id="L200" class="LineNr">200 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;35&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// xor</span>
+<span id="L201" class="LineNr">201 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;3d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// compare</span>
+<span id="L202" class="LineNr">202 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;68&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>  <span class="Comment">// push</span>
+<span id="L203" class="LineNr">203 </span>  <span class="Comment">// copy</span>
+<span id="L204" class="LineNr">204 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;b8&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L205" class="LineNr">205 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;b9&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L206" class="LineNr">206 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;ba&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L207" class="LineNr">207 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;bb&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L208" class="LineNr">208 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;bc&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L209" class="LineNr">209 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;bd&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L210" class="LineNr">210 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;be&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L211" class="LineNr">211 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;bf&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x40</span><span class="Delimiter">);</span>
+<span id="L212" class="LineNr">212 </span>
+<span id="L213" class="LineNr">213 </span>  <span class="SalientComment">//// Class M: using ModR/M byte</span>
+<span id="L214" class="LineNr">214 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L215" class="LineNr">215 </span>  <span class="Comment">//  0     0     0      |0       0     0     1</span>
+<span id="L216" class="LineNr">216 </span>
+<span id="L217" class="LineNr">217 </span>  <span class="Comment">// add</span>
+<span id="L218" class="LineNr">218 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;01&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L219" class="LineNr">219 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;03&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L220" class="LineNr">220 </span>  <span class="Comment">// subtract</span>
+<span id="L221" class="LineNr">221 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;29&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L222" class="LineNr">222 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;2b&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L223" class="LineNr">223 </span>  <span class="Comment">// and</span>
+<span id="L224" class="LineNr">224 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;21&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L225" class="LineNr">225 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;23&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L226" class="LineNr">226 </span>  <span class="Comment">// or</span>
+<span id="L227" class="LineNr">227 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;09&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L228" class="LineNr">228 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;0b&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L229" class="LineNr">229 </span>  <span class="Comment">// complement</span>
+<span id="L230" class="LineNr">230 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;f7&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L231" class="LineNr">231 </span>  <span class="Comment">// xor</span>
+<span id="L232" class="LineNr">232 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;31&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L233" class="LineNr">233 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;33&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L234" class="LineNr">234 </span>  <span class="Comment">// compare</span>
+<span id="L235" class="LineNr">235 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;39&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L236" class="LineNr">236 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;3b&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L237" class="LineNr">237 </span>  <span class="Comment">// copy</span>
+<span id="L238" class="LineNr">238 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;89&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L239" class="LineNr">239 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;8b&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L240" class="LineNr">240 </span>  <span class="Comment">// swap</span>
+<span id="L241" class="LineNr">241 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;87&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L242" class="LineNr">242 </span>  <span class="Comment">// pop</span>
+<span id="L243" class="LineNr">243 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;8f&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x01</span><span class="Delimiter">);</span>
+<span id="L244" class="LineNr">244 </span>
+<span id="L245" class="LineNr">245 </span>  <span class="SalientComment">//// Class O: op, ModR/M and subop (not r32)</span>
+<span id="L246" class="LineNr">246 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L247" class="LineNr">247 </span>  <span class="Comment">//  0     0     0      |0       0     1     1</span>
+<span id="L248" class="LineNr">248 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;ff&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x03</span><span class="Delimiter">);</span>  <span class="Comment">// jump/push/call</span>
+<span id="L249" class="LineNr">249 </span>
+<span id="L250" class="LineNr">250 </span>  <span class="SalientComment">//// Class N: op, ModR/M and imm32</span>
+<span id="L251" class="LineNr">251 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L252" class="LineNr">252 </span>  <span class="Comment">//  1     0     0      |0       0     0     1</span>
+<span id="L253" class="LineNr">253 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;c7&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x41</span><span class="Delimiter">);</span>  <span class="Comment">// copy</span>
+<span id="L254" class="LineNr">254 </span>
+<span id="L255" class="LineNr">255 </span>  <span class="SalientComment">//// Class P: op, ModR/M, subop (not r32) and imm32</span>
+<span id="L256" class="LineNr">256 </span>  <span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L257" class="LineNr">257 </span>  <span class="Comment">//  1     0     0      |0       0     1     1</span>
+<span id="L258" class="LineNr">258 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> <span class="Constant">&quot;81&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x43</span><span class="Delimiter">);</span>  <span class="Comment">// combine</span>
+<span id="L259" class="LineNr">259 </span>
+<span id="L260" class="LineNr">260 </span>  <span class="Comment">// End Init Permitted Operands</span>
+<span id="L261" class="LineNr">261 </span><span class="Delimiter">}</span>
+<span id="L262" class="LineNr">262 </span>
+<span id="L263" class="LineNr">263 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L264" class="LineNr">264 </span><span class="Comment">#define HAS(bitvector, bit)  ((bitvector) &amp; (1 &lt;&lt; (bit)))</span>
+<span id="L265" class="LineNr">265 </span><span class="Comment">#define SET(bitvector, bit)  ((bitvector) | (1 &lt;&lt; (bit)))</span>
+<span id="L266" class="LineNr">266 </span><span class="Comment">#define CLEAR(bitvector, bit)  ((bitvector) &amp; (~(1 &lt;&lt; (bit))))</span>
+<span id="L267" class="LineNr">267 </span>
+<span id="L268" class="LineNr">268 </span><span class="Delimiter">:(code)</span>
+<span id="L269" class="LineNr">269 </span><span class="Normal">void</span> check_operands<span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L270" class="LineNr">270 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L271" class="LineNr">271 </span>  <span class="Normal">uint8_t</span> expected_bitvector = get<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L135'>Permitted_operands</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L272" class="LineNr">272 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L264'>HAS</a><span class="Delimiter">(</span>expected_bitvector<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">))</span>
+<span id="L273" class="LineNr">273 </span>    <a href='022check_instruction.cc.html#L401'>check_operands_modrm</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L274" class="LineNr">274 </span>  <a href='022check_instruction.cc.html#L279'>compare_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L266'>CLEAR</a><span class="Delimiter">(</span>expected_bitvector<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">),</span> op<span class="Delimiter">);</span>
+<span id="L275" class="LineNr">275 </span><span class="Delimiter">}</span>
+<span id="L276" class="LineNr">276 </span>
+<span id="L277" class="LineNr">277 </span><span class="Comment">//: Many instructions can be checked just by comparing bitvectors.</span>
+<span id="L278" class="LineNr">278 </span>
+<span id="L279" class="LineNr">279 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L279'>compare_bitvector</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L280" class="LineNr">280 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L337'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &amp;&amp; <a href='022check_instruction.cc.html#L322'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
+<span id="L281" class="LineNr">281 </span>  <span class="Normal">uint8_t</span> bitvector = <a href='022check_instruction.cc.html#L313'>compute_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L282" class="LineNr">282 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L283" class="LineNr">283 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this instruction</span>
+<span id="L284" class="LineNr">284 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='022check_instruction.cc.html#L112'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> bitvector &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">,</span> expected &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L285" class="LineNr">285 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;comparing &quot; &lt;&lt; HEXBYTE &lt;&lt; NUM(bitvector) &lt;&lt; &quot; with &quot; &lt;&lt; NUM(expected) &lt;&lt; '\n';</span>
+<span id="L286" class="LineNr">286 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this operand</span>
+<span id="L287" class="LineNr">287 </span>    <span class="Normal">const</span> string&amp; optype = <a href='022check_instruction.cc.html#L115'>Operand_type_name</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L288" class="LineNr">288 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> &gt; <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span>
+<span id="L289" class="LineNr">289 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='022check_instruction.cc.html#L297'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L290" class="LineNr">290 </span>    <span class="Normal">else</span>
+<span id="L291" class="LineNr">291 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='022check_instruction.cc.html#L297'>maybe_name</a><span class="Delimiter">(</span>op<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;: missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L292" class="LineNr">292 </span>    <span class="Comment">// continue giving all errors for a single instruction</span>
+<span id="L293" class="LineNr">293 </span>  <span class="Delimiter">}</span>
+<span id="L294" class="LineNr">294 </span>  <span class="Comment">// ignore settings in any unused bits</span>
+<span id="L295" class="LineNr">295 </span><span class="Delimiter">}</span>
+<span id="L296" class="LineNr">296 </span>
+<span id="L297" class="LineNr">297 </span>string <a href='022check_instruction.cc.html#L297'>maybe_name</a><span class="Delimiter">(</span><span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L298" class="LineNr">298 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>op<span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L299" class="LineNr">299 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> <span class="Identifier">return</span> <span class="Constant">&quot;&quot;</span><span class="Delimiter">;</span>
+<span id="L300" class="LineNr">300 </span>  <span class="Identifier">return</span> <span class="Constant">&quot; (&quot;</span>+get<span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span>+<span class="Constant">')'</span><span class="Delimiter">;</span>
+<span id="L301" class="LineNr">301 </span><span class="Delimiter">}</span>
+<span id="L302" class="LineNr">302 </span>
+<span id="L303" class="LineNr">303 </span><span class="Normal">bool</span> <a href='022check_instruction.cc.html#L303'>is_hex_byte</a><span class="Delimiter">(</span><span class="Normal">const</span> word&amp; curr<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L304" class="LineNr">304 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L344'>contains_any_operand_metadata</a><span class="Delimiter">(</span>curr<span class="Delimiter">))</span>
+<span id="L305" class="LineNr">305 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L306" class="LineNr">306 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span> != <span class="Constant">2</span><span class="Delimiter">)</span>
+<span id="L307" class="LineNr">307 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L308" class="LineNr">308 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789abcdefABCDEF&quot;</span><span class="Delimiter">)</span> != string::npos<span class="Delimiter">)</span>
+<span id="L309" class="LineNr">309 </span>    <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L310" class="LineNr">310 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L311" class="LineNr">311 </span><span class="Delimiter">}</span>
+<span id="L312" class="LineNr">312 </span>
+<span id="L313" class="LineNr">313 </span><span class="Normal">uint32_t</span> <a href='022check_instruction.cc.html#L313'>compute_operand_bitvector</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L314" class="LineNr">314 </span>  <span class="Normal">uint32_t</span> bitvector = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L315" class="LineNr">315 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip op</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L316" class="LineNr">316 </span>    bitvector = bitvector | <a href='022check_instruction.cc.html#L353'>bitvector_for_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">));</span>
+<span id="L317" class="LineNr">317 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span> <a href='022check_instruction.cc.html#L136'>INVALID_OPERANDS</a><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L318" class="LineNr">318 </span>  <span class="Delimiter">}</span>
+<span id="L319" class="LineNr">319 </span>  <span class="Identifier">return</span> bitvector<span class="Delimiter">;</span>
+<span id="L320" class="LineNr">320 </span><span class="Delimiter">}</span>
+<span id="L321" class="LineNr">321 </span>
+<span id="L322" class="LineNr">322 </span><span class="Normal">bool</span> <a href='022check_instruction.cc.html#L322'>has_operands</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L323" class="LineNr">323 </span>  <span class="Identifier">return</span> <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">)</span> &gt; <a href='022check_instruction.cc.html#L326'>first_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L324" class="LineNr">324 </span><span class="Delimiter">}</span>
+<span id="L325" class="LineNr">325 </span>
+<span id="L326" class="LineNr">326 </span><span class="Normal">int</span> <a href='022check_instruction.cc.html#L326'>first_operand</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L327" class="LineNr">327 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span> <span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L328" class="LineNr">328 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;f3&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L329" class="LineNr">329 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">)</span>
+<span id="L330" class="LineNr">330 </span>      <span class="Identifier">return</span> <span class="Constant">3</span><span class="Delimiter">;</span>
+<span id="L331" class="LineNr">331 </span>    <span class="Normal">else</span>
+<span id="L332" class="LineNr">332 </span>      <span class="Identifier">return</span> <span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L333" class="LineNr">333 </span>  <span class="Delimiter">}</span>
+<span id="L334" class="LineNr">334 </span>  <span class="Identifier">return</span> <span class="Constant">1</span><span class="Delimiter">;</span>
+<span id="L335" class="LineNr">335 </span><span class="Delimiter">}</span>
+<span id="L336" class="LineNr">336 </span>
+<span id="L337" class="LineNr">337 </span><span class="Normal">bool</span> <a href='022check_instruction.cc.html#L337'>all_hex_bytes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L338" class="LineNr">338 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L339" class="LineNr">339 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_byte<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">)))</span>
+<span id="L340" class="LineNr">340 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L341" class="LineNr">341 </span>  <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L342" class="LineNr">342 </span><span class="Delimiter">}</span>
+<span id="L343" class="LineNr">343 </span>
+<span id="L344" class="LineNr">344 </span><span class="Normal">bool</span> <a href='022check_instruction.cc.html#L344'>contains_any_operand_metadata</a><span class="Delimiter">(</span><span class="Normal">const</span> word&amp; <a href='011run.cc.html#L113'>word</a><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L345" class="LineNr">345 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span><a href='011run.cc.html#L113'>word</a><span class="Delimiter">.</span>metadata<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L346" class="LineNr">346 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>find<span class="Delimiter">(</span><a href='011run.cc.html#L113'>word</a><span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">))</span> != <a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">())</span>
+<span id="L347" class="LineNr">347 </span>      <span class="Identifier">return</span><span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L348" class="LineNr">348 </span>  <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L349" class="LineNr">349 </span><span class="Delimiter">}</span>
+<span id="L350" class="LineNr">350 </span>
+<span id="L351" class="LineNr">351 </span><span class="Comment">// Scan the metadata of 'w' and return the bit corresponding to any operand type.</span>
+<span id="L352" class="LineNr">352 </span><span class="Comment">// Also raise an error if metadata contains multiple operand types.</span>
+<span id="L353" class="LineNr">353 </span><span class="Normal">uint32_t</span> <a href='022check_instruction.cc.html#L353'>bitvector_for_operand</a><span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L354" class="LineNr">354 </span>  <span class="Normal">uint32_t</span> bv = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L355" class="LineNr">355 </span>  <span class="Normal">bool</span> found =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L356" class="LineNr">356 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span>metadata<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L357" class="LineNr">357 </span>    <span class="Normal">const</span> string&amp; curr = w<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L358" class="LineNr">358 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L116'>Operand_type</a><span class="Delimiter">,</span> curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// ignore unrecognized metadata</span>
+<span id="L359" class="LineNr">359 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>found<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L360" class="LineNr">360 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' has conflicting operand types; it should have only one</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L361" class="LineNr">361 </span>      <span class="Identifier">return</span> <a href='022check_instruction.cc.html#L136'>INVALID_OPERANDS</a><span class="Delimiter">;</span>
+<span id="L362" class="LineNr">362 </span>    <span class="Delimiter">}</span>
+<span id="L363" class="LineNr">363 </span>    bv = <span class="Delimiter">(</span><span class="Constant">1</span> &lt;&lt; get<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L116'>Operand_type</a><span class="Delimiter">,</span> curr<span class="Delimiter">));</span>
+<span id="L364" class="LineNr">364 </span>    found =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L365" class="LineNr">365 </span>  <span class="Delimiter">}</span>
+<span id="L366" class="LineNr">366 </span>  <span class="Identifier">return</span> bv<span class="Delimiter">;</span>
+<span id="L367" class="LineNr">367 </span><span class="Delimiter">}</span>
+<span id="L368" class="LineNr">368 </span>
+<span id="L369" class="LineNr">369 </span><span class="Delimiter">:(scenario conflicting_operand_type)</span>
+<span id="L370" class="LineNr">370 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L371" class="LineNr">371 </span>== <span class="Constant">0x1</span>
+<span id="L372" class="LineNr">372 </span>cd/software-interrupt <span class="Constant">80</span>/imm8/imm32
+<span id="L373" class="LineNr">373 </span><span class="traceContains">+error: '80/imm8/imm32' has conflicting operand types; it should have only one</span>
+<span id="L374" class="LineNr">374 </span>
+<span id="L375" class="LineNr">375 </span><span class="Comment">//: Instructions computing effective addresses have more complex rules, so</span>
+<span id="L376" class="LineNr">376 </span><span class="Comment">//: we'll hard-code a common set of instruction-decoding rules.</span>
+<span id="L377" class="LineNr">377 </span>
+<span id="L378" class="LineNr">378 </span><span class="Delimiter">:(scenario check_missing_mod_operand)</span>
+<span id="L379" class="LineNr">379 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L380" class="LineNr">380 </span>== <span class="Constant">0x1</span>
+<span id="L381" class="LineNr">381 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop       <span class="Constant">3</span>/rm32/ebx <span class="Constant">1</span>/imm32
+<span id="L382" class="LineNr">382 </span><span class="traceContains">+error: '81 0/add/subop 3/rm32/ebx 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing mod operand</span>
+<span id="L383" class="LineNr">383 </span>
+<span id="L384" class="LineNr">384 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L385" class="LineNr">385 </span>set&lt;string&gt; <a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">;</span>
+<span id="L386" class="LineNr">386 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L387" class="LineNr">387 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;subop&quot;</span><span class="Delimiter">);</span>
+<span id="L388" class="LineNr">388 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;mod&quot;</span><span class="Delimiter">);</span>
+<span id="L389" class="LineNr">389 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">);</span>
+<span id="L390" class="LineNr">390 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;base&quot;</span><span class="Delimiter">);</span>
+<span id="L391" class="LineNr">391 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;index&quot;</span><span class="Delimiter">);</span>
+<span id="L392" class="LineNr">392 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;scale&quot;</span><span class="Delimiter">);</span>
+<span id="L393" class="LineNr">393 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;r32&quot;</span><span class="Delimiter">);</span>
+<span id="L394" class="LineNr">394 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">);</span>
+<span id="L395" class="LineNr">395 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">);</span>
+<span id="L396" class="LineNr">396 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">);</span>
+<span id="L397" class="LineNr">397 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">);</span>
+<span id="L398" class="LineNr">398 </span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">.</span>insert<span class="Delimiter">(</span><span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">);</span>
+<span id="L399" class="LineNr">399 </span>
+<span id="L400" class="LineNr">400 </span><span class="Delimiter">:(code)</span>
+<span id="L401" class="LineNr">401 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L401'>check_operands_modrm</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L402" class="LineNr">402 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L337'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
+<span id="L403" class="LineNr">403 </span>  <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L404" class="LineNr">404 </span>  <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L405" class="LineNr">405 </span>  <span class="Comment">// no check for r32; some instructions don't use it; just assume it's 0 if missing</span>
+<span id="L406" class="LineNr">406 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;81&quot;</span> || op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;8f&quot;</span> || op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;ff&quot;</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>  <span class="Comment">// keep sync'd with 'help subop'</span>
+<span id="L407" class="LineNr">407 </span>    <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L408" class="LineNr">408 </span>    <a href='022check_instruction.cc.html#L430'>check_metadata_absent</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">,</span> <span class="Constant">&quot;should be replaced by subop&quot;</span><span class="Delimiter">);</span>
+<span id="L409" class="LineNr">409 </span>  <span class="Delimiter">}</span>
+<span id="L410" class="LineNr">410 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L411" class="LineNr">411 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> != <span class="Constant">&quot;4&quot;</span><span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L412" class="LineNr">412 </span>  <span class="Comment">// SIB byte checks</span>
+<span id="L413" class="LineNr">413 </span>  <span class="Normal">uint8_t</span> mod = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L414" class="LineNr">414 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>mod != <span class="Comment">/*</span><span class="Comment">direct</span><span class="Comment">*/</span><span class="Constant">3</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L415" class="LineNr">415 </span>    <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L416" class="LineNr">416 </span>    <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">);</span>  <span class="Comment">// otherwise why go to SIB?</span>
+<span id="L417" class="LineNr">417 </span>  <span class="Delimiter">}</span>
+<span id="L418" class="LineNr">418 </span>  <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L419" class="LineNr">419 </span>    <a href='022check_instruction.cc.html#L430'>check_metadata_absent</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">,</span> <span class="Constant">&quot;direct mode&quot;</span><span class="Delimiter">);</span>
+<span id="L420" class="LineNr">420 </span>    <a href='022check_instruction.cc.html#L430'>check_metadata_absent</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> op<span class="Delimiter">,</span> <span class="Constant">&quot;direct mode&quot;</span><span class="Delimiter">);</span>
+<span id="L421" class="LineNr">421 </span>  <span class="Delimiter">}</span>
+<span id="L422" class="LineNr">422 </span>  <span class="Comment">// no check for scale; 0 (2**0 = 1) by default</span>
+<span id="L423" class="LineNr">423 </span><span class="Delimiter">}</span>
+<span id="L424" class="LineNr">424 </span>
+<span id="L425" class="LineNr">425 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L425'>check_metadata_present</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L426" class="LineNr">426 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!has_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
+<span id="L427" class="LineNr">427 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L428" class="LineNr">428 </span><span class="Delimiter">}</span>
+<span id="L429" class="LineNr">429 </span>
+<span id="L430" class="LineNr">430 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L430'>check_metadata_absent</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; type<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; msg<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L431" class="LineNr">431 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">,</span> type<span class="Delimiter">))</span>
+<span id="L432" class="LineNr">432 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010vm.cc.html#L196'>name</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; type &lt;&lt; <span class="Constant">&quot; operand (&quot;</span> &lt;&lt; msg &lt;&lt; <span class="Constant">&quot;)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L433" class="LineNr">433 </span><span class="Delimiter">}</span>
+<span id="L434" class="LineNr">434 </span>
+<span id="L435" class="LineNr">435 </span><span class="Normal">bool</span> has_metadata<span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; m<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L436" class="LineNr">436 </span>  <span class="Normal">bool</span> result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L437" class="LineNr">437 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L438" class="LineNr">438 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> m<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L439" class="LineNr">439 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>result<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L440" class="LineNr">440 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' has conflicting &quot;</span> &lt;&lt; m &lt;&lt; <span class="Constant">&quot; operands</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L441" class="LineNr">441 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L442" class="LineNr">442 </span>    <span class="Delimiter">}</span>
+<span id="L443" class="LineNr">443 </span>    result =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L444" class="LineNr">444 </span>  <span class="Delimiter">}</span>
+<span id="L445" class="LineNr">445 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L446" class="LineNr">446 </span><span class="Delimiter">}</span>
+<span id="L447" class="LineNr">447 </span>
+<span id="L448" class="LineNr">448 </span><span class="Normal">bool</span> has_metadata<span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; m<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L449" class="LineNr">449 </span>  <span class="Normal">bool</span> result =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L450" class="LineNr">450 </span>  <span class="Normal">bool</span> metadata_found =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L451" class="LineNr">451 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span>metadata<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L452" class="LineNr">452 </span>    <span class="Normal">const</span> string&amp; curr = w<span class="Delimiter">.</span>metadata<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L453" class="LineNr">453 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L385'>Instruction_operands</a><span class="Delimiter">,</span> curr<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// ignore unrecognized metadata</span>
+<span id="L454" class="LineNr">454 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>metadata_found<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L455" class="LineNr">455 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' has conflicting operand types; it should have only one</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L456" class="LineNr">456 </span>      <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L457" class="LineNr">457 </span>    <span class="Delimiter">}</span>
+<span id="L458" class="LineNr">458 </span>    metadata_found =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L459" class="LineNr">459 </span>    result = <span class="Delimiter">(</span>curr == m<span class="Delimiter">);</span>
+<span id="L460" class="LineNr">460 </span>  <span class="Delimiter">}</span>
+<span id="L461" class="LineNr">461 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L462" class="LineNr">462 </span><span class="Delimiter">}</span>
+<span id="L463" class="LineNr">463 </span>
+<span id="L464" class="LineNr">464 </span><a href='011run.cc.html#L113'>word</a> metadata<span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> string&amp; m<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L465" class="LineNr">465 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span>
+<span id="L466" class="LineNr">466 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">),</span> m<span class="Delimiter">))</span>
+<span id="L467" class="LineNr">467 </span>      <span class="Identifier">return</span> inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L468" class="LineNr">468 </span>  assert<span class="Delimiter">(</span><span class="Constant">false</span><span class="Delimiter">);</span>
+<span id="L469" class="LineNr">469 </span><span class="Delimiter">}</span>
+<span id="L470" class="LineNr">470 </span>
+<span id="L471" class="LineNr">471 </span><span class="Delimiter">:(scenario conflicting_operands_in_modrm_instruction)</span>
+<span id="L472" class="LineNr">472 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L473" class="LineNr">473 </span>== <span class="Constant">0x1</span>
+<span id="L474" class="LineNr">474 </span><span class="PreProc">0</span><span class="Constant">1</span>/add <span class="Constant">0</span>/mod <span class="Constant">3</span>/mod
+<span id="L475" class="LineNr">475 </span><span class="traceContains">+error: '01/add 0/mod 3/mod' has conflicting mod operands</span>
+<span id="L476" class="LineNr">476 </span>
+<span id="L477" class="LineNr">477 </span><span class="Delimiter">:(scenario conflicting_operand_type_modrm)</span>
+<span id="L478" class="LineNr">478 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L479" class="LineNr">479 </span>== <span class="Constant">0x1</span>
+<span id="L480" class="LineNr">480 </span><span class="PreProc">0</span><span class="Constant">1</span>/add <span class="Constant">0</span>/mod <span class="Constant">3</span>/rm32/r32
+<span id="L481" class="LineNr">481 </span><span class="traceContains">+error: '3/rm32/r32' has conflicting operand types; it should have only one</span>
+<span id="L482" class="LineNr">482 </span>
+<span id="L483" class="LineNr">483 </span><span class="Delimiter">:(scenario check_missing_rm32_operand)</span>
+<span id="L484" class="LineNr">484 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L485" class="LineNr">485 </span>== <span class="Constant">0x1</span>
+<span id="L486" class="LineNr">486 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop <span class="Constant">0</span>/mod            <span class="Constant">1</span>/imm32
+<span id="L487" class="LineNr">487 </span><span class="traceContains">+error: '81 0/add/subop 0/mod 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing rm32 operand</span>
+<span id="L488" class="LineNr">488 </span>
+<span id="L489" class="LineNr">489 </span><span class="Delimiter">:(scenario check_missing_subop_operand)</span>
+<span id="L490" class="LineNr">490 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L491" class="LineNr">491 </span>== <span class="Constant">0x1</span>
+<span id="L492" class="LineNr">492 </span><span class="Constant">81</span>             <span class="Constant">0</span>/mod <span class="Constant">3</span>/rm32/ebx <span class="Constant">1</span>/imm32
+<span id="L493" class="LineNr">493 </span><span class="traceContains">+error: '81 0/mod 3/rm32/ebx 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing subop operand</span>
+<span id="L494" class="LineNr">494 </span>
+<span id="L495" class="LineNr">495 </span><span class="Delimiter">:(scenario check_missing_base_operand)</span>
+<span id="L496" class="LineNr">496 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L497" class="LineNr">497 </span>== <span class="Constant">0x1</span>
+<span id="L498" class="LineNr">498 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop <span class="Constant">0</span>/mod/indirect <span class="Constant">4</span>/rm32/use-sib <span class="Constant">1</span>/imm32
+<span id="L499" class="LineNr">499 </span><span class="traceContains">+error: '81 0/add/subop 0/mod/indirect 4/rm32/use-sib 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing base operand</span>
+<span id="L500" class="LineNr">500 </span>
+<span id="L501" class="LineNr">501 </span><span class="Delimiter">:(scenario check_missing_index_operand)</span>
+<span id="L502" class="LineNr">502 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L503" class="LineNr">503 </span>== <span class="Constant">0x1</span>
+<span id="L504" class="LineNr">504 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop <span class="Constant">0</span>/mod/indirect <span class="Constant">4</span>/rm32/use-sib <span class="Constant">0</span>/base <span class="Constant">1</span>/imm32
+<span id="L505" class="LineNr">505 </span><span class="traceContains">+error: '81 0/add/subop 0/mod/indirect 4/rm32/use-sib 0/base 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing index operand</span>
+<span id="L506" class="LineNr">506 </span>
+<span id="L507" class="LineNr">507 </span><span class="Delimiter">:(scenario check_missing_base_operand_2)</span>
+<span id="L508" class="LineNr">508 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L509" class="LineNr">509 </span>== <span class="Constant">0x1</span>
+<span id="L510" class="LineNr">510 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop <span class="Constant">0</span>/mod/indirect <span class="Constant">4</span>/rm32/use-sib <span class="Constant">2</span>/index <span class="Constant">3</span>/scale <span class="Constant">1</span>/imm32
+<span id="L511" class="LineNr">511 </span><span class="traceContains">+error: '81 0/add/subop 0/mod/indirect 4/rm32/use-sib 2/index 3/scale 1/imm32' (combine rm32 with <a href='011run.cc.html#L253'>imm32</a> based on subop): missing base operand</span>
+<span id="L512" class="LineNr">512 </span>
+<span id="L513" class="LineNr">513 </span><span class="Delimiter">:(scenario check_base_operand_not_needed_in_direct_mode)</span>
+<span id="L514" class="LineNr">514 </span>== <span class="Constant">0x1</span>
+<span id="L515" class="LineNr">515 </span><span class="Constant">81</span> <span class="Constant">0</span>/add/subop <span class="Constant">3</span>/mod/indirect <span class="Constant">4</span>/rm32/use-sib <span class="Constant">1</span>/imm32
+<span id="L516" class="LineNr">516 </span>$error: <span class="Constant">0</span>
+<span id="L517" class="LineNr">517 </span>
+<span id="L518" class="LineNr">518 </span><span class="SalientComment">//:: similarly handle multi-byte opcodes</span>
+<span id="L519" class="LineNr">519 </span>
+<span id="L520" class="LineNr">520 </span><span class="Delimiter">:(code)</span>
+<span id="L521" class="LineNr">521 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L562'>check_operands_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L522" class="LineNr">522 </span>  assert<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">);</span>
+<span id="L523" class="LineNr">523 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">)</span> == <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L524" class="LineNr">524 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;opcode '0f' requires a second opcode</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L525" class="LineNr">525 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L526" class="LineNr">526 </span>  <span class="Delimiter">}</span>
+<span id="L527" class="LineNr">527 </span>  <a href='011run.cc.html#L113'>word</a> op = <a href='022check_instruction.cc.html#L91'>preprocess_op</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L528" class="LineNr">528 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!contains_key<span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L529" class="LineNr">529 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;unknown 2-byte opcode '0f &quot;</span> &lt;&lt; op<span class="Delimiter">.</span>data &lt;&lt; <span class="Constant">&quot;'</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L530" class="LineNr">530 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L531" class="LineNr">531 </span>  <span class="Delimiter">}</span>
+<span id="L532" class="LineNr">532 </span>  <a href='022check_instruction.cc.html#L562'>check_operands_0f</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L533" class="LineNr">533 </span><span class="Delimiter">}</span>
+<span id="L534" class="LineNr">534 </span>
+<span id="L535" class="LineNr">535 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L535'>check_operands_f3</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; <span class="Comment">/*</span><span class="Comment">unused</span><span class="Comment">*/</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L536" class="LineNr">536 </span>  <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;no supported opcodes starting with f3</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L537" class="LineNr">537 </span><span class="Delimiter">}</span>
+<span id="L538" class="LineNr">538 </span>
+<span id="L539" class="LineNr">539 </span><span class="Delimiter">:(scenario check_missing_disp16_operand)</span>
+<span id="L540" class="LineNr">540 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L541" class="LineNr">541 </span>== <span class="Constant">0x1</span>
+<span id="L542" class="LineNr">542 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L543" class="LineNr">543 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L544" class="LineNr">544 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L545" class="LineNr">545 </span>  <span class="Constant">0f</span> <span class="Constant">84</span>                                                                                                                                     <span class="Comment"># jmp if ZF to ??</span>
+<span id="L546" class="LineNr">546 </span><span class="traceContains">+error: '0f 84' (jump disp16 bytes away if ZF is set): missing disp16 operand</span>
+<span id="L547" class="LineNr">547 </span>
+<span id="L548" class="LineNr">548 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L549" class="LineNr">549 </span>map&lt;<span class="Comment">/*</span><span class="Comment">op</span><span class="Comment">*/</span>string<span class="Delimiter">,</span> <span class="Comment">/*</span><span class="Comment">bitvector</span><span class="Comment">*/</span><span class="Normal">uint8_t</span>&gt; <a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">;</span>
+<span id="L550" class="LineNr">550 </span><span class="Delimiter">:(before &quot;End Init Permitted Operands&quot;)</span>
+<span id="L551" class="LineNr">551 </span><span class="SalientComment">//// Class C: just op and disp16</span>
+<span id="L552" class="LineNr">552 </span><span class="Comment">//  imm32 imm8  disp32 |disp16  disp8 subop modrm</span>
+<span id="L553" class="LineNr">553 </span><span class="Comment">//  0     0     0      |1       0     0     0</span>
+<span id="L554" class="LineNr">554 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;84&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L555" class="LineNr">555 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;85&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L556" class="LineNr">556 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8c&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L557" class="LineNr">557 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8d&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L558" class="LineNr">558 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8e&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L559" class="LineNr">559 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> <span class="Constant">&quot;8f&quot;</span><span class="Delimiter">,</span> <span class="Constant">0x08</span><span class="Delimiter">);</span>
+<span id="L560" class="LineNr">560 </span>
+<span id="L561" class="LineNr">561 </span><span class="Delimiter">:(code)</span>
+<span id="L562" class="LineNr">562 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L562'>check_operands_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L563" class="LineNr">563 </span>  <span class="Normal">uint8_t</span> expected_bitvector = get<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L549'>Permitted_operands_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L564" class="LineNr">564 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L264'>HAS</a><span class="Delimiter">(</span>expected_bitvector<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">))</span>
+<span id="L565" class="LineNr">565 </span>    <a href='022check_instruction.cc.html#L401'>check_operands_modrm</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> op<span class="Delimiter">);</span>
+<span id="L566" class="LineNr">566 </span>  <a href='022check_instruction.cc.html#L569'>compare_bitvector_0f</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L266'>CLEAR</a><span class="Delimiter">(</span>expected_bitvector<span class="Delimiter">,</span> <a href='022check_instruction.cc.html#L105'>MODRM</a><span class="Delimiter">),</span> op<span class="Delimiter">);</span>
+<span id="L567" class="LineNr">567 </span><span class="Delimiter">}</span>
+<span id="L568" class="LineNr">568 </span>
+<span id="L569" class="LineNr">569 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L569'>compare_bitvector_0f</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">,</span> <span class="Normal">uint8_t</span> expected<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; op<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L570" class="LineNr">570 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L337'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &amp;&amp; <a href='022check_instruction.cc.html#L322'>has_operands</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// deliberately programming in raw hex; we'll raise a warning elsewhere</span>
+<span id="L571" class="LineNr">571 </span>  <span class="Normal">uint8_t</span> bitvector = <a href='022check_instruction.cc.html#L313'>compute_operand_bitvector</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L572" class="LineNr">572 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// duplicate operand type</span>
+<span id="L573" class="LineNr">573 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>bitvector == expected<span class="Delimiter">)</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this instruction</span>
+<span id="L574" class="LineNr">574 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='022check_instruction.cc.html#L112'>NUM_OPERAND_TYPES</a><span class="Delimiter">;</span>  ++i<span class="Delimiter">,</span> bitvector &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">,</span> expected &gt;&gt;= <span class="Constant">1</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L575" class="LineNr">575 </span><span class="CommentedCode">//?     cerr &lt;&lt; &quot;comparing &quot; &lt;&lt; HEXBYTE &lt;&lt; NUM(bitvector) &lt;&lt; &quot; with &quot; &lt;&lt; NUM(expected) &lt;&lt; '\n';</span>
+<span id="L576" class="LineNr">576 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> == <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// all good with this operand</span>
+<span id="L577" class="LineNr">577 </span>    <span class="Normal">const</span> string&amp; optype = <a href='022check_instruction.cc.html#L115'>Operand_type_name</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L578" class="LineNr">578 </span>    <span class="Normal">if</span> <span class="Delimiter">((</span>bitvector &amp; <span class="Constant">0x1</span><span class="Delimiter">)</span> &gt; <span class="Delimiter">(</span>expected &amp; <span class="Constant">0x1</span><span class="Delimiter">))</span>
+<span id="L579" class="LineNr">579 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): unexpected &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L580" class="LineNr">580 </span>    <span class="Normal">else</span>
+<span id="L581" class="LineNr">581 </span>      <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;' (&quot;</span> &lt;&lt; get<span class="Delimiter">(</span><a href='010vm.cc.html#L197'>name_0f</a><span class="Delimiter">,</span> op<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;): missing &quot;</span> &lt;&lt; optype &lt;&lt; <span class="Constant">&quot; operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L582" class="LineNr">582 </span>    <span class="Comment">// continue giving all errors for a single instruction</span>
+<span id="L583" class="LineNr">583 </span>  <span class="Delimiter">}</span>
+<span id="L584" class="LineNr">584 </span>  <span class="Comment">// ignore settings in any unused bits</span>
+<span id="L585" class="LineNr">585 </span><span class="Delimiter">}</span>
+<span id="L586" class="LineNr">586 </span>
+<span id="L587" class="LineNr">587 </span>string to_string<span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L588" class="LineNr">588 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L589" class="LineNr">589 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L590" class="LineNr">590 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L591" class="LineNr">591 </span>    out &lt;&lt; inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L114'>original</a><span class="Delimiter">;</span>
+<span id="L592" class="LineNr">592 </span>  <span class="Delimiter">}</span>
+<span id="L593" class="LineNr">593 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L594" class="LineNr">594 </span><span class="Delimiter">}</span>
+<span id="L595" class="LineNr">595 </span>
+<span id="L596" class="LineNr">596 </span>string <a href='022check_instruction.cc.html#L596'>tolower</a><span class="Delimiter">(</span><span class="Normal">const</span> <span class="Normal">char</span>* s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L597" class="LineNr">597 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L598" class="LineNr">598 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">nada</span><span class="Comment">*/</span><span class="Delimiter">;</span>  *s<span class="Delimiter">;</span>  ++s<span class="Delimiter">)</span>
+<span id="L599" class="LineNr">599 </span>    out &lt;&lt; <span class="Normal">static_cast</span>&lt;<span class="Normal">char</span>&gt;<span class="Delimiter">(</span><a href='022check_instruction.cc.html#L596'>tolower</a><span class="Delimiter">(</span>*s<span class="Delimiter">));</span>
+<span id="L600" class="LineNr">600 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L601" class="LineNr">601 </span><span class="Delimiter">}</span>
+<span id="L602" class="LineNr">602 </span>
+<span id="L603" class="LineNr">603 </span><span class="SalientComment">//:: docs on each operand type</span>
+<span id="L604" class="LineNr">604 </span>
+<span id="L605" class="LineNr">605 </span><span class="Delimiter">:(before &quot;End <a href='001help.cc.html#L53'>Help</a> Texts&quot;)</span>
+<span id="L606" class="LineNr">606 </span><a href='022check_instruction.cc.html#L608'>init_operand_type_help</a><span class="Delimiter">();</span>
+<span id="L607" class="LineNr">607 </span><span class="Delimiter">:(code)</span>
+<span id="L608" class="LineNr">608 </span><span class="Normal">void</span> <a href='022check_instruction.cc.html#L608'>init_operand_type_help</a><span class="Delimiter">()</span> <span class="Delimiter">{</span>
+<span id="L609" class="LineNr">609 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">,</span>
+<span id="L610" class="LineNr">610 </span>    <span class="Constant">&quot;2-bit operand controlling the _addressing mode_ of many instructions,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L611" class="LineNr">611 </span>    <span class="Constant">&quot;to determine how to compute the _effective address_ to look up memory at</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L612" class="LineNr">612 </span>    <span class="Constant">&quot;based on the 'rm32' operand and potentially others.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L613" class="LineNr">613 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L614" class="LineNr">614 </span>    <span class="Constant">&quot;If mod = 3, just operate on the <a href='003trace.cc.html#L74'>contents</a> of the register specified by rm32</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L615" class="LineNr">615 </span>    <span class="Constant">&quot;            (direct mode).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L616" class="LineNr">616 </span>    <span class="Constant">&quot;If mod = 2, effective address is usually* rm32 + disp32</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L617" class="LineNr">617 </span>    <span class="Constant">&quot;            (indirect mode with displacement).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L618" class="LineNr">618 </span>    <span class="Constant">&quot;If mod = 1, effective address is usually* rm32 + disp8</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L619" class="LineNr">619 </span>    <span class="Constant">&quot;            (indirect mode with displacement).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L620" class="LineNr">620 </span>    <span class="Constant">&quot;If mod = 0, effective address is usually* rm32 (indirect mode).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L621" class="LineNr">621 </span>    <span class="Constant">&quot;(* - The exception is when rm32 is '4'. Register 4 is the stack pointer (ESP).</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L622" class="LineNr">622 </span>    <span class="Constant">&quot;     Using it as an address gets more involved. For more details,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L623" class="LineNr">623 </span>    <span class="Constant">&quot;     try reading the help pages for 'base', 'index' and 'scale'.)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L624" class="LineNr">624 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L625" class="LineNr">625 </span>    <span class="Constant">&quot;For complete details consult the IA-32 software developer's manual, table 2-2,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L626" class="LineNr">626 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">32-bit addressing forms with the ModR/M byte</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L627" class="LineNr">627 </span>    <span class="Constant">&quot;  <a href="https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf">https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L628" class="LineNr">628 </span>  <span class="Delimiter">);</span>
+<span id="L629" class="LineNr">629 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">,</span>
+<span id="L630" class="LineNr">630 </span>    <span class="Constant">&quot;Additional 3-bit operand for determining the instruction when the opcode is 81, 8f or ff.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L631" class="LineNr">631 </span>    <span class="Constant">&quot;Can't coexist with operand of type 'r32' in a single instruction, because the two use the same bits.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L632" class="LineNr">632 </span>  <span class="Delimiter">);</span>
+<span id="L633" class="LineNr">633 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">,</span>
+<span id="L634" class="LineNr">634 </span>    <span class="Constant">&quot;3-bit operand specifying a register operand used directly, without any further addressing modes.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L635" class="LineNr">635 </span>  <span class="Delimiter">);</span>
+<span id="L636" class="LineNr">636 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">,</span>
+<span id="L637" class="LineNr">637 </span>    <span class="Constant">&quot;3-bit operand specifying a register operand whose precise interpretation interacts with 'mod'.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L638" class="LineNr">638 </span>    <span class="Constant">&quot;For complete details consult the IA-32 software developer's manual, table 2-2,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L639" class="LineNr">639 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">32-bit addressing forms with the ModR/M byte</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L640" class="LineNr">640 </span>    <span class="Constant">&quot;  <a href="https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf">https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L641" class="LineNr">641 </span>  <span class="Delimiter">);</span>
+<span id="L642" class="LineNr">642 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">,</span>
+<span id="L643" class="LineNr">643 </span>    <span class="Constant">&quot;Additional 3-bit operand (when 'rm32' is 4 unless 'mod' is 3) specifying the register containing an address to look up.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L644" class="LineNr">644 </span>    <span class="Constant">&quot;This address may be further modified by 'index' and 'scale' operands.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L645" class="LineNr">645 </span>    <span class="Constant">&quot;  effective address = base + index*scale + displacement (disp8 or disp32)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L646" class="LineNr">646 </span>    <span class="Constant">&quot;For complete details consult the IA-32 software developer's manual, table 2-3,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L647" class="LineNr">647 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">32-bit addressing forms with the SIB byte</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L648" class="LineNr">648 </span>    <span class="Constant">&quot;  <a href="https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf">https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L649" class="LineNr">649 </span>  <span class="Delimiter">);</span>
+<span id="L650" class="LineNr">650 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span>
+<span id="L651" class="LineNr">651 </span>    <span class="Constant">&quot;Optional 3-bit operand (when 'rm32' is 4 unless 'mod' is 3) that can be added to the 'base' operand to compute the 'effective address' at which to look up memory.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L652" class="LineNr">652 </span>    <span class="Constant">&quot;  effective address = base + index*scale + displacement (disp8 or disp32)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L653" class="LineNr">653 </span>    <span class="Constant">&quot;For complete details consult the IA-32 software developer's manual, table 2-3,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L654" class="LineNr">654 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">32-bit addressing forms with the SIB byte</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L655" class="LineNr">655 </span>    <span class="Constant">&quot;  <a href="https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf">https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L656" class="LineNr">656 </span>  <span class="Delimiter">);</span>
+<span id="L657" class="LineNr">657 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;scale&quot;</span><span class="Delimiter">,</span>
+<span id="L658" class="LineNr">658 </span>    <span class="Constant">&quot;Optional 2-bit operand (when 'rm32' is 4 unless 'mod' is 3) that can be multiplied to the 'index' operand before adding the result to the 'base' operand to compute the _effective address_ to operate on.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L659" class="LineNr">659 </span>    <span class="Constant">&quot;  effective address = base + index * scale + displacement (disp8 or disp32)</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L660" class="LineNr">660 </span>    <span class="Constant">&quot;For complete details consult the IA-32 software developer's manual, table 2-3,</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L661" class="LineNr">661 </span>    <span class="Constant">&quot;</span><span class="cSpecial">\&quot;</span><span class="Constant">32-bit addressing forms with the SIB byte</span><span class="cSpecial">\&quot;</span><span class="Constant">.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L662" class="LineNr">662 </span>    <span class="Constant">&quot;  <a href="https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf">https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf</a></span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L663" class="LineNr">663 </span>  <span class="Delimiter">);</span>
+<span id="L664" class="LineNr">664 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">,</span>
+<span id="L665" class="LineNr">665 </span>    <span class="Constant">&quot;8-bit value to be added in many instructions.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L666" class="LineNr">666 </span>  <span class="Delimiter">);</span>
+<span id="L667" class="LineNr">667 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">,</span>
+<span id="L668" class="LineNr">668 </span>    <span class="Constant">&quot;16-bit value to be added in many instructions.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L669" class="LineNr">669 </span>  <span class="Delimiter">);</span>
+<span id="L670" class="LineNr">670 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">,</span>
+<span id="L671" class="LineNr">671 </span>    <span class="Constant">&quot;32-bit value to be added in many instructions.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L672" class="LineNr">672 </span>  <span class="Delimiter">);</span>
+<span id="L673" class="LineNr">673 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">,</span>
+<span id="L674" class="LineNr">674 </span>    <span class="Constant">&quot;8-bit value for many instructions.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L675" class="LineNr">675 </span>  <span class="Delimiter">);</span>
+<span id="L676" class="LineNr">676 </span>  <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='001help.cc.html#L53'>Help</a><span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">,</span>
+<span id="L677" class="LineNr">677 </span>    <span class="Constant">&quot;32-bit value for many instructions.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span>
+<span id="L678" class="LineNr">678 </span>  <span class="Delimiter">);</span>
+<span id="L679" class="LineNr">679 </span><span class="Delimiter">}</span>
+<span id="L680" class="LineNr">680 </span>
+<span id="L681" class="LineNr">681 </span><span class="Delimiter">:(before &quot;End Includes&quot;)</span>
+<span id="L682" class="LineNr">682 </span><span class="Comment">#include&lt;cctype&gt;</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/023check_operand_bounds.cc.html b/html/subx/023check_operand_bounds.cc.html
new file mode 100644
index 00000000..f86b5dd4
--- /dev/null
+++ b/html/subx/023check_operand_bounds.cc.html
@@ -0,0 +1,141 @@
+<!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 - subx/023check_operand_bounds.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.SalientComment { color: #00ffff; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr"> 1 </span><span class="SalientComment">//:: Check that the different operands of an instruction aren't too large for their bitfields.</span>
+<span id="L2" class="LineNr"> 2 </span>
+<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(scenario check_bitfield_sizes)</span>
+<span id="L4" class="LineNr"> 4 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L5" class="LineNr"> 5 </span>== <span class="Constant">0x1</span>
+<span id="L6" class="LineNr"> 6 </span><span class="PreProc">0</span><span class="Constant">1</span>/add <span class="Constant">4</span>/mod
+<span id="L7" class="LineNr"> 7 </span><span class="traceContains">+error: '4/mod' too large to fit in bitfield mod</span>
+<span id="L8" class="LineNr"> 8 </span>
+<span id="L9" class="LineNr"> 9 </span><span class="Delimiter">:(before &quot;End Globals&quot;)</span>
+<span id="L10" class="LineNr">10 </span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt; <a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">;</span>
+<span id="L11" class="LineNr">11 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L12" class="LineNr">12 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L13" class="LineNr">13 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L14" class="LineNr">14 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L15" class="LineNr">15 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L16" class="LineNr">16 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L17" class="LineNr">17 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;scale&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L18" class="LineNr">18 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">3</span><span class="Delimiter">);</span>
+<span id="L19" class="LineNr">19 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
+<span id="L20" class="LineNr">20 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">16</span><span class="Delimiter">);</span>
+<span id="L21" class="LineNr">21 </span><span class="Comment">// no bound needed for disp32</span>
+<span id="L22" class="LineNr">22 </span><a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">,</span> <span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">,</span> <span class="Constant">1</span>&lt;&lt;<span class="Constant">8</span><span class="Delimiter">);</span>
+<span id="L23" class="LineNr">23 </span><span class="Comment">// no bound needed for imm32</span>
+<span id="L24" class="LineNr">24 </span>
+<span id="L25" class="LineNr">25 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L26" class="LineNr">26 </span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>check_operand_bounds<span class="Delimiter">);</span>
+<span id="L27" class="LineNr">27 </span><span class="Delimiter">:(code)</span>
+<span id="L28" class="LineNr">28 </span><span class="Normal">void</span> check_operand_bounds<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L29" class="LineNr">29 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- check operand bounds&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L30" class="LineNr">30 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L31" class="LineNr">31 </span>  <span class="Normal">const</span> segment&amp; code = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L32" class="LineNr">32 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L33" class="LineNr">33 </span>    <span class="Normal">const</span> line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L34" class="LineNr">34 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <a href='022check_instruction.cc.html#L326'>first_operand</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span>
+<span id="L35" class="LineNr">35 </span>      check_operand_bounds<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">));</span>
+<span id="L36" class="LineNr">36 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>  <span class="Comment">// stop at the first mal-formed instruction</span>
+<span id="L37" class="LineNr">37 </span>  <span class="Delimiter">}</span>
+<span id="L38" class="LineNr">38 </span><span class="Delimiter">}</span>
+<span id="L39" class="LineNr">39 </span>
+<span id="L40" class="LineNr">40 </span><span class="Normal">void</span> check_operand_bounds<span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L41" class="LineNr">41 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt;::iterator p = <a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L42" class="LineNr">42 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!has_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L43" class="LineNr">43 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_int<span class="Delimiter">(</span>w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>  <span class="Comment">// later transforms are on their own to do their own bounds checking</span>
+<span id="L44" class="LineNr">44 </span>    <span class="Normal">int32_t</span> x = <a href='023check_operand_bounds.cc.html#L65'>parse_int</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L45" class="LineNr">45 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>x &gt;= <span class="Constant">0</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L46" class="LineNr">46 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span>x<span class="Delimiter">)</span> &gt;= p<span class="Delimiter">-&gt;</span>second<span class="Delimiter">)</span>
+<span id="L47" class="LineNr">47 </span>        <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' too large to fit in bitfield &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L48" class="LineNr">48 </span>    <span class="Delimiter">}</span>
+<span id="L49" class="LineNr">49 </span>    <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L50" class="LineNr">50 </span>      <span class="Comment">// hacky? assuming bound is a power of 2</span>
+<span id="L51" class="LineNr">51 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>x &lt; -<span class="Constant">1</span>*<span class="Normal">static_cast</span>&lt;<span class="Normal">int32_t</span>&gt;<span class="Delimiter">(</span>p<span class="Delimiter">-&gt;</span>second/<span class="Constant">2</span><span class="Delimiter">))</span>
+<span id="L52" class="LineNr">52 </span>        <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; w<span class="Delimiter">.</span>original &lt;&lt; <span class="Constant">&quot;' too large to fit in bitfield &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L53" class="LineNr">53 </span>    <span class="Delimiter">}</span>
+<span id="L54" class="LineNr">54 </span>  <span class="Delimiter">}</span>
+<span id="L55" class="LineNr">55 </span><span class="Delimiter">}</span>
+<span id="L56" class="LineNr">56 </span>
+<span id="L57" class="LineNr">57 </span><span class="Normal">bool</span> <a href='023check_operand_bounds.cc.html#L57'>is_hex_int</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L58" class="LineNr">58 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L59" class="LineNr">59 </span>  <span class="Normal">size_t</span> pos = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L60" class="LineNr">60 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == <span class="Constant">'-'</span> || s<span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">)</span> == <span class="Constant">'+'</span><span class="Delimiter">)</span> pos++<span class="Delimiter">;</span>
+<span id="L61" class="LineNr">61 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>s<span class="Delimiter">.</span>substr<span class="Delimiter">(</span>pos<span class="Delimiter">,</span> pos+<span class="Constant">2</span><span class="Delimiter">)</span> == <span class="Constant">&quot;0x&quot;</span><span class="Delimiter">)</span> pos += <span class="Constant">2</span><span class="Delimiter">;</span>
+<span id="L62" class="LineNr">62 </span>  <span class="Identifier">return</span> s<span class="Delimiter">.</span>find_first_not_of<span class="Delimiter">(</span><span class="Constant">&quot;0123456789abcdefABCDEF&quot;</span><span class="Delimiter">,</span> pos<span class="Delimiter">)</span> == string::npos<span class="Delimiter">;</span>
+<span id="L63" class="LineNr">63 </span><span class="Delimiter">}</span>
+<span id="L64" class="LineNr">64 </span>
+<span id="L65" class="LineNr">65 </span><span class="Normal">int32_t</span> <a href='023check_operand_bounds.cc.html#L65'>parse_int</a><span class="Delimiter">(</span><span class="Normal">const</span> string&amp; s<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr">66 </span>  istringstream in<span class="Delimiter">(</span>s<span class="Delimiter">);</span>
+<span id="L67" class="LineNr">67 </span>  <span class="Normal">int32_t</span> result = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L68" class="LineNr">68 </span>  in &gt;&gt; std::hex &gt;&gt; result<span class="Delimiter">;</span>
+<span id="L69" class="LineNr">69 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!in || !in<span class="Delimiter">.</span>eof<span class="Delimiter">())</span> <span class="Delimiter">{</span>
+<span id="L70" class="LineNr">70 </span>    <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;not a number: &quot;</span> &lt;&lt; s &lt;&lt; <span class="cSpecial">'\n'</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L71" class="LineNr">71 </span>    <span class="Identifier">return</span> <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L72" class="LineNr">72 </span>  <span class="Delimiter">}</span>
+<span id="L73" class="LineNr">73 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L74" class="LineNr">74 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/024pack_operands.cc.html b/html/subx/024pack_operands.cc.html
new file mode 100644
index 00000000..ced3cdc2
--- /dev/null
+++ b/html/subx/024pack_operands.cc.html
@@ -0,0 +1,277 @@
+<!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 - subx/024pack_operands.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.traceContains { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Operands can refer to bitfields smaller than a byte. This layer packs</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: operands into their containing bytes in the right order.</span>
+<span id="L3" class="LineNr">  3 </span>
+<span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(scenario pack_immediate_constants)</span>
+<span id="L5" class="LineNr">  5 </span>== <span class="Constant">0x1</span>
+<span id="L6" class="LineNr">  6 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L7" class="LineNr">  7 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L8" class="LineNr">  8 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L9" class="LineNr">  9 </span>  bb                                                                                                                      <span class="Constant">0x2a</span>/imm32        <span class="Comment"># copy 42 to EBX</span>
+<span id="L10" class="LineNr"> 10 </span><span class="traceContains">+transform: packing instruction 'bb 0x2a/imm32'</span>
+<span id="L11" class="LineNr"> 11 </span><span class="traceContains">+transform: instruction after packing: 'bb 2a 00 00 00'</span>
+<span id="L12" class="LineNr"> 12 </span><span class="traceContains">+run: copy <a href='011run.cc.html#L253'>imm32</a> 0x0000002a to <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L13" class="LineNr"> 13 </span>
+<span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(scenario pack_disp8)</span>
+<span id="L15" class="LineNr"> 15 </span>== <span class="Constant">0x1</span>
+<span id="L16" class="LineNr"> 16 </span><span class="Constant">74</span> <span class="Constant">2</span>/disp8  <span class="Comment"># jump 2 bytes away if ZF is set</span>
+<span id="L17" class="LineNr"> 17 </span><span class="traceContains">+transform: packing instruction '74 2/disp8'</span>
+<span id="L18" class="LineNr"> 18 </span><span class="traceContains">+transform: instruction after packing: '74 02'</span>
+<span id="L19" class="LineNr"> 19 </span>
+<span id="L20" class="LineNr"> 20 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L21" class="LineNr"> 21 </span><span class="Delimiter">:(scenario pack_disp8_negative)</span>
+<span id="L22" class="LineNr"> 22 </span>== <span class="Constant">0x1</span>
+<span id="L23" class="LineNr"> 23 </span><span class="Comment"># running this will cause an infinite loop</span>
+<span id="L24" class="LineNr"> 24 </span><span class="Constant">74</span> -<span class="Constant">1</span>/disp8  <span class="Comment"># jump 1 byte before if ZF is set</span>
+<span id="L25" class="LineNr"> 25 </span><span class="traceContains">+transform: packing instruction '74 -1/disp8'</span>
+<span id="L26" class="LineNr"> 26 </span><span class="traceContains">+transform: instruction after packing: '74 ff'</span>
+<span id="L27" class="LineNr"> 27 </span><span class="Delimiter">:(scenarios run)</span>
+<span id="L28" class="LineNr"> 28 </span>
+<span id="L29" class="LineNr"> 29 </span><span class="Delimiter">:(scenario pack_modrm_imm32)</span>
+<span id="L30" class="LineNr"> 30 </span>== <span class="Constant">0x1</span>
+<span id="L31" class="LineNr"> 31 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L32" class="LineNr"> 32 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L33" class="LineNr"> 33 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L34" class="LineNr"> 34 </span>  <span class="Constant">81</span>          <span class="Constant">0</span>/add/subop         <span class="Constant">3</span>/mod/direct    <span class="Constant">3</span>/ebx/rm32                                                              <span class="Constant">1</span>/imm32           <span class="Comment"># add 1 to EBX</span>
+<span id="L35" class="LineNr"> 35 </span><span class="traceContains">+transform: packing instruction '81 0/add/subop 3/mod/direct 3/ebx/rm32 1/imm32'</span>
+<span id="L36" class="LineNr"> 36 </span><span class="traceContains">+transform: instruction after packing: '81 c3 01 00 00 00'</span>
+<span id="L37" class="LineNr"> 37 </span>
+<span id="L38" class="LineNr"> 38 </span><span class="Delimiter">:(scenario pack_imm32_large)</span>
+<span id="L39" class="LineNr"> 39 </span>== <span class="Constant">0x1</span>
+<span id="L40" class="LineNr"> 40 </span>b9 <span class="Constant">0x080490a7</span>/imm32  <span class="Comment"># copy to ECX</span>
+<span id="L41" class="LineNr"> 41 </span><span class="traceContains">+transform: packing instruction 'b9 0x080490a7/imm32'</span>
+<span id="L42" class="LineNr"> 42 </span><span class="traceContains">+transform: instruction after packing: 'b9 a7 90 04 08'</span>
+<span id="L43" class="LineNr"> 43 </span>
+<span id="L44" class="LineNr"> 44 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L45" class="LineNr"> 45 </span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>pack_operands<span class="Delimiter">);</span>
+<span id="L46" class="LineNr"> 46 </span>
+<span id="L47" class="LineNr"> 47 </span><span class="Delimiter">:(code)</span>
+<span id="L48" class="LineNr"> 48 </span><span class="Normal">void</span> pack_operands<span class="Delimiter">(</span>program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L49" class="LineNr"> 49 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- pack operands&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L50" class="LineNr"> 50 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L51" class="LineNr"> 51 </span>  segment&amp; code = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L52" class="LineNr"> 52 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L53" class="LineNr"> 53 </span>    line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L54" class="LineNr"> 54 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L337'>all_hex_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">))</span> <span class="Identifier">continue</span><span class="Delimiter">;</span>
+<span id="L55" class="LineNr"> 55 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;packing instruction '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">with metadata</span><span class="Comment">*/</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L56" class="LineNr"> 56 </span>    pack_operands<span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction after packing: '&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">without metadata</span><span class="Comment">*/</span>inst<span class="Delimiter">.</span>words<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L58" class="LineNr"> 58 </span>  <span class="Delimiter">}</span>
+<span id="L59" class="LineNr"> 59 </span><span class="Delimiter">}</span>
+<span id="L60" class="LineNr"> 60 </span>
+<span id="L61" class="LineNr"> 61 </span><span class="Normal">void</span> pack_operands<span class="Delimiter">(</span>line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L62" class="LineNr"> 62 </span>  <a href='011run.cc.html#L108'>line</a> new_inst<span class="Delimiter">;</span>
+<span id="L63" class="LineNr"> 63 </span>  <a href='024pack_operands.cc.html#L71'>add_opcodes</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> new_inst<span class="Delimiter">);</span>
+<span id="L64" class="LineNr"> 64 </span>  <a href='024pack_operands.cc.html#L79'>add_modrm_byte</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> new_inst<span class="Delimiter">);</span>
+<span id="L65" class="LineNr"> 65 </span>  <a href='024pack_operands.cc.html#L105'>add_sib_byte</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> new_inst<span class="Delimiter">);</span>
+<span id="L66" class="LineNr"> 66 </span>  <a href='024pack_operands.cc.html#L127'>add_disp_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> new_inst<span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>  <a href='024pack_operands.cc.html#L139'>add_imm_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">,</span> new_inst<span class="Delimiter">);</span>
+<span id="L68" class="LineNr"> 68 </span>  inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>
+<span id="L69" class="LineNr"> 69 </span><span class="Delimiter">}</span>
+<span id="L70" class="LineNr"> 70 </span>
+<span id="L71" class="LineNr"> 71 </span><span class="Normal">void</span> <a href='024pack_operands.cc.html#L71'>add_opcodes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; in<span class="Delimiter">,</span> line&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L72" class="LineNr"> 72 </span>  out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">));</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span> || in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;f3&quot;</span><span class="Delimiter">)</span>
+<span id="L74" class="LineNr"> 74 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">));</span>
+<span id="L75" class="LineNr"> 75 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;f3&quot;</span> &amp;&amp; in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">1</span><span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a> == <span class="Constant">&quot;0f&quot;</span><span class="Delimiter">)</span>
+<span id="L76" class="LineNr"> 76 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">2</span><span class="Delimiter">));</span>
+<span id="L77" class="LineNr"> 77 </span><span class="Delimiter">}</span>
+<span id="L78" class="LineNr"> 78 </span>
+<span id="L79" class="LineNr"> 79 </span><span class="Normal">void</span> <a href='024pack_operands.cc.html#L79'>add_modrm_byte</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; in<span class="Delimiter">,</span> line&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L80" class="LineNr"> 80 </span>  <span class="Normal">uint8_t</span> mod=<span class="Constant">0</span><span class="Delimiter">,</span> reg_subop=<span class="Constant">0</span><span class="Delimiter">,</span> rm32=<span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L81" class="LineNr"> 81 </span>  <span class="Normal">bool</span> emit =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L83" class="LineNr"> 83 </span>    <span class="Normal">const</span> word&amp; curr = in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L84" class="LineNr"> 84 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;mod&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr"> 85 </span>      mod = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L86" class="LineNr"> 86 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L87" class="LineNr"> 87 </span>    <span class="Delimiter">}</span>
+<span id="L88" class="LineNr"> 88 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;rm32&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L89" class="LineNr"> 89 </span>      rm32 = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L90" class="LineNr"> 90 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L91" class="LineNr"> 91 </span>    <span class="Delimiter">}</span>
+<span id="L92" class="LineNr"> 92 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;r32&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>      reg_subop = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L94" class="LineNr"> 94 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L95" class="LineNr"> 95 </span>    <span class="Delimiter">}</span>
+<span id="L96" class="LineNr"> 96 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;subop&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L97" class="LineNr"> 97 </span>      reg_subop = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L98" class="LineNr"> 98 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L99" class="LineNr"> 99 </span>    <span class="Delimiter">}</span>
+<span id="L100" class="LineNr">100 </span>  <span class="Delimiter">}</span>
+<span id="L101" class="LineNr">101 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>emit<span class="Delimiter">)</span>
+<span id="L102" class="LineNr">102 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='024pack_operands.cc.html#L166'>hex_byte_text</a><span class="Delimiter">((</span>mod &lt;&lt; <span class="Constant">6</span><span class="Delimiter">)</span> | <span class="Delimiter">(</span>reg_subop &lt;&lt; <span class="Constant">3</span><span class="Delimiter">)</span> | rm32<span class="Delimiter">));</span>
+<span id="L103" class="LineNr">103 </span><span class="Delimiter">}</span>
+<span id="L104" class="LineNr">104 </span>
+<span id="L105" class="LineNr">105 </span><span class="Normal">void</span> <a href='024pack_operands.cc.html#L105'>add_sib_byte</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; in<span class="Delimiter">,</span> line&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L106" class="LineNr">106 </span>  <span class="Normal">uint8_t</span> scale=<span class="Constant">0</span><span class="Delimiter">,</span> index=<span class="Constant">0</span><span class="Delimiter">,</span> base=<span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L107" class="LineNr">107 </span>  <span class="Normal">bool</span> emit =<span class="Constant"> false</span><span class="Delimiter">;</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L109" class="LineNr">109 </span>    <span class="Normal">const</span> word&amp; curr = in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L110" class="LineNr">110 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;scale&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L111" class="LineNr">111 </span>      scale = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L112" class="LineNr">112 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L113" class="LineNr">113 </span>    <span class="Delimiter">}</span>
+<span id="L114" class="LineNr">114 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;index&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L115" class="LineNr">115 </span>      index = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L117" class="LineNr">117 </span>    <span class="Delimiter">}</span>
+<span id="L118" class="LineNr">118 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;base&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L119" class="LineNr">119 </span>      base = <a href='011run.cc.html#L222'>hex_byte</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">);</span>
+<span id="L120" class="LineNr">120 </span>      emit =<span class="Constant"> true</span><span class="Delimiter">;</span>
+<span id="L121" class="LineNr">121 </span>    <span class="Delimiter">}</span>
+<span id="L122" class="LineNr">122 </span>  <span class="Delimiter">}</span>
+<span id="L123" class="LineNr">123 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>emit<span class="Delimiter">)</span>
+<span id="L124" class="LineNr">124 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='024pack_operands.cc.html#L166'>hex_byte_text</a><span class="Delimiter">((</span>scale &lt;&lt; <span class="Constant">6</span><span class="Delimiter">)</span> | <span class="Delimiter">(</span>index &lt;&lt; <span class="Constant">3</span><span class="Delimiter">)</span> | base<span class="Delimiter">));</span>
+<span id="L125" class="LineNr">125 </span><span class="Delimiter">}</span>
+<span id="L126" class="LineNr">126 </span>
+<span id="L127" class="LineNr">127 </span><span class="Normal">void</span> <a href='024pack_operands.cc.html#L127'>add_disp_bytes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; in<span class="Delimiter">,</span> line&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L128" class="LineNr">128 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L129" class="LineNr">129 </span>    <span class="Normal">const</span> word&amp; curr = in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L130" class="LineNr">130 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">))</span>
+<span id="L131" class="LineNr">131 </span>      emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L132" class="LineNr">132 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">))</span>
+<span id="L133" class="LineNr">133 </span>      emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">2</span><span class="Delimiter">);</span>
+<span id="L134" class="LineNr">134 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">))</span>
+<span id="L135" class="LineNr">135 </span>      emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">);</span>
+<span id="L136" class="LineNr">136 </span>  <span class="Delimiter">}</span>
+<span id="L137" class="LineNr">137 </span><span class="Delimiter">}</span>
+<span id="L138" class="LineNr">138 </span>
+<span id="L139" class="LineNr">139 </span><span class="Normal">void</span> <a href='024pack_operands.cc.html#L139'>add_imm_bytes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; in<span class="Delimiter">,</span> line&amp; out<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L140" class="LineNr">140 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L141" class="LineNr">141 </span>    <span class="Normal">const</span> word&amp; curr = in<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L142" class="LineNr">142 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">))</span>
+<span id="L143" class="LineNr">143 </span>      emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L144" class="LineNr">144 </span>    <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">))</span>
+<span id="L145" class="LineNr">145 </span>      emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> curr<span class="Delimiter">,</span> <span class="Constant">4</span><span class="Delimiter">);</span>
+<span id="L146" class="LineNr">146 </span>  <span class="Delimiter">}</span>
+<span id="L147" class="LineNr">147 </span><span class="Delimiter">}</span>
+<span id="L148" class="LineNr">148 </span>
+<span id="L149" class="LineNr">149 </span><span class="Normal">void</span> emit_hex_bytes<span class="Delimiter">(</span>line&amp; out<span class="Delimiter">,</span> <span class="Normal">const</span> word&amp; w<span class="Delimiter">,</span> <span class="Normal">int</span> num<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L150" class="LineNr">150 </span>  assert<span class="Delimiter">(</span>num &lt;= <span class="Constant">4</span><span class="Delimiter">);</span>
+<span id="L151" class="LineNr">151 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>!is_hex_int<span class="Delimiter">(</span>w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L152" class="LineNr">152 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>w<span class="Delimiter">);</span>
+<span id="L153" class="LineNr">153 </span>    <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L154" class="LineNr">154 </span>  <span class="Delimiter">}</span>
+<span id="L155" class="LineNr">155 </span>  emit_hex_bytes<span class="Delimiter">(</span>out<span class="Delimiter">,</span> <span class="Normal">static_cast</span>&lt;<span class="Normal">uint32_t</span>&gt;<span class="Delimiter">(</span><a href='023check_operand_bounds.cc.html#L65'>parse_int</a><span class="Delimiter">(</span>w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)),</span> num<span class="Delimiter">);</span>
+<span id="L156" class="LineNr">156 </span><span class="Delimiter">}</span>
+<span id="L157" class="LineNr">157 </span>
+<span id="L158" class="LineNr">158 </span><span class="Normal">void</span> emit_hex_bytes<span class="Delimiter">(</span>line&amp; out<span class="Delimiter">,</span> <span class="Normal">uint32_t</span> val<span class="Delimiter">,</span> <span class="Normal">int</span> num<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L159" class="LineNr">159 </span>  assert<span class="Delimiter">(</span>num &lt;= <span class="Constant">4</span><span class="Delimiter">);</span>
+<span id="L160" class="LineNr">160 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; num<span class="Delimiter">;</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L161" class="LineNr">161 </span>    out<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='024pack_operands.cc.html#L166'>hex_byte_text</a><span class="Delimiter">(</span>val &amp; <span class="Constant">0xff</span><span class="Delimiter">));</span>
+<span id="L162" class="LineNr">162 </span>    val = val &gt;&gt; <span class="Constant">8</span><span class="Delimiter">;</span>
+<span id="L163" class="LineNr">163 </span>  <span class="Delimiter">}</span>
+<span id="L164" class="LineNr">164 </span><span class="Delimiter">}</span>
+<span id="L165" class="LineNr">165 </span>
+<span id="L166" class="LineNr">166 </span><a href='011run.cc.html#L113'>word</a> <a href='024pack_operands.cc.html#L166'>hex_byte_text</a><span class="Delimiter">(</span><span class="Normal">uint8_t</span> val<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L167" class="LineNr">167 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L168" class="LineNr">168 </span>  out &lt;&lt; <a href='010vm.cc.html#L227'>HEXBYTE</a> &lt;&lt; <a href='010vm.cc.html#L230'>NUM</a><span class="Delimiter">(</span>val<span class="Delimiter">);</span>
+<span id="L169" class="LineNr">169 </span>  <a href='011run.cc.html#L113'>word</a> result<span class="Delimiter">;</span>
+<span id="L170" class="LineNr">170 </span>  result<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a> = out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L171" class="LineNr">171 </span>  result<span class="Delimiter">.</span><a href='011run.cc.html#L114'>original</a> = out<span class="Delimiter">.</span>str<span class="Delimiter">()</span>+<span class="Constant">&quot;/auto&quot;</span><span class="Delimiter">;</span>
+<span id="L172" class="LineNr">172 </span>  <span class="Identifier">return</span> result<span class="Delimiter">;</span>
+<span id="L173" class="LineNr">173 </span><span class="Delimiter">}</span>
+<span id="L174" class="LineNr">174 </span>
+<span id="L175" class="LineNr">175 </span>string to_string<span class="Delimiter">(</span><span class="Normal">const</span> vector&lt;word&gt;&amp; in<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L176" class="LineNr">176 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L177" class="LineNr">177 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>in<span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L178" class="LineNr">178 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L179" class="LineNr">179 </span>    out &lt;&lt; in<span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">;</span>
+<span id="L180" class="LineNr">180 </span>  <span class="Delimiter">}</span>
+<span id="L181" class="LineNr">181 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L182" class="LineNr">182 </span><span class="Delimiter">}</span>
+<span id="L183" class="LineNr">183 </span>
+<span id="L184" class="LineNr">184 </span><span class="Comment">// helper</span>
+<span id="L185" class="LineNr">185 </span><span class="Normal">void</span> transform<span class="Delimiter">(</span><span class="Normal">const</span> string&amp; text_bytes<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L186" class="LineNr">186 </span>  <a href='011run.cc.html#L94'>program</a> p<span class="Delimiter">;</span>
+<span id="L187" class="LineNr">187 </span>  istringstream in<span class="Delimiter">(</span>text_bytes<span class="Delimiter">);</span>
+<span id="L188" class="LineNr">188 </span>  <a href='011run.cc.html#L122'>parse</a><span class="Delimiter">(</span>in<span class="Delimiter">,</span> p<span class="Delimiter">);</span>
+<span id="L189" class="LineNr">189 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L190" class="LineNr">190 </span>  transform<span class="Delimiter">(</span>p<span class="Delimiter">);</span>
+<span id="L191" class="LineNr">191 </span><span class="Delimiter">}</span>
+<span id="L192" class="LineNr">192 </span>
+<span id="L193" class="LineNr">193 </span><span class="Delimiter">:(scenario pack_immediate_constants_hex)</span>
+<span id="L194" class="LineNr">194 </span>== <span class="Constant">0x1</span>
+<span id="L195" class="LineNr">195 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L196" class="LineNr">196 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L197" class="LineNr">197 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L198" class="LineNr">198 </span>  bb                                                                                                                      <span class="Constant">0x2a</span>/imm32        <span class="Comment"># copy 42 to EBX</span>
+<span id="L199" class="LineNr">199 </span><span class="traceContains">+transform: packing instruction 'bb 0x2a/imm32'</span>
+<span id="L200" class="LineNr">200 </span><span class="traceContains">+transform: instruction after packing: 'bb 2a 00 00 00'</span>
+<span id="L201" class="LineNr">201 </span><span class="traceContains">+run: copy <a href='011run.cc.html#L253'>imm32</a> 0x0000002a to <a href='010vm.cc.html#L16'>EBX</a></span>
+<span id="L202" class="LineNr">202 </span>
+<span id="L203" class="LineNr">203 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L204" class="LineNr">204 </span><span class="Delimiter">:(scenario pack_silently_ignores_non_hex)</span>
+<span id="L205" class="LineNr">205 </span>== <span class="Constant">0x1</span>
+<span id="L206" class="LineNr">206 </span><span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L207" class="LineNr">207 </span><span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L208" class="LineNr">208 </span><span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L209" class="LineNr">209 </span>  bb                                                                                                                      foo/imm32         <span class="Comment"># copy foo to EBX</span>
+<span id="L210" class="LineNr">210 </span><span class="traceContains">+transform: packing instruction 'bb foo/imm32'</span>
+<span id="L211" class="LineNr">211 </span><span class="Comment"># no change (we're just not printing metadata to the trace)</span>
+<span id="L212" class="LineNr">212 </span><span class="traceContains">+transform: instruction after packing: 'bb foo'</span>
+<span id="L213" class="LineNr">213 </span>$error: <span class="Constant">0</span>
+<span id="L214" class="LineNr">214 </span><span class="Delimiter">:(scenarios run)</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/025non_code_segment.cc.html b/html/subx/025non_code_segment.cc.html
new file mode 100644
index 00000000..75e3d182
--- /dev/null
+++ b/html/subx/025non_code_segment.cc.html
@@ -0,0 +1,94 @@
+<!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 - subx/025non_code_segment.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Special { color: #c00000; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr"> 1 </span><span class="Comment">//: Raise an error when operand metadata is used in non-code segments.</span>
+<span id="L2" class="LineNr"> 2 </span>
+<span id="L3" class="LineNr"> 3 </span><span class="Delimiter">:(scenario operand_metadata_outside_code_segment)</span>
+<span id="L4" class="LineNr"> 4 </span><span class="Special">% Hide_errors = true;</span>
+<span id="L5" class="LineNr"> 5 </span>== <span class="Constant">0x1</span>  <span class="Comment"># code segment</span>
+<span id="L6" class="LineNr"> 6 </span>cd <span class="Constant">0x80</span>/imm8
+<span id="L7" class="LineNr"> 7 </span>== <span class="Constant">0x1000</span>  <span class="Comment"># data segment</span>
+<span id="L8" class="LineNr"> 8 </span>cd <span class="Constant">12</span>/imm8
+<span id="L9" class="LineNr"> 9 </span><span class="traceContains">+error: 12/imm8: metadata imm8 is only allowed in the (first) code segment</span>
+<span id="L10" class="LineNr">10 </span>
+<span id="L11" class="LineNr">11 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L12" class="LineNr">12 </span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='025non_code_segment.cc.html#L14'>ensure_operands_only_in_code_segments</a><span class="Delimiter">);</span>
+<span id="L13" class="LineNr">13 </span><span class="Delimiter">:(code)</span>
+<span id="L14" class="LineNr">14 </span><span class="Normal">void</span> <a href='025non_code_segment.cc.html#L14'>ensure_operands_only_in_code_segments</a><span class="Delimiter">(</span><span class="Comment">/*</span><span class="Comment">const</span><span class="Comment">*/</span> program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L15" class="LineNr">15 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- ensure operands only in code segments&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L16" class="LineNr">16 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L17" class="LineNr">17 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Comment">/*</span><span class="Comment">skip code segment</span><span class="Comment">*/</span><span class="Constant">1</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L18" class="LineNr">18 </span>    <span class="Normal">const</span> segment&amp; seg = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L19" class="LineNr">19 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>seg<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L20" class="LineNr">20 </span>      <span class="Normal">const</span> line&amp; l = seg<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L21" class="LineNr">21 </span>      <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> k = <span class="Constant">0</span><span class="Delimiter">;</span>  k &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>l<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++k<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L22" class="LineNr">22 </span>        <span class="Normal">const</span> word&amp; w = l<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>k<span class="Delimiter">);</span>
+<span id="L23" class="LineNr">23 </span>        <span class="Normal">for</span> <span class="Delimiter">(</span>map&lt;string<span class="Delimiter">,</span> <span class="Normal">uint32_t</span>&gt;::iterator p = <a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">.</span>begin<span class="Delimiter">();</span>  p != <a href='023check_operand_bounds.cc.html#L10'>Operand_bound</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>  ++p<span class="Delimiter">)</span>
+<span id="L24" class="LineNr">24 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>w<span class="Delimiter">,</span> p<span class="Delimiter">-&gt;</span>first<span class="Delimiter">))</span>
+<span id="L25" class="LineNr">25 </span>            <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; w<span class="Delimiter">.</span><a href='011run.cc.html#L114'>original</a> &lt;&lt; <span class="Constant">&quot;: metadata &quot;</span> &lt;&lt; p<span class="Delimiter">-&gt;</span>first &lt;&lt; <span class="Constant">&quot; is only allowed in the (first) code segment</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L26" class="LineNr">26 </span>      <span class="Delimiter">}</span>
+<span id="L27" class="LineNr">27 </span>    <span class="Delimiter">}</span>
+<span id="L28" class="LineNr">28 </span>  <span class="Delimiter">}</span>
+<span id="L29" class="LineNr">29 </span><span class="Delimiter">}</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/subx/026labels.cc.html b/html/subx/026labels.cc.html
new file mode 100644
index 00000000..ffd2f1e5
--- /dev/null
+++ b/html/subx/026labels.cc.html
@@ -0,0 +1,226 @@
+<!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 - subx/026labels.cc</title>
+<meta name="Generator" content="Vim/7.4">
+<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">
+<style type="text/css">
+<!--
+pre { white-space: pre-wrap; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color: #080808; }
+a { color:#eeeeee; text-decoration: none; }
+a:hover { text-decoration: underline; }
+* { font-size: 12pt; font-size: 1em; }
+.Constant { color: #00a0a0; }
+.Comment { color: #9090ff; }
+.Comment a { color:#0000ee; text-decoration:underline; }
+.Delimiter { color: #800080; }
+.LineNr { color: #444444; }
+.Identifier { color: #c0a020; }
+.Normal { color: #aaaaaa; background-color: #080808; padding-bottom: 1px; }
+.PreProc { color: #800080; }
+.traceContains { color: #008000; }
+.cSpecial { color: #008000; }
+-->
+</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();'>
+<pre id='vimCodeElement'>
+<span id="L1" class="LineNr">  1 </span><span class="Comment">//: Labels are defined by ending names with a ':'. This layer will compute</span>
+<span id="L2" class="LineNr">  2 </span><span class="Comment">//: addresses for labels, and compute the offset for instructions using them.</span>
+<span id="L3" class="LineNr">  3 </span>
+<span id="L4" class="LineNr">  4 </span><span class="Delimiter">:(scenarios transform)</span>
+<span id="L5" class="LineNr">  5 </span><span class="Delimiter">:(scenario map_label)</span>
+<span id="L6" class="LineNr">  6 </span>== <span class="Constant">0x1</span>
+<span id="L7" class="LineNr">  7 </span>          <span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L8" class="LineNr">  8 </span>          <span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L9" class="LineNr">  9 </span>          <span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L10" class="LineNr"> 10 </span><span class="Normal">loop</span>:
+<span id="L11" class="LineNr"> 11 </span>            <span class="PreProc">0</span><span class="Constant">5</span>                                                                                                                      <span class="Constant">0x0d0c0b0a</span>/imm32  <span class="Comment"># add to EAX</span>
+<span id="L12" class="LineNr"> 12 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L73'>label</a> 'loop' is at address 1</span>
+<span id="L13" class="LineNr"> 13 </span>
+<span id="L14" class="LineNr"> 14 </span><span class="Delimiter">:(before &quot;End One-time Setup&quot;)</span>
+<span id="L15" class="LineNr"> 15 </span><a href='011run.cc.html#L184'>Transform</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span><a href='026labels.cc.html#L18'>rewrite_labels</a><span class="Delimiter">);</span>
+<span id="L16" class="LineNr"> 16 </span>
+<span id="L17" class="LineNr"> 17 </span><span class="Delimiter">:(code)</span>
+<span id="L18" class="LineNr"> 18 </span><span class="Normal">void</span> <a href='026labels.cc.html#L18'>rewrite_labels</a><span class="Delimiter">(</span>program&amp; p<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L19" class="LineNr"> 19 </span>  <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;-- rewrite labels&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L20" class="LineNr"> 20 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span>p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>empty<span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L21" class="LineNr"> 21 </span>  segment&amp; code = p<span class="Delimiter">.</span><a href='011run.cc.html#L95'>segments</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">);</span>
+<span id="L22" class="LineNr"> 22 </span>  map&lt;string<span class="Delimiter">,</span> <span class="Normal">int32_t</span>&gt; address<span class="Delimiter">;</span>  <span class="Comment">// values are unsigned, but we're going to do subtractions on them so they need to fit in 31 bits</span>
+<span id="L23" class="LineNr"> 23 </span>  <a href='026labels.cc.html#L30'>compute_addresses_for_labels</a><span class="Delimiter">(</span>code<span class="Delimiter">,</span> address<span class="Delimiter">);</span>
+<span id="L24" class="LineNr"> 24 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L25" class="LineNr"> 25 </span>  <a href='026labels.cc.html#L64'>drop_labels</a><span class="Delimiter">(</span>code<span class="Delimiter">);</span>
+<span id="L26" class="LineNr"> 26 </span>  <span class="Normal">if</span> <span class="Delimiter">(</span><a href='003trace.cc.html#L208'>trace_contains_errors</a><span class="Delimiter">())</span> <span class="Identifier">return</span><span class="Delimiter">;</span>
+<span id="L27" class="LineNr"> 27 </span>  <a href='026labels.cc.html#L76'>replace_labels_with_addresses</a><span class="Delimiter">(</span>code<span class="Delimiter">,</span> address<span class="Delimiter">);</span>
+<span id="L28" class="LineNr"> 28 </span><span class="Delimiter">}</span>
+<span id="L29" class="LineNr"> 29 </span>
+<span id="L30" class="LineNr"> 30 </span><span class="Normal">void</span> <a href='026labels.cc.html#L30'>compute_addresses_for_labels</a><span class="Delimiter">(</span><span class="Normal">const</span> segment&amp; code<span class="Delimiter">,</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int32_t</span>&gt;&amp; address<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L31" class="LineNr"> 31 </span>  <span class="Normal">int</span> current_byte = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L32" class="LineNr"> 32 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L33" class="LineNr"> 33 </span>    <span class="Normal">const</span> line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L34" class="LineNr"> 34 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L35" class="LineNr"> 35 </span>      <span class="Normal">const</span> word&amp; curr = inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L36" class="LineNr"> 36 </span>      <span class="Comment">// hack: if we have any operand metadata left after previous transforms,</span>
+<span id="L37" class="LineNr"> 37 </span>      <span class="Comment">// deduce its size</span>
+<span id="L38" class="LineNr"> 38 </span>      <span class="Comment">// Maybe we should just move this transform to before instruction</span>
+<span id="L39" class="LineNr"> 39 </span>      <span class="Comment">// packing, and deduce the size of *all* operands. But then we'll also</span>
+<span id="L40" class="LineNr"> 40 </span>      <span class="Comment">// have to deal with bitfields.</span>
+<span id="L41" class="LineNr"> 41 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">)</span> || has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L42" class="LineNr"> 42 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>*curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">)</span>
+<span id="L43" class="LineNr"> 43 </span>          <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': don't use ':' when jumping to labels</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; end<span class="Delimiter">();</span>
+<span id="L44" class="LineNr"> 44 </span>        current_byte += <span class="Constant">4</span><span class="Delimiter">;</span>
+<span id="L45" class="LineNr"> 45 </span>      <span class="Delimiter">}</span>
+<span id="L46" class="LineNr"> 46 </span>      <span class="Comment">// automatically handle /disp8 and /imm8 here</span>
+<span id="L47" class="LineNr"> 47 </span>      <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>*curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> != <span class="Constant">':'</span><span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L48" class="LineNr"> 48 </span>        ++current_byte<span class="Delimiter">;</span>
+<span id="L49" class="LineNr"> 49 </span>      <span class="Delimiter">}</span>
+<span id="L50" class="LineNr"> 50 </span>      <span class="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L51" class="LineNr"> 51 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span><a href='022check_instruction.cc.html#L344'>contains_any_operand_metadata</a><span class="Delimiter">(</span>curr<span class="Delimiter">))</span>
+<span id="L52" class="LineNr"> 52 </span>          <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': <a href='003trace.cc.html#L73'>label</a> definition (':') not allowed in operand</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L53" class="LineNr"> 53 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>j &gt; <span class="Constant">0</span><span class="Delimiter">)</span>
+<span id="L54" class="LineNr"> 54 </span>          <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': labels can only be the first <a href='011run.cc.html#L113'>word</a> in a line.</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L55" class="LineNr"> 55 </span>        string <a href='003trace.cc.html#L73'>label</a> = curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>substr<span class="Delimiter">(</span><span class="Constant">0</span><span class="Delimiter">,</span> <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">)</span>-<span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L56" class="LineNr"> 56 </span>        <a href='001help.cc.html#L243'>put</a><span class="Delimiter">(</span>address<span class="Delimiter">,</span> <a href='003trace.cc.html#L73'>label</a><span class="Delimiter">,</span> current_byte<span class="Delimiter">);</span>
+<span id="L57" class="LineNr"> 57 </span>        <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;label '&quot;</span> &lt;&lt; label &lt;&lt; <span class="Constant">&quot;' is at address &quot;</span> &lt;&lt; <span class="Delimiter">(</span>current_byte+code<span class="Delimiter">.</span><a href='011run.cc.html#L103'>start</a><span class="Delimiter">)</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L58" class="LineNr"> 58 </span>        <span class="Comment">// no modifying current_byte; label definitions won't be in the final binary</span>
+<span id="L59" class="LineNr"> 59 </span>      <span class="Delimiter">}</span>
+<span id="L60" class="LineNr"> 60 </span>    <span class="Delimiter">}</span>
+<span id="L61" class="LineNr"> 61 </span>  <span class="Delimiter">}</span>
+<span id="L62" class="LineNr"> 62 </span><span class="Delimiter">}</span>
+<span id="L63" class="LineNr"> 63 </span>
+<span id="L64" class="LineNr"> 64 </span><span class="Normal">void</span> <a href='026labels.cc.html#L64'>drop_labels</a><span class="Delimiter">(</span>segment&amp; code<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L65" class="LineNr"> 65 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L66" class="LineNr"> 66 </span>    line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L67" class="LineNr"> 67 </span>    vector&lt;word&gt;::iterator new_end = remove_if<span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>begin<span class="Delimiter">(),</span> inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">(),</span> <a href='026labels.cc.html#L72'>is_label</a><span class="Delimiter">);</span>
+<span id="L68" class="LineNr"> 68 </span>    inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>erase<span class="Delimiter">(</span>new_end<span class="Delimiter">,</span> inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span><a href='003trace.cc.html#L213'>end</a><span class="Delimiter">());</span>
+<span id="L69" class="LineNr"> 69 </span>  <span class="Delimiter">}</span>
+<span id="L70" class="LineNr"> 70 </span><span class="Delimiter">}</span>
+<span id="L71" class="LineNr"> 71 </span>
+<span id="L72" class="LineNr"> 72 </span><span class="Normal">bool</span> <a href='026labels.cc.html#L72'>is_label</a><span class="Delimiter">(</span><span class="Normal">const</span> word&amp; w<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L73" class="LineNr"> 73 </span>  <span class="Identifier">return</span> *w<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">.</span>rbegin<span class="Delimiter">()</span> == <span class="Constant">':'</span><span class="Delimiter">;</span>
+<span id="L74" class="LineNr"> 74 </span><span class="Delimiter">}</span>
+<span id="L75" class="LineNr"> 75 </span>
+<span id="L76" class="LineNr"> 76 </span><span class="Normal">void</span> <a href='026labels.cc.html#L76'>replace_labels_with_addresses</a><span class="Delimiter">(</span>segment&amp; code<span class="Delimiter">,</span> <span class="Normal">const</span> map&lt;string<span class="Delimiter">,</span> <span class="Normal">int32_t</span>&gt;&amp; address<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L77" class="LineNr"> 77 </span>  <span class="Normal">int32_t</span> byte_next_instruction_starts_at = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L78" class="LineNr"> 78 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L79" class="LineNr"> 79 </span>    line&amp; inst = code<span class="Delimiter">.</span><a href='011run.cc.html#L104'>lines</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L80" class="LineNr"> 80 </span>    byte_next_instruction_starts_at += <a href='026labels.cc.html#L112'>num_bytes</a><span class="Delimiter">(</span>inst<span class="Delimiter">);</span>
+<span id="L81" class="LineNr"> 81 </span>    <a href='011run.cc.html#L108'>line</a> new_inst<span class="Delimiter">;</span>
+<span id="L82" class="LineNr"> 82 </span>    <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> j = <span class="Constant">0</span><span class="Delimiter">;</span>  j &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++j<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L83" class="LineNr"> 83 </span>      <span class="Normal">const</span> word&amp; curr = inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>j<span class="Delimiter">);</span>
+<span id="L84" class="LineNr"> 84 </span>      <span class="Normal">if</span> <span class="Delimiter">(</span><a href='001help.cc.html#L247'>contains_key</a><span class="Delimiter">(</span>address<span class="Delimiter">,</span> curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L85" class="LineNr"> 85 </span>        <span class="Normal">int32_t</span> offset = <span class="Normal">static_cast</span>&lt;<span class="Normal">int32_t</span>&gt;<span class="Delimiter">(</span>get<span class="Delimiter">(</span>address<span class="Delimiter">,</span> curr<span class="Delimiter">.</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">))</span> - byte_next_instruction_starts_at<span class="Delimiter">;</span>
+<span id="L86" class="LineNr"> 86 </span>        <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp8&quot;</span><span class="Delimiter">)</span> || has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm8&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L87" class="LineNr"> 87 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt; <span class="Constant">0xff</span> || offset &lt; -<span class="Constant">0x7f</span><span class="Delimiter">)</span>
+<span id="L88" class="LineNr"> 88 </span>            <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': <a href='003trace.cc.html#L73'>label</a> too far away for distance &quot;</span> &lt;&lt; std::hex &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; to fit in 8 bits</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L89" class="LineNr"> 89 </span>          <span class="Normal">else</span>
+<span id="L90" class="LineNr"> 90 </span>            emit_hex_bytes<span class="Delimiter">(</span>new_inst<span class="Delimiter">,</span> offset<span class="Delimiter">,</span> <span class="Constant">1</span><span class="Delimiter">);</span>
+<span id="L91" class="LineNr"> 91 </span>        <span class="Delimiter">}</span>
+<span id="L92" class="LineNr"> 92 </span>        <span class="Normal">else</span> <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp16&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L93" class="LineNr"> 93 </span>          <span class="Normal">if</span> <span class="Delimiter">(</span>offset &gt; <span class="Constant">0xffff</span> || offset &lt; -<span class="Constant">0x7fff</span><span class="Delimiter">)</span>
+<span id="L94" class="LineNr"> 94 </span>            <a href='003trace.cc.html#L196'>raise</a> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;': <a href='003trace.cc.html#L73'>label</a> too far away for distance &quot;</span> &lt;&lt; std::hex &lt;&lt; offset &lt;&lt; <span class="Constant">&quot; to fit in 16 bits</span><span class="cSpecial">\n</span><span class="Constant">&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L95" class="LineNr"> 95 </span>          <span class="Normal">else</span>
+<span id="L96" class="LineNr"> 96 </span>            emit_hex_bytes<span class="Delimiter">(</span>new_inst<span class="Delimiter">,</span> offset<span class="Delimiter">,</span> <span class="Constant">2</span><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="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">)</span> || has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">))</span> <span class="Delimiter">{</span>
+<span id="L99" class="LineNr"> 99 </span>          emit_hex_bytes<span class="Delimiter">(</span>new_inst<span class="Delimiter">,</span> offset<span class="Delimiter">,</span> <span class="Constant">4</span><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="Normal">else</span> <span class="Delimiter">{</span>
+<span id="L103" class="LineNr">103 </span>        new_inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>push_back<span class="Delimiter">(</span>curr<span class="Delimiter">);</span>
+<span id="L104" class="LineNr">104 </span>      <span class="Delimiter">}</span>
+<span id="L105" class="LineNr">105 </span>    <span class="Delimiter">}</span>
+<span id="L106" class="LineNr">106 </span>    inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>swap<span class="Delimiter">(</span>new_inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>
+<span id="L107" class="LineNr">107 </span>    <a href='003trace.cc.html#L189'>trace</a><span class="Delimiter">(</span><span class="Constant">99</span><span class="Delimiter">,</span> <span class="Constant">&quot;transform&quot;</span><span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;instruction after transform: '&quot;</span> &lt;&lt; data_to_string<span class="Delimiter">(</span>inst<span class="Delimiter">)</span> &lt;&lt; <span class="Constant">&quot;'&quot;</span> &lt;&lt; <a href='003trace.cc.html#L213'>end</a><span class="Delimiter">();</span>
+<span id="L108" class="LineNr">108 </span>  <span class="Delimiter">}</span>
+<span id="L109" class="LineNr">109 </span><span class="Delimiter">}</span>
+<span id="L110" class="LineNr">110 </span>
+<span id="L111" class="LineNr">111 </span><span class="Comment">// Assumes all bitfields are packed.</span>
+<span id="L112" class="LineNr">112 </span><span class="Normal">uint32_t</span> <a href='026labels.cc.html#L112'>num_bytes</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L113" class="LineNr">113 </span>  <span class="Normal">uint32_t</span> sum = <span class="Constant">0</span><span class="Delimiter">;</span>
+<span id="L114" class="LineNr">114 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L115" class="LineNr">115 </span>    <span class="Normal">const</span> word&amp; curr = inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">);</span>
+<span id="L116" class="LineNr">116 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;disp32&quot;</span><span class="Delimiter">)</span> || has_metadata<span class="Delimiter">(</span>curr<span class="Delimiter">,</span> <span class="Constant">&quot;imm32&quot;</span><span class="Delimiter">))</span>  <span class="Comment">// only multi-byte operands</span>
+<span id="L117" class="LineNr">117 </span>      sum += <span class="Constant">4</span><span class="Delimiter">;</span>
+<span id="L118" class="LineNr">118 </span>    <span class="Normal">else</span>
+<span id="L119" class="LineNr">119 </span>      sum++<span class="Delimiter">;</span>
+<span id="L120" class="LineNr">120 </span>  <span class="Delimiter">}</span>
+<span id="L121" class="LineNr">121 </span>  <span class="Identifier">return</span> sum<span class="Delimiter">;</span>
+<span id="L122" class="LineNr">122 </span><span class="Delimiter">}</span>
+<span id="L123" class="LineNr">123 </span>
+<span id="L124" class="LineNr">124 </span>string <a href='026labels.cc.html#L124'>data_to_string</a><span class="Delimiter">(</span><span class="Normal">const</span> line&amp; inst<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L125" class="LineNr">125 </span>  ostringstream out<span class="Delimiter">;</span>
+<span id="L126" class="LineNr">126 </span>  <span class="Normal">for</span> <span class="Delimiter">(</span><span class="Normal">int</span> i = <span class="Constant">0</span><span class="Delimiter">;</span>  i &lt; <a href='001help.cc.html#L157'>SIZE</a><span class="Delimiter">(</span>inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">);</span>  ++i<span class="Delimiter">)</span> <span class="Delimiter">{</span>
+<span id="L127" class="LineNr">127 </span>    <span class="Normal">if</span> <span class="Delimiter">(</span>i &gt; <span class="Constant">0</span><span class="Delimiter">)</span> out &lt;&lt; <span class="Constant">' '</span><span class="Delimiter">;</span>
+<span id="L128" class="LineNr">128 </span>    out &lt;&lt; inst<span class="Delimiter">.</span><a href='011run.cc.html#L109'>words</a><span class="Delimiter">.</span>at<span class="Delimiter">(</span>i<span class="Delimiter">).</span><a href='011run.cc.html#L115'>data</a><span class="Delimiter">;</span>
+<span id="L129" class="LineNr">129 </span>  <span class="Delimiter">}</span>
+<span id="L130" class="LineNr">130 </span>  <span class="Identifier">return</span> out<span class="Delimiter">.</span>str<span class="Delimiter">();</span>
+<span id="L131" class="LineNr">131 </span><span class="Delimiter">}</span>
+<span id="L132" class="LineNr">132 </span>
+<span id="L133" class="LineNr">133 </span><span class="Comment">//: Label definitions must be the first word on a line. No jumping inside</span>
+<span id="L134" class="LineNr">134 </span><span class="Comment">//: instructions.</span>
+<span id="L135" class="LineNr">135 </span><span class="Comment">//: They should also be the only word on a line.</span>
+<span id="L136" class="LineNr">136 </span><span class="Comment">//: However, you can absolutely have multiple labels map to the same address,</span>
+<span id="L137" class="LineNr">137 </span><span class="Comment">//: as long as they're on separate lines.</span>
+<span id="L138" class="LineNr">138 </span>
+<span id="L139" class="LineNr">139 </span><span class="Delimiter">:(scenario multiple_labels_at)</span>
+<span id="L140" class="LineNr">140 </span>== <span class="Constant">0x1</span>
+<span id="L141" class="LineNr">141 </span>          <span class="Comment"># instruction                     effective address                                           operand     displacement    immediate</span>
+<span id="L142" class="LineNr">142 </span>          <span class="Comment"># op          subop               mod             rm32          base      index     scale     r32</span>
+<span id="L143" class="LineNr">143 </span>          <span class="Comment"># 1-3 bytes   3 bits              2 bits          3 bits        3 bits    3 bits    2 bits    2 bits      0/1/2/4 bytes   0/1/2/4 bytes</span>
+<span id="L144" class="LineNr">144 </span><span class="Comment"># address 1</span>
+<span id="L145" class="LineNr">145 </span><span class="Normal">loop</span>:
+<span id="L146" class="LineNr">146 </span><span class="Normal">loop2</span>:
+<span id="L147" class="LineNr">147 </span><span class="Comment"># address 1 (labels take up no space)</span>
+<span id="L148" class="LineNr">148 </span>            <span class="PreProc">0</span><span class="Constant">5</span>                                                                                                                      <span class="Constant">0x0d0c0b0a</span>/imm32  <span class="Comment"># add to EAX</span>
+<span id="L149" class="LineNr">149 </span><span class="Comment"># address 6</span>
+<span id="L150" class="LineNr">150 </span>            eb                                                                                                      loop2/disp8
+<span id="L151" class="LineNr">151 </span><span class="Comment"># address 8</span>
+<span id="L152" class="LineNr">152 </span>            eb                                                                                                      loop3/disp8
+<span id="L153" class="LineNr">153 </span><span class="Comment"># address 10</span>
+<span id="L154" class="LineNr">154 </span><span class="Normal">loop3</span>:
+<span id="L155" class="LineNr">155 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L73'>label</a> 'loop' is at address 1</span>
+<span id="L156" class="LineNr">156 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L73'>label</a> 'loop2' is at address 1</span>
+<span id="L157" class="LineNr">157 </span><span class="traceContains">+transform: <a href='003trace.cc.html#L73'>label</a> 'loop3' is at address 10</span>
+<span id="L158" class="LineNr">158 </span><span class="Comment"># first jump is to -7</span>
+<span id="L159" class="LineNr">159 </span><span class="traceContains">+transform: instruction after transform: 'eb f9'</span>
+<span id="L160" class="LineNr">160 </span><span class="Comment"># second jump is to 0 (fall through)</span>
+<span id="L161" class="LineNr">161 </span><span class="traceContains">+transform: instruction after transform: 'eb 00'</span>
+</pre>
+</body>
+</html>
+<!-- vim: set foldmethod=manual : -->
diff --git a/html/tangle.mu.html b/html/tangle.mu.html
index 789a9af4..2a0d11cf 100644
--- a/html/tangle.mu.html
+++ b/html/tangle.mu.html
@@ -15,10 +15,10 @@ body { font-size: 12pt; font-family: monospace; color: #aaaaaa; background-color
 a { color:#eeeeee; text-decoration: none; }
 a:hover { text-decoration: underline; }
 * { font-size: 12pt; font-size: 1em; }
-.muRecipe { color: #ff8700; }
 .muControl { color: #c0a020; }
-.Delimiter { color: #800080; }
+.muRecipe { color: #ff8700; }
 .Special { color: #c00000; }
+.Delimiter { color: #800080; }
 .Comment { color: #9090ff; }
 .Comment a { color:#0000ee; text-decoration:underline; }
 .Constant { color: #00a0a0; }
diff --git a/index.html b/index.html
index dde93753..f4b4aafb 100644
--- a/index.html
+++ b/index.html
@@ -110,7 +110,7 @@ allowing whitespace in reagents.
 <br/><a href='html/017parse_tree.cc.html'>017parse_tree.cc</a>: a new syntax
 for representing complex types as trees using whitespace and parentheses
 (s-expressions).
-<br/><a href='html/018type_abbreviations.cc.html'>018type_abbreviations.cc</a>:
+<br/><a href='html/019type_abbreviations.cc.html'>019type_abbreviations.cc</a>:
 the core types of Mu are designed to be fully explicit and familiar to
 non-programmers at the cost of some verbosity: <tt>number</tt>,
 <tt>character</tt>, <tt>boolean</tt>, etc. Once learners get acclimatized,